خوارزمية فاغنر-فيشر
في علوم الحاسوب ، تعتبر خوارزمية Wagner-Fischer خوارزمية برمجة ديناميكية تحسب مسافة التحرير بين سلسلتين من الأحرف.
تاريخ
لخوارزمية فاغنر-فيشر تاريخ من الاختراعات المتعددة . يسرد نافارو المخترعين التاليين لها، مع تاريخ النشر، ويقر بأن القائمة غير مكتملة: [ 1 ] : 43
- فينتسيوك ، 1968
- نيدلمان وونش ، 1970
- سانكوف ، 1972
- سيلرز، 1974
- فاغنر وفيشر ، 1974
- لورانس وواغنر، 1975
حساب المسافة
تقوم خوارزمية Wagner-Fischer بحساب مسافة التحرير بناءً على الملاحظة أنه إذا خصصنا مصفوفة لحفظ مسافات التحرير بين جميع بادئات السلسلة الأولى وجميع بادئات السلسلة الثانية، فيمكننا حساب القيم في المصفوفة عن طريق ملء المصفوفة، وبالتالي إيجاد المسافة بين السلسلتين الكاملتين كآخر قيمة تم حسابها.
يُمكن تطبيق دالة Distance ، التي تأخذ سلسلتين نصيتين، s بطول m و t بطول n ، وتعيد مسافة ليفنشتاين بينهما، بشكل مباشر باستخدام الشفرة الزائفة التالية. تكون السلاسل النصية المدخلة مُفهرسة من 1، بينما تكون المصفوفة d مُفهرسة من 0، [i..k]وهي نطاق مغلق.
دالة المسافة ( char s [ 1..m ] , char t [ 1..n ] ) : // لكل i و j ، سيحتوي d [ i , j ] على المسافة بين // أول i حرف من s وأول j حرف من t // لاحظ أن d له قيم ( m + 1 ) * ( n + 1 ) ...d [ i , j ] := minimum ( d [ i - 1 , j ] + 1 , // حذف d [ i , j - 1 ] + 1 , // إضافة d [ i - 1 , j - 1 ] + substitutionCost ) // استبدال return d [ m , n ]مثالان على المصفوفة الناتجة (يؤدي تحريك المؤشر فوق رقم مسطر إلى إظهار العملية التي تم إجراؤها للحصول على هذا الرقم):
|
|
الثابت الذي يُحافظ عليه طوال الخوارزمية هو أنه يمكننا تحويل الجزء الأولي s[1..i]باستخدام t[1..j]أقل عدد ممكن من d[i,j]العمليات. في النهاية، يحتوي العنصر السفلي الأيمن من المصفوفة على الإجابة.
إثبات صحة النتائج
كما ذكرنا سابقاً، فإن الثابت هو أنه يمكننا تحويل الجزء الأولي s[1..i]إلى t[1..j]باستخدام أقل عدد ممكن من d[i,j]العمليات. ويتحقق هذا الثابت للأسباب التالية:
- يكون هذا صحيحًا مبدئيًا في الصف والعمود 0 لأنه
s[1..i]يمكن تحويله إلى سلسلة فارغةt[1..0]ببساطة عن طريق حذف جميعiالأحرف. وبالمثل، يمكننا تحويلهs[1..0]إلى سلسلة فارغةt[1..j]ببساطة عن طريق إضافة جميعjالأحرف. - إذا كان
s[i] = t[j]بإمكاننا تحويل ، ويمكننا تحويلs[1..i-1]إلىt[1..j-1]فيkالعمليات ، فيمكننا فعل الشيء نفسه إلىs[1..i]وترك الحرف الأخير كما هو، مما يعطيkالعمليات. - وإلا، فإن المسافة هي الحد الأدنى من بين الطرق الثلاث الممكنة لإجراء التحويل:
- إذا استطعنا التحويل
s[1..i]إلىt[1..j-1]فيkالعمليات، فيمكننا ببساطة الإضافةt[j]بعد ذلك للحصول علىt[1..j]فيk+1العمليات (الإدراج). - إذا استطعنا التحويل
s[1..i-1]إلىt[1..j]عملياتk، فيمكننا إزالةs[i]ثم القيام بنفس التحويل، ليصبح المجموع الكليk+1للعمليات (الحذف). - إذا استطعنا التحويل
s[1..i-1]إلىt[1..j-1]فيkعمليات، فيمكننا أن نفعل الشيء نفسه إلىs[1..i]، ونستبدل الأصلs[i]بـt[j]بعد ذلك، ليصبح المجموع الكلي منk+1العمليات (الاستبدال).
- إذا استطعنا التحويل
- العمليات المطلوبة للتحويل
s[1..n]إلىt[1..m]هي بالطبع العدد المطلوب لتحويل كلsإلى كلt، وبالتاليd[n,m]فإن نتيجتنا صحيحة.
يفشل هذا البرهان في إثبات أن العدد الموضوع d[i,j]هو في الواقع أصغر عدد ممكن؛ وهذا أكثر صعوبة في إثباته، ويتضمن حجة بالتناقض حيث نفترض d[i,j]أن أصغر من الحد الأدنى للثلاثة، ونستخدم هذا لإظهار أن أحد الثلاثة ليس أصغر عدد ممكن.
التعديلات المحتملة
تشمل التعديلات المحتملة على هذه الخوارزمية ما يلي:
- يمكننا تكييف الخوارزمية لاستخدام مساحة أقل، O ( m ) بدلاً من O ( mn )، لأنها تتطلب فقط تخزين العمود السابق والعمود الحالي في أي وقت.
- يمكننا تخزين عدد عمليات الإدخال والحذف والاستبدال بشكل منفصل، أو حتى المواضع التي تحدث فيها، وهو أمر ثابت دائمًا
j. - يمكننا تطبيع المسافة إلى الفترة
[0,1]. - إذا كنا مهتمين فقط بالمسافة إذا كانت أصغر من عتبة k ، فإنه يكفي حساب شريط قطري بعرض في المصفوفة. وبهذه الطريقة، يمكن تشغيل الخوارزمية في زمن قدره O ( kl ) ، حيث l هو طول أقصر سلسلة. [ 2 ]
- يمكننا فرض غرامات مختلفة على عمليات الإضافة والحذف والاستبدال. كما يمكننا فرض غرامات تعتمد على الأحرف التي يتم إضافتها أو حذفها أو استبدالها.
- لا يُطبَّق هذا الخوارزمية بالتوازي بشكل جيد، نظرًا لكثرة التبعيات بين البيانات . مع ذلك، يمكن حساب جميع
costالقيم بالتوازي، ويمكن تعديل الخوارزمية لتنفيذminimumالوظيفة على مراحل للتخلص من هذه التبعيات. - من خلال فحص الأقطار بدلاً من الصفوف، وباستخدام التقييم الكسول ، يمكننا إيجاد مسافة ليفنشتاين في زمن قدره O ( m (1 + d )) (حيث d هي مسافة ليفنشتاين)، وهو أسرع بكثير من خوارزمية البرمجة الديناميكية العادية إذا كانت المسافة صغيرة. [ 3 ]
صيغة البائع للبحث عن السلاسل النصية
بتهيئة الصف الأول من المصفوفة بالأصفار، نحصل على صيغة معدلة من خوارزمية فاغنر-فيشر، والتي يمكن استخدامها للبحث التقريبي عن سلسلة نصية ضمن نص. [ 1 ] يُحدد هذا التعديل موضع نهاية السلاسل الفرعية المطابقة في النص. ولتحديد موضع بداية هذه السلاسل، يمكن تخزين عدد عمليات الإضافة والحذف بشكل منفصل، واستخدامه لحساب موضع البداية انطلاقًا من موضع النهاية. [ 4 ]
إن الخوارزمية الناتجة ليست فعالة بأي حال من الأحوال، ولكنها كانت في وقت نشرها (1980) واحدة من أوائل الخوارزميات التي أجرت بحثًا تقريبيًا. [ 1 ]
مراجع
- ↑ غوسفيلد، دان (1997). خوارزميات على السلاسل والأشجار والمتتاليات: علوم الحاسوب وعلم الأحياء الحاسوبي . كامبريدج، المملكة المتحدة: مطبعة جامعة كامبريدج. ISBN 978-0-521-58519-4.
- ↑ أليسون ل (سبتمبر 1992). "البرمجة الديناميكية الكسولة يمكن أن تكون متلهفة" . رسائل معالجة المعلومات . 43 (4): 207-12 . doi : 10.1016/0020-0190(92)90202-7 .
- ↑ برونو وولتزنلوغل باليو. معجم تقريبي لـ GATE قائم على مسافة ليفنشتاين. مؤرشف في 8 مايو 2013 على موقع Wayback Machine . قسم الطلاب في المدرسة الصيفية الأوروبية في المنطق واللغة والمعلومات ( ESSLLI )، 2007.
- خوارزميات على السلاسل النصية
- مقاييس السلسلة
