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

تُظهر الصورة سلسلتين نصيتين حيث توجد حلول متعددة للمشكلة. على الرغم من أن تكرارات السلاسل الفرعية تتداخل دائمًا، إلا أنه من المستحيل الحصول على سلسلة فرعية مشتركة أطول عن طريق "دمجها".
تحتوي السلاسل "ABABC" و "BABCA" و "ABCBA" على سلسلة فرعية مشتركة واحدة فقط، وهي "ABC" بطول 3. أما السلاسل الفرعية المشتركة الأخرى فهي "A" و "AB" و "B" و "BA" و "BC" و "C".
أب أ ب ج ||| بابكا ||| ABCBA
تعريف المشكلة
بفرض وجود سلسلتين نصيتين،من الطولومن الطولابحث عن أطول سلسلة فرعية من كليهماو.
تُعدّ مشكلة السلسلة الفرعية المشتركة k تعميمًا لهذه المشكلة . بالنظر إلى مجموعة السلاسل، أينوأوجد لكلأطول سلسلة تظهر كسلسلة فرعية من سلسلة واحدة على الأقلأوتار.
الخوارزميات
يمكن للمرء أن يجد أطوال ومواقع بداية أطول السلاسل الفرعية المشتركة لـوفييمكن تحسين الوقت باستخدام شجرة لاحقة معممة . ويمكن تحقيق خوارزمية أسرع في نموذج حساب ذاكرة الوصول العشوائي للكلمات إذا كان الحجمجزء من الأبجدية المدخلة موجود فيوعلى وجه الخصوص، تعمل هذه الخوارزمية فيالوقت المستخدمالمساحة. [ 1 ] حل المشكلة باستخدام البرمجة الديناميكية يكلف. حلول المسألة المعممة تأخذالفضاء والوقت مع البرمجة الديناميكية واستغلالهالوقت مع شجرة لاحقة معممة .
شجرة اللواحق

يمكن إيجاد أطول السلاسل الفرعية المشتركة لمجموعة من السلاسل النصية عن طريق بناء شجرة لواحق معممة لهذه السلاسل، ثم إيجاد أعمق العقد الداخلية التي تحتوي على عقد أوراق من جميع السلاسل في الشجرة الفرعية أسفلها. يوضح الشكل على اليمين شجرة اللواحق للسلاسل "ABAB" و"BABA" و"ABBA"، بعد إضافة فواصل فريدة بين السلاسل، لتصبح "ABAB$0" و"BABA$1" و"ABBA$2". تحتوي العقد التي تمثل "A" و"B" و"AB" و"BA" على أوراق فرعية من جميع السلاسل، المرقمة 0 و1 و2 على التوالي.
يستغرق بناء شجرة اللواحقالوقت (إذا كان حجم الأبجدية ثابتًا). إذا تم اجتياز الشجرة من الأسفل إلى الأعلى باستخدام متجه بتات يحدد السلاسل المرئية أسفل كل عقدة، فيمكن حل مشكلة السلسلة الفرعية المشتركة k فيالوقت. إذا تم إعداد شجرة اللواحق لاسترجاع السلف المشترك الأدنى في وقت ثابت ، فيمكن حلها فيالوقت. [ 2 ]
البرمجة الديناميكية
تُستخدم الشفرة الزائفة التالية لإيجاد مجموعة أطول السلاسل الفرعية المشتركة بين سلسلتين باستخدام البرمجة الديناميكية :
دالة LongestCommonSubstring(S[1..r], T[1..n]) L := array (1..r, 1..n) z := 0 # طول أطول سلسلة فرعية مشتركة تم العثور عليها حتى الآن ret := {} لـ i := 1..r لـ j := 1..n إذا كان S[i] = T[j] إذا كان i = 1 أو j = 1 L[i, j] := 1 آخر L[i, j] := L[i − 1, j − 1] + 1 إذا كان L[i, j] > z z := L[i, j] ret := {S[(i − z + 1)..i]} وإلا إذا كان L[i, j] = z ret := ret ∪ {S[(i − z + 1)..i]} آخر L[i, j] := 0 إرجاع retيتم تشغيل هذه الخوارزمية فيالوقت. يخزن المصفوفة Lطول أطول لاحقة مشتركة للبادئات S[1..i]التي T[1..j]تنتهي عند الموضعينi و jعلى التوالي. يُستخدم المتغير zلتخزين طول أطول سلسلة فرعية مشتركة تم العثور عليها حتى الآن. retتُستخدم المجموعة لتخزين مجموعة السلاسل التي طولها z. يمكن حفظ المجموعة retبكفاءة عن طريق تخزين الفهرس i، وهو الحرف الأخير من أطول سلسلة فرعية مشتركة (بحجم z) بدلاً من S[(i-z+1)..i]. وبالتالي، ستكون جميع أطول السلاسل الفرعية المشتركة، لكل i في ret، S[(ret[i]-z)..(ret[i])].
يمكن استخدام الحيل التالية لتقليل استخدام الذاكرة في التطبيق:
- احتفظ فقط بالصف الأخير والصف الحالي من جدول DP لتوفير الذاكرة (بدلاً من)
- يمكن تخزين الصف الأخير والصف الحالي في نفس المصفوفة أحادية البعد عن طريق اجتياز الحلقة الداخلية للخلف.
- خزّن القيم غير الصفرية فقط في الصفوف. يمكن تحقيق ذلك باستخدام جداول التجزئة بدلاً من المصفوفات. وهذا مفيد للأحرف الكبيرة.
انظر أيضاً
- أطول سلسلة فرعية متناظرة
- n -gram ، جميع السلاسل الفرعية الممكنة ذات الطول n الموجودة في سلسلة نصية
مراجع
- ^ شارالامبوبولوس، باناجيوتيس. كوسيوماكا، توماسز؛ بيسيس، سولون ب. رادوزيفسكي ، جاكوب (أغسطس 2021). موتزل، البتراء؛ باغ، راسموس. هيرمان، جريزيجورز (محرران). خوارزميات أسرع لأطول سلسلة فرعية مشتركة . الندوة الأوروبية حول الخوارزميات. إجراءات لايبنيز الدولية في مجال المعلوماتية (LIPIcs). المجلد. 204. شلوس داجشتول. دوى : 10.4230/LIPIcs.ESA.2021.30 .هنا: النظرية 1، ص 30:2.
- ↑ غوسفيلد، دان (1999) [1997]. خوارزميات على السلاسل والأشجار والمتتاليات: علوم الحاسوب وعلم الأحياء الحاسوبي . الولايات المتحدة الأمريكية: مطبعة جامعة كامبريدج. ISBN 0-521-58519-8.
روابط خارجية
- قاموس الخوارزميات وهياكل البيانات: أطول سلسلة فرعية مشتركة
- تنفيذ خوارزمية البرمجة الديناميكية باستخدام لغة بيرل/إكس إس
- تنفيذ خوارزمية شجرة اللواحق بلغة بيرل/إكس إس
- تطبيقات البرمجة الديناميكية بلغات مختلفة على موقع ويكي بوكس
- تطبيق AS3 عملي لخوارزمية البرمجة الديناميكية
- تطبيق بلغة C يعتمد على شجرة اللواحق لحساب أطول سلسلة فرعية مشتركة بين سلسلتين نصيتين
- مشاكل في التعامل مع السلاسل النصية
- البرمجة الديناميكية
