مصفوفة اللواحق

في علم الحاسوب ، مصفوفة اللواحق هي مصفوفة مرتبة تحتوي على جميع لواحق سلسلة نصية . وهي بنية بيانات تُستخدم في العديد من المجالات، من بينها فهارس النصوص الكاملة، وخوارزميات ضغط البيانات، ومجال علم قياسات الإنتاج الفكري .

تم تقديم مصفوفات اللواحق بواسطة مانبر ومايرز (1990) كبديل بسيط وفعال من حيث المساحة لأشجار اللواحق . وقد اكتشفها جاستون جونيه بشكل مستقل في عام 1987 تحت اسم مصفوفة PAT ( جونيه، بايزا-ياتس وسنايدر 1992 ) .

قدم لي ولي وهوو (2016) أول دراسة في مكانهايا(ن){\displaystyle {\mathcal {O}}(n)}خوارزمية بناء مصفوفة لاحقة زمنية مثالية من حيث الوقت والمساحة، حيث تعني كلمة "في المكان" أن الخوارزمية تحتاج فقط إلىيا(1){\displaystyle {\mathcal {O}}(1)}مساحة إضافية تتجاوز سلسلة الإدخال ومصفوفة لاحقة الإخراج.

مصفوفات اللواحق المحسّنة (ESAs) هي مصفوفات لواحق مزودة بجداول إضافية تُعيد إنتاج الوظائف الكاملة لأشجار اللواحق مع الحفاظ على نفس تعقيد الوقت والذاكرة. [ 1 ] تُسمى المصفوفة المرتبة التي تحتوي على بعض لواحق السلسلة فقط (بدلاً من جميعها) مصفوفة لواحق متفرقة . [ 2 ]

تعريف

يتركS=S[1]S[2]...S[ن]{\displaystyle S=S[1]S[2]...S[n]}كنن{\textstyle n}-string و letS[أنا،ج]{\displaystyle S[i,j]}يشير إلى السلسلة الفرعية منS{\displaystyle S}تتراوح منأنا{\displaystyle i}لج{\displaystyle j}شامل.

مصفوفة اللواحقأ{\displaystyle A}لS{\displaystyle S}يُعرَّف الآن بأنه مصفوفة من الأعداد الصحيحة التي توفر المواضع الأولية للواحق منS{\displaystyle S}بالترتيب المعجمي . وهذا يعني مدخلاًأ[أنا]{\displaystyle A[i]}يحتوي على موضع البداية لـأنا{\displaystyle i}أصغر لاحقة فيS{\displaystyle S}وهكذا للجميع1أنان{\displaystyle 1\leq i\leq n}:S[أ[أنا-1]،ن]<S[أ[أنا]،ن]{\displaystyle S[A[i-1],n]<S[A[i],n]}.

كل لاحقة منS{\displaystyle S}يظهر فيأ{\displaystyle A}مرة واحدة فقط. اللواحق عبارة عن سلاسل نصية بسيطة. يتم فرز هذه السلاسل (كما هو الحال في القاموس الورقي)، قبل حفظ مواقعها الأولية (مؤشرات عددية صحيحة) فيأ{\displaystyle A}.

مثال

انظر إلى النصS{\displaystyle S}= banana$ليتم فهرستها:

أنا1234567
S[أنا]{\displaystyle S[i]}بأنأنأدولار

ينتهي النص بحرف مميز $فريد من نوعه وأصغر حجماً من أي حرف آخر. ويحتوي النص على اللواحق التالية:

لاحقةأنا
موز$1
أناناس2
نانا$3
ana$4
ناس$5
أ$6
دولار7

يمكن ترتيب هذه اللواحق ترتيباً تصاعدياً:

لاحقةأنا
دولار7
أ$6
ana$4
أناناس2
موز$1
ناس$5
نانا$3

مصفوفة اللواحقأ{\displaystyle A}يحتوي على المواضع الأولية لهذه اللواحق المصنفة:

i =1234567
أ[أنا]{\displaystyle A[i]}=7642153

مصفوفة اللواحق مع كتابة اللواحق عموديًا في الأسفل للتوضيح:

i =1234567
أ[أنا]{\displaystyle A[i]}=7642153
1دولارأأأبنن
2دولارننأأأ
3أأندولارن
4دولارنأأ
5أندولار
6دولارأ
7دولار

فعلى سبيل المثال،أ[3]{\displaystyle A[3]}يحتوي على القيمة 4، وبالتالي يشير إلى اللاحقة التي تبدأ من الموضع 4 داخلS{\displaystyle S}، وهو اللاحقة ana$.

