شجرة نهايات النص

وصلة=//upload.wikimedia.org/wikipedia/commons/thumb/d/d2/Suffix tree BANANA.svg/250px-Suffix tree BANANA.svg.png|يسار|تصغير|265x265بك| شجرة نهايات للنص <code>BANANA</code> . يتم إنهاء كل سلسلة فرعية بحرف خاص <code>$</code> . المسارات الستة من الجذر إلى الأوراق (تظهر كمربعات) تتوافق مع اللاحقات الست <code>A$</code> و <code>NA$</code> و <code>ANA$</code> و <code>NANA$</code> و <code>ANANA$</code> و <code>BANANA$</code> . تعطي الأرقام الموجودة في الأوراق موضع البداية للاحقة المقابلة. تُستخدم روابط اللاحقة ، المرسومة المتقطعة ، في وقت البناء.
في علم الحاسوب **شجرة نهايات النص** أو **شجرة اللواحق لسلسلة نصيّة** هي شجرة رقمية مختصرة التي تحتوي على كل نهايات النص كل نص هو المفتاح ومكانهم في النص كقيم تهمّ **شجرة نهايات النص** تتيح تطبيق عمليات مهمة للنص بسرعة عالية.

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

شجرة نهايات النص تزود أول حل خطي لمشكلة أطول خط فرعي مشترك بين نصين.

تسريع هذه العمليات تحقق مقابل ثمن.

في العادة شجرة نهايات النص تشغل حيز أكبر من النص العادي.

## تاريخ
قُدّم هذا المفهوم لأول مرة من قبل العالم **[[بيتر وينر]]** (Weiner) عام 1973. وبدلاً من اللواحق (Suffixes)، قام **وينر** بتخزين السوابق (Prefixes) في شجرة رقمية كمعرف للموقع لكل بداية للنص؛ إلا أن عملية الإنشاء كانت تتم في زمن تربيعي بدلاً من زمن خطي.

في عام 1976، كان **[[إدوارد ماكريت]]** (McCreight) أول من أنشأ شجرة رقمية مختصرة لكل اللواحق. وبالرغم من أن اللاحقة التي تبدأ عند i تكون عادةً أطول من السابقة المعرفة لها، إلا أن مسارهما الممثل في الشجرة الرقمية المختصرة لا يختلف في الطول. من ناحية أخرى، استطاع **ماكريت** الاستغناء عن أغلبية هياكل البيانات الإضافية التي استخدمها **وينر**، حيث أبقى فقط على الروابط بين لواحق النص.

قام العالم **[[إسكو أوكونين]]** (Ukkonen) في عام 1995 بتبسيط عملية الإنشاء بشكل أكبر؛ حيث قدم أول خوارزمية لإنشاء شجرة اللواحق بنمط "الإنشاء المباشر" (On-line)، وهي المعروفة الآن باسم **[[خوارزمية أوكونين]]**. تميزت هذه الخوارزمية بزمن إنشاء يطابق أسرع الخوارزميات آنذاك، حيث تعمل بزمن خطي في حال كان عدد أحرف الأبجدية ثابتاً، وفي الحالة الأسوأ تعمل بزمن قدره O(n \log n).

في عام 1997، قدم العالم **[[مارتن فاراش]]** (Farach) أول خوارزمية لإنشاء شجرة اللواحق تناسب جميع أنواع الأبجديات؛ وتحديداً أول خوارزمية تعمل بزمن خطي للنصوص المكونة من أعداد صحيحة ضمن مجال متعدد الحدود (Polynomial range). أصبحت خوارزمية **فاراش** الأساس للخوارزميات الجديدة المستخدمة في إنشاء كل من شجرة اللواحق ومصفوفة اللواحق، كما في تطبيقات الذاكرة الخارجية والمختصرات وغيرها.

## تعريف
نرمز لشجرة نهايات النص بـ S وطولها بـ n التي معرفة كالتالي:

* للشجرة بالضبط n اوراق شجر مرقمة من 1 لـ n
* ما عدا الجذر كل عقدة داخلية لها على الاقل ولدان
* يتم تمييز كل حافة بسلسلة فرعية غير فارغة لـ S
* لا يمكن أن تحتوي حافتان تبدأان من عقدة على تسميات سلسلة تبدأ بالحرف نفسه.
* السلسلة التي تم الحصول عليها من خلال ربط جميع عناوين السلسلة الموجودة على المسار من الجذر إلى الورقة
بسبب انه لا يوجد شجرة نهايات النص لكل النصوص،S يبطن مع رمز لكل اطراف النهايات لا يظهر في النص هذا الامر يضمن ان لا تكون ايا نهاية تكن بداية ل أخرى لذلك يتواجد n عقد ل S .

نظرًا لأن جميع العقد الداخلية غير الجذر تتفرع، يمكن أن يكون هناك n - 1 على الأكثر من هذه العقد وn اوراق شجر / 1-n عقد داخلية / 1 جذر n+n+1-1=2n لذلك يوجد 2n عقد.

* ابحث عن أطول بادئة مشتركة بين اللواحق S_i[p..n_i] و S_j[q..n_j] في \Theta(1).
* ابحث عن نمط *P* بطول *m* مع عدم تطابق *k* بحد أقصى O(k n + z) الوقت، حيث *z* هو عدد الزيارات.
* جد كل z متناظرات قصوى في \Theta(n) ،  أو \Theta(g n) الوقت إذا كانت فجوات في الطول g مسموح، أو \Theta(k n) إذا k يسمح بعدم التطابق.
* جد كل z جنبا إلى جنب يكرر في O(n \log n + z) و *k* -mismatch tandem يتكرر في O(k n \log (n/k) + z).
* ابحث عن أطول سلاسل فرعية شائعة على الأقل k سلاسل في D إلى عن على k=2,\dots,K في \Theta(n) زمن.
* ابحث عن أطول سلسلة فرعية متناظرة لسلسلة معينة (باستخدام شجرة اللاحقة المعممة للسلسلة وعكسها) في الوقت الخطي.

## مراجع

تصنيف:أشجار (بنى معطيات)