[go: nahoru, domu]

الگوریتم هیرشبرگ: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
ZTayebie (بحث | مشارکت‌ها)
بدون خلاصۀ ویرایش
برچسب‌ها: افزودن پیوند بیرونی به جای ویکی‌پیوند ویرایشگر دیداری
ZTayebie (بحث | مشارکت‌ها)
بدون خلاصۀ ویرایش
خط ۲۳:
}} 
در [[علوم رایانه]], الگوریتم هیرشبرگ (به انگلیسی [[:en:Hirschberg's_algorithm|Hirschberg's Algorithm]]) [[الگوریتم|الگوریتمی]] [[برنامه‌ریزی پویا|پویا]] برای [[هم‌ترازسازی چند توالی|هم‌ترازسازی]] بهینه‌ی دو [[توالی]] است که دان هیرشبرگ (Dan Hirschberg) در سال‌ ۱۹۷۵ آن را ارائه کرد. <ref name=":0">{{یادکرد وب|نویسنده=|کد زبان=|تاریخ=|وب‌گاه=|نشانی=https://en.wikipedia.org/wiki/Hirschberg's_algorithm|عنوان=Hirschberg's Algorithm - Wikipedia}}</ref>
[[پرونده:A linear space algorithm for computing maximal common subsequences.png|جایگزین=A linear space algorithm for computing maximal common subsequences|بندانگشتی|مقاله‌ی دان هیرشبرگ که در سال ۱۹۷۵ منتشر شد.]]
در این الگوریتم برای ارزیابی هم‌ترازی‌ها از [[فاصله لون‌اشتاین]] استفاده می‌شود; در هم‌ترازی بهینه مجموع هزینه‌های درج, حذف و جایگزین‌کردن حروف برای یکسان‌کردن دو [[رشته (علوم رایانه)|رشته]], کمینه‌ی تمام هم‌ترازی‌های ممکن است.
خط ۳۲:
 
== ایده‌های اصلی ==
هوشمندی الگوریتم هیرشبرگ در استفاده از مشاهده‌های زیر است<ref>{{یادکرد کتاب|عنوان="A linear space algorithm for computing maximal common subsequences"|نام خانوادگی=Hirschberg|نام=.Dan S|ناشر=Communications of the ACM|سال=1975|شابک=|مکان=|صفحات=http://dl.acm.org/citation.cfm?doid=360825.360861}}</ref>:
# برای محاسبه‌ی امتیاز (یا فاصله‌ی) بهینه‌ی هم‌ترازی, کافی است سطر‌ قبلی و سطر جاری را ذخیره کرد (و نه کل سطور ماتریس امتیاز نیدلمن-وانچ).
# اگر <math>(align1Z, align2W) = OptAlign(Str1X, Str2Y)</math>هم‌ترازی سراسری بهینه‌ی [[رشته (علوم رایانه)|رشته‌]]<nowiki/>های Str1X و Str2Y باشد و <math>Str1X = Str1X^{leftl} + Str1X^{rightr}</math>تقسیم‌بندی دلخواهی از Str1X باشد, تقسیم بندی <math>Str2Y = Str2Y^{leftl} + Str2Y^{rightr}</math>از Str2Y وجود دارد که <math>(align1Z, align2W) = OptAlign(Str1X^{leftl}, Str2Y^{leftl}) + OptAlign(Str1X^{rightr}, Str2Y^{rightr})</math>.
 
== امتیازدهی ==
خط ۴۷:
 
=== تابع <math>NWscore(X, y)</math> ===
[[شبه‌کد]]<ref name=":0" />:<syntaxhighlight>
function NWscore(X,Y)
Score(0,0) = 0
خط ۹۸:
 
=== تابع Hirschberg ===
[[شبه‌کد]]<ref name=":0" />:<syntaxhighlight>
function Hirschberg(X,Y)
Z = ""
خط ۱۵۹:
پیچیدگی زمانی هم‌ترازی دو رشته با طول‌های m و n در الگوریتم هیرشبرگ <math>O(mn)</math> (مشابه الگوریتم نیدلمن-وانچ) است.
 
این الگوریتم تنها <math>O(min\{m, n\})</math>حافظه نیاز دارد که بهینه‌تر از الگوریتم نیدلمن-وانچ (با حافظه <math>O(mn)</math>) است. <ref>{{یادکرد وب|نویسنده=|کد زبان=|تاریخ=|وب‌گاه=|نشانی=http://www.cs.tau.ac.il/~rshamir/algmb/98/scribe/html/lec02/node10.html|عنوان=http://www.cs.tau.ac.il/~rshamir/algmb/98/scribe/html/lec02/node10.html}}</ref>
 
== مثال <ref name=":0" /> ==
فرض کنید دو [[توالی اسید نوکلئیک|توالی DNA]] بنام‌های X و Y و امتیاز‌های [[هم‌ترازسازی چند توالی|هم‌ترازسازی]] بصورت زیر باشند: