خوارزمية أوكونين
في علم الحاسوب ، تُعدّ خوارزمية أوكونن خوارزمية خطية تعمل عبر الإنترنت لإنشاء أشجار اللواحق ، وقد اقترحها إيسكو أوكونن عام ١٩٩٥. [ ١ ] تبدأ الخوارزمية بشجرة لواحق ضمنية تحتوي على الحرف الأول من السلسلة النصية. ثم تتنقل عبر السلسلة، مضيفةً الأحرف تباعًا حتى تكتمل الشجرة. هذا الترتيب في إضافة الأحرف هو ما يمنح خوارزمية أوكونن خاصية "العمل عبر الإنترنت". أما الخوارزمية الأصلية التي قدمها بيتر واينر عام ١٩٧٣، فقد كانت تعمل بشكل عكسي من الحرف الأخير إلى الحرف الأول، بدءًا من أقصر لاحقة وصولًا إلى أطولها. [ ٢ ] وقد توصل إدوارد إم. مكريت عام ١٩٧٦ إلى خوارزمية أبسط، تبدأ من أطول لاحقة وصولًا إلى أقصرها. [ ٣ ]
شجرة اللواحق الضمنية
أثناء إنشاء شجرة اللواحق باستخدام خوارزمية أوكونين، سنرى شجرة لواحق ضمنية في الخطوات الوسيطة اعتمادًا على الأحرف في السلسلة S. في أشجار اللواحق الضمنية، لن يكون هناك حافة تحمل علامة $ (أو أي حرف إنهاء آخر) ولن تكون هناك عقدة داخلية بحافة واحدة فقط تخرج منها.
وصف عالي المستوى لخوارزمية Ukkonen
تُنشئ خوارزمية أوكونين شجرة لاحقة ضمنية T<sub> i</sub> لكل بادئة S[1...i] من السلسلة S (حيث S هي سلسلة طولها n). تبدأ الخوارزمية بإنشاء T <sub>1</sub> باستخدام الحرف الأول ، ثم T <sub>2</sub> باستخدام الحرف الثاني ، ثم T <sub>3</sub> باستخدام الحرف الثالث ، وهكذا حتى T <sub>n</sub> باستخدام الحرف النوني . يمكنك إيجاد الخصائص التالية في شجرة لاحقة تستخدم خوارزمية أوكونين:
- يتم بناء شجرة اللواحق الضمنية T i+1 فوق شجرة اللواحق الضمنية T i .
- في أي وقت معين، تقوم خوارزمية أوكونين ببناء شجرة اللواحق للأحرف التي تمت رؤيتها حتى الآن، وبالتالي فهي تتمتع بخاصية التشغيل عبر الإنترنت ، مما يسمح للخوارزمية بأن يكون وقت تنفيذها O(n).
- تنقسم خوارزمية أوكونين إلى n مرحلة (مرحلة واحدة لكل حرف في السلسلة بطول n).
- يتم تقسيم كل مرحلة i+1 إلى i+1 امتدادات، واحد لكل لاحقة من اللواحق i+1 لـ S[1...i+1].
تتمحور عملية إضافة اللاحقة حول إضافة الحرف التالي إلى شجرة اللواحق المبنية حتى الآن. في الإضافة j من المرحلة i+1، يحدد الخوارزمية نهاية S[j...i] (الموجودة بالفعل في الشجرة نتيجةً للمرحلة i السابقة)، ثم يضيف اللاحقة S[j...i] للتأكد من وجودها في الشجرة. توجد ثلاث قواعد للإضافة:
- إذا انتهى المسار من الجذر المسمى S[j...i] عند حافة الورقة (أي أن S[i] هو الحرف الأخير على حافة الورقة)، فسيتم إضافة الحرف S[i+1] إلى نهاية التسمية على حافة الورقة تلك.
- إذا انتهى المسار من الجذر المسمى S[j...i] عند حافة غير طرفية (أي، يوجد المزيد من الأحرف بعد S[i] على المسار) وكان الحرف التالي ليس S[i+1]، فسيتم إنشاء حافة طرفية جديدة تحمل التسمية S[i+1] والرقم j بدءًا من الحرف S[i+1]. كما سيتم إنشاء عقدة داخلية جديدة إذا انتهى المسار S[1...i] داخل (بين) حافة غير طرفية.
- إذا انتهى المسار من الجذر المسمى S[j..i] عند حافة غير طرفية (أي أن هناك المزيد من الأحرف بعد S[i] على المسار) وكان الحرف التالي هو S[i+1] (موجود بالفعل في الشجرة)، فلا تفعل شيئًا.
من النقاط المهمة التي يجب ملاحظتها أنه من أي عقدة (جذرية أو داخلية)، سيكون هناك ضلع واحد فقط يبدأ من حرف واحد. ولن يكون هناك أكثر من ضلع واحد يخرج من أي عقدة تبدأ من نفس الحرف.
مدة التشغيل
يتطلب التنفيذ البسيط لإنشاء شجرة اللواحق تعقيدًا زمنيًا قدره O(n²) أو حتى O(n³) في ترميز Big O ، حيث n هو طول السلسلة . وباستغلال عدد من التقنيات الخوارزمية ، تمكن أوكونين من تقليل هذا التعقيد إلى O ( n ) ( خطي) للأبجديات ذات الحجم الثابت، وإلى O ( n log n ) بشكل عام، مما يضاهي أداء وقت التشغيل للخوارزميتين السابقتين.
مثال على خوارزمية أوكونين

لتوضيح كيفية إنشاء شجرة اللواحق باستخدام خوارزمية أوكونين بشكل أفضل، يمكننا النظر في السلسلة S = xabxac.
- ابدأ بعقدة جذر فارغة.
- بناءوذلك
S[1]بإضافة الحرف الأول من السلسلة. تنطبق القاعدة الثانية، مما يُنشئ عقدة طرفية جديدة. - بناءبإضافة
S[1..2]اللاحقتينxa(xaوa). تُطبَّق القاعدة 1، التي تُوسِّع تسمية المسار في حافة الورقة الموجودة. تُطبَّق القاعدة 2، التي تُنشئ عقدة ورقة جديدة. - بناءبإضافة
S[1..3]اللواحقxab(xabوabوb). تُطبَّق القاعدة 1، التي تُوسِّع تسمية المسار في حافة الورقة الموجودة. تُطبَّق القاعدة 2، التي تُنشئ عقدة ورقة جديدة. - بناءبإضافة
S[1..4]اللواحقxabx(xabx،abxو،bxوx). تنطبق القاعدة 1، التي تمدد تسمية المسار في حافة الورقة الموجودة. تنطبق القاعدة 3، فلا تفعل شيئًا. - البنىبإضافة
S[1..5]اللواحقxabxa(xabxa،abxa،،bxaوxa)a. تنطبق القاعدة 1، التي تمدد تسمية المسار في حافة الورقة الموجودة. تنطبق القاعدة 3، لا تفعل شيئًا. - البنىبإضافة
S[1..6]اللواحقxabxac(xabxac،abxac،bxac،xac،acوc). تُطبَّق القاعدة 1، التي تُوسِّع تسمية المسار في حافة الورقة الموجودة. تُطبَّق القاعدة 2، التي تُنشئ عقدة ورقة جديدة (في هذه الحالة، يتم إنشاء ثلاث حواف ورقة جديدة وعقدتين داخليتين جديدتين).
مراجع
- ↑ أوكونين، إي. (1995). "بناء أشجار اللواحق عبر الإنترنت" (ملف PDF) . Algorithmica . 14 (3): 249–260 . CiteSeerX 10.1.1.10.751 . doi : 10.1007/BF01206331 . S2CID 6027556 .
- ↑ وينر، بيتر (1973). "خوارزميات مطابقة الأنماط الخطية" (ملف PDF) . المؤتمر السنوي الرابع عشر حول نظرية التبديل والأتمتة (SWAT 1973) . الصفحات 1-11 . CiteSeerX 10.1.1.474.9582 . doi : 10.1109/SWAT.1973.13 . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 3 مارس 2016. تم الاطلاع عليه بتاريخ 4 فبراير 2013 .
- ↑ مكريت، إدوارد مايرز (1976). "خوارزمية بناء شجرة لاحقة اقتصادية من حيث المساحة". مجلة ACM . 23 (2): 262-272 . CiteSeerX 10.1.1.130.8022 . doi : 10.1145/321941.321946 . S2CID 9250303 .
روابط خارجية
- شرح مفصل بلغة إنجليزية بسيطة
- البحث السريع عن السلاسل النصية باستخدام أشجار اللواحق: درس تعليمي من إعداد مارك نيلسون. يتضمن مثالاً تطبيقياً مكتوباً بلغة C++.
- التنفيذ بلغة C مع شرح مفصل
- شرائح المحاضرة من إعداد غاي بليلوش
- الصفحة الرئيسية لـ Ukkonen
- مشروع فهرسة النصوص (بناء أوكونين الخطي لأشجار اللواحق)
- التنفيذ بلغة C الجزء 1 الجزء 2 الجزء 3 الجزء 4 الجزء 5 الجزء 6
- خوارزميات المعلوماتية الحيوية
- خوارزميات على السلاسل النصية
- مؤشرات السلاسل الفرعية
- نماذج أولية للخوارزميات وهياكل البيانات