المراسلات المتعلقة بأشجار اللواحق

ترتبط مصفوفات اللواحق ارتباطًا وثيقًا بأشجار اللواحق :

  • يمكن إنشاء مصفوفات اللواحق من خلال إجراء اجتياز عميق لشجرة اللواحق. تتوافق مصفوفة اللواحق مع تسميات الأوراق المعطاة بالترتيب الذي تتم زيارتها به أثناء الاجتياز، إذا تمت زيارة الحواف بالترتيب المعجمي لأول حرف فيها.
  • يمكن إنشاء شجرة اللواحق في وقت خطي باستخدام مزيج من مصفوفة اللواحق ومصفوفة LCP . للاطلاع على وصف الخوارزمية، راجع القسم ذي الصلة في مقالة مصفوفة LCP .

لقد ثبت أنه يمكن استبدال كل خوارزمية لشجرة اللواحق بشكل منهجي بخوارزمية تستخدم مصفوفة لواحق مُحسَّنة بمعلومات إضافية (مثل مصفوفة LCP ) وتحل نفس المشكلة بنفس التعقيد الزمني. [ 1 ] تشمل مزايا مصفوفات اللواحق على أشجار اللواحق تحسين متطلبات المساحة، وخوارزميات بناء خطية أبسط (مقارنةً بخوارزمية أوكونين على سبيل المثال )، وتحسين موضعية الذاكرة المؤقتة. [ 3 ]

كفاءة استخدام المساحة

تم تقديم مصفوفات اللواحق بواسطة مانبر ومايرز (1990) بهدف تحسين متطلبات المساحة لأشجار اللواحق : تخزن مصفوفات اللواحقن{\displaystyle n}الأعداد الصحيحة. بافتراض أن العدد الصحيح يتطلب4{\displaystyle 4}تتطلب مصفوفة اللاحقة بايتات4ن{\displaystyle 4n}إجمالي البايتات. وهذا أقل بكثير من20ن{\displaystyle 20n}البايتات المطلوبة لتنفيذ شجرة اللواحق بعناية. [ 4 ]

مع ذلك، في بعض التطبيقات، قد تظل متطلبات المساحة لمصفوفات اللواحق باهظة. عند تحليلها بالبتات، تتطلب مصفوفة اللواحق مساحة تخزين تبلغ 10000 بت.يا(نسجلن){\displaystyle {\mathcal {O}}(n\log n)}المساحة، بينما النص الأصلي على أبجدية بحجمσ{\displaystyle \sigma }لا يتطلب الأمر سوىيا(نسجلσ){\displaystyle {\mathcal {O}}(n\log \sigma )}بتات. لجينوم بشري معσ=4{\displaystyle \sigma =4}ون=3.4×109{\displaystyle n=3.4\times 10^{9}}وبالتالي، فإن مصفوفة اللواحق ستشغل مساحة ذاكرة أكبر بحوالي 16 مرة من مساحة الجينوم نفسه.

دفعت هذه التباينات إلى ظهور اتجاه نحو استخدام مصفوفات اللواحق المضغوطة وفهارس النصوص الكاملة المضغوطة القائمة على BWT، مثل فهرس FM . لا تتطلب هذه البنى البياناتية سوى مساحة بحجم النص أو حتى أقل.

خوارزميات البناء

يمكن إنشاء شجرة اللواحق فييا(ن){\displaystyle {\mathcal {O}}(n)}ويمكن تحويلها إلى مصفوفة لاحقة عن طريق اجتياز الشجرة بالبحث العميق أولاً، أيضاً فييا(ن){\displaystyle {\mathcal {O}}(n)}لذا توجد خوارزميات يمكنها إنشاء مصفوفة لاحقة فييا(ن){\displaystyle {\mathcal {O}}(n)}.

تتمثل إحدى الطرق البسيطة لإنشاء مصفوفة اللواحق في استخدام خوارزمية فرز قائمة على المقارنة . تتطلب هذه الخوارزمياتيا(نسجلن){\displaystyle {\mathcal {O}}(n\log n)}مقارنات اللواحق، ولكن مقارنة اللواحق تعمل فييا(ن){\displaystyle {\mathcal {O}}(n)}الوقت، لذا فإن وقت التشغيل الإجمالي لهذا النهج هويا(ن2سجلن){\displaystyle {\mathcal {O}}(n^{2}\log n)}.

