|
Article on other languages:
|
У рачунарству, Левенштајново растојање је метрика за ниске, која је један од начина да се одреди растојање уређивања (енгл. edit distance) две ниске. Левенштајново растојање две ниске је одређено минималним бројем операција неопходним да се једна ниска трансформише у другу, а операције су уметање, брисање или замена једног карактера другим. Добило је име по Владимиру Левенштајну, који га је развио 1965.[1] Левенштајново растојање је корисно у одређивању сличности две ниске, на пример у софтверу за проналажење грешака у куцању. На пример, Левенштајново растојање речи "kitten" и "sitting" је 3, јер су потребне најмање три едит операције да се једна реч трансформише у другу:
Ово растојање се може посматрати као уопштење Хаминговог растојања, које се користи да ниске исте дужине, и које подразумева искључиво замене карактера. Постоје и даље генерализације Левенштајновог растојања, на пример Дамерау-Левенштајново растојање које дозвољава операцију промене места карактеру (које се код Левенштајновог растојања посматра као две операције - брисање и потом уметање).
АлгоритамОбично се за рачунање Левенштајновог растојања користи алгоритам динамичког програмирања, који подразумева употребу (n + 1) × (m + 1) матрице, где су n и m дужине ниски. Овај алгоритам се базира на Вангер-Фишеровом алгоритму за едит растојање. Следи псеудокод функције LevenstajnovoRastojanje која узима две ниске, s дужине m, и t дужине n, и рачуна Левенштајново растојање између њих:
int LevenstajnovoRastojanje(char s[1..m], char t[1..n])
// d је табела са m+1 врста и n+1 колона
declare int d[0..m, 0..n]
for i from 0 to m
d[i, 0]:= i
for j from 1 to n
d[0, j]:= j
for i from 1 to m
for j from 1 to n
if s[i] = t[j] then cost:= 0
else cost:= 1
d[i, j]:= minimum(
d[i-1, j] + 1, // брисање
d[i, j-1] + 1, // уметање
d[i-1, j-1] + cost // замена
)
return d[m, n]
Дата су два примера матрица које се добијају (оптимални кораци су подвучени):
Инваријанта која се одржава кроз цео алгоритам је да умемо да трансформишемо почетни део Овај алгоритам је кључни део решења проблема најдужег заједничког подниза, за посебан случај 2 улазне листе. Доказ коректностиКао што је претходно поменуто, инваријанта је да умемо да трансформишемо почетни сегмент
Овај доказ не доказује да је број који се налази у матрици, Могућа унапређења и варијацијеМеђу могућим унапређењима алгоритма су:
Горње и доње границеЛевенштајново растојање има неколико једноставних горњих и доњих граница које су корисне у применама које рачунају много њих, и пореде их. Међу њима су:
Види још
Напомене
Спољашње везе |
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net