الگوریتم هیرشبرگ: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
بدون خلاصۀ ویرایش برچسبها: افزودن پیوند بیرونی به جای ویکیپیوند ویرایشگر دیداری |
بدون خلاصۀ ویرایش |
||
خط ۲۳:
}}
در [[علوم رایانه]], الگوریتم هیرشبرگ (به انگلیسی [[: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>(
== امتیازدهی ==
خط ۴۷:
=== تابع <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 و امتیازهای [[همترازسازی چند توالی|همترازسازی]] بصورت زیر باشند:
|