تستفيد الخوارزميات الأكثر تطوراً من حقيقة أن اللواحق المراد فرزها ليست سلاسل عشوائية، بل هي مترابطة. وتسعى هذه الخوارزميات إلى تحقيق الأهداف التالية: [ 5 ]

  • الحد الأدنى من التعقيد التقاربيΘ(ن){\displaystyle \Theta (n)}
  • خفيف الوزن من حيث المساحة، مما يعني الحاجة إلى ذاكرة عمل قليلة أو معدومة بجانب النص ومصفوفة اللاحقة نفسها.
  • سريع في الممارسة

تُعدّ خوارزمية SA-IS التي وضعها نونغ، تشانغ، وتشان (2009) من أوائل الخوارزميات التي حققت جميع الأهداف . تتميز هذه الخوارزمية ببساطتها ( أقل من 100 سطر برمجي ) وإمكانية تطويرها لإنشاء مصفوفة LCP في آنٍ واحد . [ 6 ] تُعتبر خوارزمية SA-IS من أسرع خوارزميات إنشاء مصفوفات اللواحق المعروفة. وقد تفوّق تطبيقها الدقيق من قِبل يوتا موري [ 7 ] على معظم طرق الإنشاء الخطية أو شبه الخطية الأخرى.

إلى جانب متطلبات الوقت والمساحة، تختلف خوارزميات إنشاء مصفوفات اللواحق أيضًا حسب الأبجدية المدعومة : أبجديات ثابتة حيث يكون حجم الأبجدية محدودًا بقيمة ثابتة، وأبجديات عددية صحيحة حيث تكون الأحرف أعدادًا صحيحة ضمن نطاق يعتمد علىن{\displaystyle n}والأبجديات العامة التي لا يُسمح فيها إلا بمقارنات الأحرف. [ 8 ]

تعتمد معظم خوارزميات إنشاء مصفوفات اللواحق على أحد الأساليب التالية: [ 5 ]

  • تعتمد خوارزميات مضاعفة البادئات على استراتيجية كارب وميلر وروزنبرغ (1972) . وتتلخص الفكرة في إيجاد بادئات تُراعي الترتيب المعجمي لللاحقات. يتضاعف طول البادئة المُقَيَّمة في كل تكرار للخوارزمية حتى تصبح البادئة فريدة وتُحدد رتبة اللاحقة المرتبطة بها.
  • تتبع الخوارزميات التكرارية نهج خوارزمية بناء شجرة اللواحق لفاراش (1997) لفرز مجموعة فرعية من اللواحق بشكل تكراري. ثم تُستخدم هذه المجموعة الفرعية لاستنتاج مصفوفة اللواحق المتبقية. بعد ذلك، تُدمج مصفوفتا اللواحق لحساب مصفوفة اللواحق النهائية.
  • تتشابه خوارزميات النسخ المُستحث مع الخوارزميات التكرارية من حيث استخدامها لمجموعة فرعية مُرتبة مسبقًا لترتيب اللواحق المتبقية بسرعة. ويكمن الاختلاف في أن هذه الخوارزميات تُفضل التكرار على الاستدعاء الذاتي لترتيب مجموعة اللواحق المُختارة. وقد قام بوغليسي، سميث، وتوربين (2007) بجمع دراسة استقصائية لهذه المجموعة المتنوعة من الخوارزميات .

تُعد خوارزمية DC3 / skew التي وضعها كاركاينن وساندرز (2003) خوارزمية تكرارية معروفة للأبجديات العددية . تعمل هذه الخوارزمية في وقت خطي، وقد استُخدمت بنجاح كأساس لخوارزميات بناء مصفوفات اللواحق المتوازية [ 9 ] والذاكرة الخارجية [ 10 ] .

يقترح بحث حديث أجراه سالسون وآخرون (2010) خوارزمية لتحديث مصفوفة اللواحق لنص تم تعديله، بدلاً من إعادة بناء مصفوفة لواحق جديدة من الصفر. حتى لو كان التعقيد الزمني النظري في أسوأ الحالات هويا(نسجلن){\displaystyle {\mathcal {O}}(n\log n)}، ويبدو أنه يعمل بشكل جيد من الناحية العملية: فقد أظهرت النتائج التجريبية التي توصل إليها المؤلفون أن تطبيقهم لمصفوفات اللواحق الديناميكية يكون بشكل عام أكثر كفاءة من إعادة البناء عند النظر في إدراج عدد معقول من الأحرف في النص الأصلي.

في التطبيقات العملية مفتوحة المصدر ، كانت خوارزمية qsufsort، المستندة إلى خوارزمية لارسون-ساداكان لعام 1999، من أكثر الخوارزميات استخدامًا لإنشاء مصفوفات اللواحق. [ 11 ] وقد حلت محلها خوارزمية DivSufSort التي طورها يوتا موري، والتي تُعتبر "أسرع خوارزمية معروفة لفرز اللواحق في الذاكرة الرئيسية" حتى عام 2017. ويمكن تعديلها أيضًا لحساب مصفوفة LCP. وتستخدم هذه الخوارزمية النسخ المستحث مع خوارزمية إيتوه-تاناكا. [ 12 ] وفي عام 2021، قدم إيليا غريبنوف [ 13 ] تطبيقًا أسرع للخوارزمية، والذي أظهر في المتوسط ​​تحسنًا في الأداء بنسبة 65% مقارنةً بتطبيق DivSufSort على مجموعة بيانات سيليزيا . [ 14 ]

مصفوفة اللواحق المعممة

يمكن توسيع مفهوم مصفوفة اللواحق ليشمل أكثر من سلسلة نصية واحدة. يُطلق على هذا اسم مصفوفة اللواحق المعممة (أو GSA)، وهي مصفوفة لواحق تحتوي على جميع اللواحق لمجموعة من السلاسل النصية (على سبيل المثال،S=S1،S2،S3،...،Sك{\displaystyle S=S_{1},S_{2},S_{3},...,S_{k}}ويتم ترتيبها معجمياً مع جميع لواحق كل سلسلة. [ 15 ]

التطبيقات

يمكن استخدام مصفوفة اللواحق لسلسلة نصية كمؤشر لتحديد موقع كل ظهور لنمط سلسلة فرعية بسرعةP{\displaystyle P}داخل السلسلةS{\displaystyle S}إن إيجاد كل تكرار للنمط يُعادل إيجاد كل لاحقة تبدأ بالسلسلة الفرعية. وبفضل الترتيب المعجمي، تُجمّع هذه اللواحق معًا في مصفوفة اللواحق، ويمكن إيجادها بكفاءة باستخدام بحثين ثنائيين . يحدد البحث الأول موضع بداية الفاصل، بينما يحدد البحث الثاني موضع نهايته.

n = طول ( S )دالة البحث ( P : سلسلة نصية ) -> مجموعة [ عدد صحيح ، عدد صحيح ]: """  تُرجع الفهارس (s، r) التي تُمثل الفترة A[s:r] (باستثناء  فهرس النهاية) جميع لواحق S التي تبدأ بالنمط P.  """ # إيجاد موضع بداية الفترة l = 0 # في بايثون، يتم فهرسة المصفوفات بدءًا من 0 r = n while l < r : mid = ( l + r ) // 2 # القسمة مع التقريب لأقرب عدد صحيح # suffixAt(A[i]) هي أصغر لاحقة رقم i إذا كان P > suffixAt ( A [ mid ]): l = mid + 1 else : r = mid s = l# إيجاد موضع نهاية الفترة r = n بينما l < r : mid = ( l + r ) // 2 إذا كان suffixAt ( A [ mid ]) . startswith ( P ): l = mid + 1 وإلا : r = mid أرجع ( s , r )

إيجاد نمط السلسلة الفرعيةP{\displaystyle P}من الطولم{\displaystyle m}في السلسلةS{\displaystyle S}من الطولن{\displaystyle n}يأخذيا(مسجلن){\displaystyle {\mathcal {O}}(m\log n)}الوقت، بالنظر إلى أن مقارنة لاحقة واحدة تحتاج إلى مقارنةم{\displaystyle m}يصف مانبر ومايرز (1990) كيف يمكن تحسين هذا الحد إلىيا(م+سجلن){\displaystyle {\mathcal {O}}(m+\log n)}يعتمد وقت البحث على معلومات LCP . الفكرة هي أن مقارنة الأنماط لا تحتاج إلى إعادة مقارنة أحرف معينة، عندما يكون معروفًا مسبقًا أنها جزء من أطول بادئة مشتركة للنمط وفترة البحث الحالية. وقد حسّن أبو الهدى وكورتز وأوليبوش (2004) هذا الحد بشكل أكبر، وحققوا وقت بحث قدرهيا(م){\displaystyle {\mathcal {O}}(m)}بالنسبة لحجم الأبجدية الثابت، كما هو معروف من أشجار اللواحق .

يمكن استخدام خوارزميات فرز اللواحق لحساب تحويل بوروز-ويلر (BWT) . يتطلب تحويل بوروز- ويلر فرز جميع التباديل الدورية لسلسلة نصية. إذا انتهت هذه السلسلة بحرف خاص أصغر معجميًا من جميع الأحرف الأخرى (مثل $)، فإن ترتيب مصفوفة تحويل بوروز-ويلر المُرتبة والمُدارة يُطابق ترتيب اللواحق في مصفوفة اللواحق. بالتالي، يمكن حساب تحويل بوروز-ويلر في وقت خطي عن طريق إنشاء مصفوفة لواحق للنص أولًا، ثم استنتاج سلسلة تحويل بوروز-ويلر .بدبليوتي[أنا]=S[أ[أنا]-1]{\displaystyle BWT[i]=S[A[i]-1]}.

يمكن أيضًا استخدام مصفوفات اللواحق للبحث عن السلاسل الفرعية في الترجمة الآلية القائمة على الأمثلة ، مما يتطلب مساحة تخزين أقل بكثير من جدول العبارات الكامل المستخدم في الترجمة الآلية الإحصائية .

تتطلب العديد من التطبيقات الإضافية لمصفوفة اللواحق مصفوفة LCP . بعض هذه التطبيقات مُفصّل في قسم التطبيقات من المصفوفة الأخيرة.

مصفوفات اللواحق المحسّنة

تُعدّ أشجار اللواحق هياكل بيانات قوية ذات تطبيقات واسعة في مجالات مطابقة الأنماط والسلاسل النصية، والفهرسة، والإحصاءات النصية. مع ذلك، فهي تشغل مساحة كبيرة، ما يُشكّل عائقًا في العديد من التطبيقات الآنية التي تتطلب معالجة كميات هائلة من البيانات، مثل تحليل الجينوم. وللتغلب على هذا العائق، طُوّرت مصفوفة اللواحق المُحسّنة. وهي هيكل بيانات يتألف من مصفوفة لواحق وجدول إضافي يُسمى جدول الأبناء، يحتوي على معلومات حول علاقة الأصل والفرع بين عُقد شجرة اللواحق. بنية بيانات تفرع العُقد لهذه الشجرة هي قائمة مُرتبطة . تتفوق مصفوفات اللواحق المُحسّنة على أشجار اللواحق من حيث كفاءة استخدام المساحة والتعقيد الزمني، كما أنها سهلة التنفيذ. علاوة على ذلك، يُمكن تطبيقها على أي خوارزمية تستخدم شجرة لواحق باستخدام مفهوم مجرد يُسمى أشجار فترات LCP. التعقيد الزمني للبحث عن نمط بطولم{\displaystyle m}في مصفوفة لاحقة محسّنةيا(م|Σ|){\displaystyle {\mathcal {O}}(m|\Sigma |)}.

تتكون مصفوفة اللواحق المحسّنة من مصفوفتين:

  1. المصفوفة pos[1,...n]: تمثل قائمة مرتبة لجميع اللواحق S. يتم تخزين المواضع الأولية فقط للواحق في المصفوفة لتقليل تعقيد المساحة نظرًا لكبر حجم اللواحق.
  2. مصفوفة lcp[1,...n]: هي مصفوفة من n عدد صحيح تحتفظ بأطوال أطول بادئة مشتركة للاحقتين متتاليتين مخزنتين في مصفوفة pos.

بناء فاصل lcp

بالنسبة لمصفوفة اللواحق S، يمكن تعريف فاصل lcp المرتبط بالعقدة المقابلة لشجرة اللواحق S على النحو التالي:

الفترة [i,..j]، حيث 0 ≤ i ≤ j ≤ n، هي فترة lcp ذات قيمة lcp، إذا

  1. lcptab[i] < l,
  2. lcptab[k] ≥ l لجميع i + 1 ≤ k ≤ j،
  3. lcptab[k] = l لبعض i + 1 ≤ k ≤ j إذا كان i ≠ j و l = n − i + 1 إذا كان i = j،
  4. lcptab[j + 1] < l.

يُخزَّن طول أطول بادئة مشتركة بين الموضعين pos[i − 1] و pos[i] في lcp[i]، حيث 2 ≤ i ≤ n. يُظهر فاصل lcp نفس علاقة الأصل والفرع الموجودة بين العقد المرتبطة في شجرة اللواحق S. وهذا يُبين أنه إذا كانت العقدة المقابلة لـ [i..j] فرعًا للعقدة المقابلة لـ [k..l]، فإن فاصل lcp [i..j] هو فاصل فرعي لفاصل lcp آخر [k..l]. وإذا كان [k..l] فاصلًا فرعيًا لـ [i..j]، فإن فاصل lcp [i..j] هو فاصل الأصل لفاصل lcp [k..l].

إنشاء جدول فرعي

يتكون الجدول الفرعي cldtab من ثلاثة مصفوفات n، هي up و down و nextlIndex . تُخزَّن معلومات حواف شجرة اللواحق المقابلة وتُدار بواسطة المصفوفتين up و down . أما المصفوفة nextlIndex فتُخزِّن الروابط في القائمة المرتبطة المستخدمة لتفرع العقد في شجرة اللواحق.

يتم تعريف مصفوفات up و down و nextlIndex على النحو التالي:

  1. يسجل العنصر up[i] فهرس البداية لفترة الطفل الأطول lcp-second، والتي تنتهي عند الفهرس i-1 .
  2. يتم تخزين الفهرس الأولي لفترة الطفل الثاني لأطول فترة lcp، بدءًا من الفهرس في العنصر down[i] .
  3. إذا وفقط إذا لم تكن الفترة هي الطفل الأول ولا الطفل الأخير لوالدها، فإن العنصر nextlIndex[i] يحتوي على الفهرس الأول لفترة الشقيق التالية لأطول فترة lcp، بدءًا من الفهرس i .

من خلال إجراء مسح تصاعدي لفاصل lcp للشجرة، يمكن إنشاء جدول الأبناء في وقت خطي. ويمكن حساب قيم الصعود/الهبوط وقيم nextlIndex بشكل منفصل باستخدام خوارزميتين مختلفتين.

يمكن حساب روابط اللواحق لمصفوفة لواحق محسّنة عن طريق توليد فاصل رابط اللواحق [ 1، ...، r ] لكل فاصل [i، ...، j] أثناء المعالجة المسبقة. يُحفظ العنصران الأيسر والأيمن l و r للفاصل في الفهرس الأول من [i، ...، j]. يتراوح جدول هذا الفاصل من 0 إلى n. يُنشأ جدول روابط اللواحق من خلال اجتياز شجرة فواصل lcp من اليسار إلى اليمين باستخدام خوارزمية البحث بالعرض أولاً. في كل مرة يُحسب فيها فاصل l ، يُضاف إلى قائمة فواصل l، والتي تُسمى قائمة l. عندما تكون قيمة lcp أكبر من 0، يُحسب الرابط [i] لكل فاصل l [i، ...، j] في القائمة. يُحسب الفاصل [ l ، ...، r ] عن طريق البحث الثنائي في قائمة ( l - 1)، حيث l هو أكبر حد أيسر بين جميع فواصل l - 1. يتم تمثيل فاصل الربط اللاحق لـ [i,..j] بهذا الفاصل [ l,..,r ]. يتم تخزين القيمتين l و r في النهاية في الفهرس الأول لـ [i,..,j].

ملحوظات

  1. 1 2 أبو الهدى، كورتز وأوليبوش 2004 .
  2. ^ أنا وكاركاينن وكيمبا 2014 .
  3. أبو الهدى، كورتز وأوليبوش 2002 .
  4. كورتز 1999 .
  5. 1 2 بوجليسي وسميث وتوربين 2007 .
  6. فيشر 2011 .
  7. موري، يوتا. "يقول" . مؤرشف من الأصل في 9 مارس 2023. تم الاسترجاع في 31 أغسطس 2023 .
  8. ^ بوركهارت وكاركينن 2003 .
  9. كولا وساندرز 2007 .
  10. ديمينتييف وآخرون 2008 .
  11. ^ لارسون، ن. جيسبر؛ ساداكان ، كونيهيكو (22 نوفمبر 2007). "فرز أسرع لللاحقات" . علوم الكمبيوتر النظرية . 387 (3): 258-272 . دوى : 10.1016/j.tcs.2007.07.017 . ISSN 0304-3975 . 
  12. فيشر، يوهانس؛ كوربيتش، فلوريان (5 أكتوبر 2017). "تفكيك DivSufSort". وقائع مؤتمر براغ لعلم السلاسل 2017. arXiv : 1710.01896 .
  13. ^ "مكتبة ساكا وبوت الجديدة (libsais)" . encode.su . تم الاسترجاع 2021-10-03 .
  14. غريبنوف، إيليا (22-09-2021)، libsais ، تم الاطلاع عليه بتاريخ 02-10-2021
  15. شي 1996 .

مراجع