مشكلة مسافة التحرير
تشير مسافة التحرير (Edit distance)، وتُعرف أيضاً بمسافة ليفنشتاين (Levenshtein distance)، إلى أقل عدد من التحريرات اللازمة لتحويل سلسلة نصية إلى أخرى، وتُستخدم عادةً في استرجاع المعلومات ومعالجة اللغة الطبيعية لقياس التشابه بين متتابعتين.
بمعطى سلسلتين نصيتين و، أعد أقل عدد من التحريرات اللازمة لتحويل إلى .
ويمكنك إجراء ثلاثة أنواع من عمليات التحرير على السلسلة النصية: إدراج محرف، أو حذف محرف، أو استبدال محرف بأي محرف آخر.
كما يوضح الشكل أدناه، يتطلب تحويل kitten إلى sitting ثلاث تحريرات، تشمل استبدالين وإدراجاً واحداً؛ بينما يتطلب تحويل hello إلى algo ثلاث خطوات، تشمل استبدالين وحذفاً واحداً.

يمكن تفسير مشكلة مسافة التحرير تفسيراً طبيعياً باستخدام نموذج شجرة القرار. فالسلاسل النصية تقابل عقد الشجرة، وكل عملية تحرير تقابل ضلعاً في الشجرة.
وكما يوضح الشكل أدناه، فمن دون تقييد العمليات، يمكن أن تتفرع كل عقدة إلى أضلاع كثيرة، ويقابل كل ضلع عملية واحدة، مما يعني وجود مسارات كثيرة محتملة لتحويل hello إلى algo.
ومن منظور شجرة القرار، يهدف هذا السؤال إلى إيجاد أقصر مسار بين العقدة hello والعقدة algo.

منهج البرمجة الديناميكية
الخطوة 1: فكّر في القرارات في كل جولة، وحدد الحالة، وبذلك تحصل على جدول
تتضمن كل جولة قرار إجراء عملية تحرير واحدة على السلسلة النصية .
نريد أن يتقلص حجم المسألة تدريجياً أثناء عملية التحرير حتى نتمكن من بناء مسائل فرعية. ولتكن أطوال السلسلتين و هما و على الترتيب. ننظر أولاً في المحرفين الأخيرين في السلسلتين، و.
- إذا كان و متماثلين، فيمكننا تجاوزهما والنظر مباشرةً في و.
- وإذا كان و مختلفين، فنحتاج إلى إجراء تحرير واحد على (إدراج أو حذف أو استبدال) لجعل المحرفين الأخيرين في السلسلتين متماثلين، مما يتيح تجاوزهما والنظر في مسألة أصغر حجماً.
بعبارة أخرى، كل جولة قرار (عملية تحرير) نجريها على السلسلة النصية ستغيّر المحارف المتبقية الواجب مطابقتها في و. لذلك تكون الحالة هي المحرفين رقم ورقم اللذين ننظر فيهما حالياً في و، ويُرمز إليها بـ.
تقابل الحالة المسألة الفرعية: أقل عدد من التحريرات اللازمة لتحويل أول محرفاً من إلى أول محرفاً من .
ومن ذلك نحصل على جدول ثنائي الأبعاد حجمه .
الخطوة 2: حدد البنية الفرعية المثلى، ثم استنتج معادلة انتقال الحالة
لننظر في المسألة الفرعية ، حيث المحرفان الأخيران في السلسلتين المقابلتين هما و، ويمكن تقسيمها إلى الحالات الثلاث الموضحة في الشكل أدناه بحسب اختلاف عمليات التحرير.
- إدراج بعد ، فتكون المسألة الفرعية المتبقية .
- حذف ، فتكون المسألة الفرعية المتبقية .
- استبدال بـ، فتكون المسألة الفرعية المتبقية .

واستناداً إلى التحليل أعلاه، نحصل على البنية الفرعية المثلى: أقل عدد من التحريرات لـ يساوي الحد الأدنى بين و و مضافاً إليه تكلفة التحرير الحالية . ومعادلة انتقال الحالة المقابلة هي:
يُرجى ملاحظة أنه عندما يكون و متماثلين، لا حاجة إلى أي تحرير للمحرف الحالي، وعندئذٍ تكون معادلة انتقال الحالة:
الخطوة 3: حدد الشروط الحدية وترتيب انتقال الحالة
عندما تكون كلتا السلسلتين فارغتين، يكون عدد خطوات التحرير ، أي . وعندما تكون فارغة و غير فارغة، يساوي أقل عدد من خطوات التحرير طول ، أي الصف الأول . وعندما تكون غير فارغة و فارغة، يساوي أقل عدد من خطوات التحرير طول ، أي العمود الأول .
وبمراقبة معادلة انتقال الحالة، يعتمد الحل على الحلول الموجودة على اليسار وفوق وعلى أعلى اليسار، لذا يمكن اجتياز جدول كاملاً بالترتيب عبر حلقتين متداخلتين.
تنفيذ الشيفرة
كما يوضح الشكل أدناه، تشبه عملية انتقال الحالة في مشكلة مسافة التحرير نظيرتها في مشكلة الحقيبة إلى حد كبير؛ إذ يمكن النظر إلى كلتيهما على أنها عملية ملء شبكة ثنائية الأبعاد.
تحسين المساحة
بما أن تعتمد على الحالة أعلاه ، وعلى الحالة على اليسار ، وعلى الحالة في أعلى اليسار ، فإن الاجتياز الأمامي سيفقد حالة أعلى اليسار ، بينما لا يستطيع الاجتياز العكسي بناء مسبقاً، لذا لا يصلح أي من ترتيبي الاجتياز.
ولهذا السبب، يمكننا استخدام متغيّر leftup لتخزين الحل في أعلى اليسار مؤقتاً، بحيث لا يبقى علينا سوى النظر في الحلين على اليسار وفوق. وهذه الحالة مماثلة لما في مشكلة الحقيبة غير المحدودة، لذا يمكننا استخدام الاجتياز الأمامي. والشيفرة كما يلي: