Strona główna Algorytmy i Struktury Danych Odległość edycyjna — tablica DP Levenshteina

📝 Odległość edycyjna — tablica DP Levenshteina

Wypełnij komórka po komórce tablicę programowania dynamicznego Levenshteina, a potem odtwórz najtańszą ścieżkę wstawień, usunięć i podstawień zamieniającą jeden napis w drugi.

Algorytmy i Struktury Danych2DŚredni60 FPS
edit-distance ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

O odległości edycyjnej (Levenshteina)

Odległość edycyjna, sformalizowana przez Władimira Lewensteina w 1965 roku, mierzy minimalną liczbę pojedynczych wstawień, usunięć i podstawień znaków wymaganych, by przekształcić jeden ciąg znaków w drugi. Jest obliczana w czasie O(mn) i pamięci O(mn) (lub O(min(m,n)) pamięci przy triku wiersz-po-wierszu) za pomocą programowania dynamicznego: wypełniania tabeli (m+1)×(n+1), gdzie każda komórka d[i][j] przechowuje odległość edycyjną między pierwszymi i znakami źródła a pierwszymi j znakami celu. Algorytm jest fundamentalny w sprawdzaniu pisowni, dopasowywaniu sekwencji DNA (gdzie podstawienia modelują mutacje) oraz w rozmytym dopasowywaniu ciągów w wyszukiwarkach.

Symulacja wypełnia tabelę PD komórka po komórce z regulowaną prędkością, kolorując każdą operację. Po ukończeniu wsteczne śledzenie podświetla optymalną ścieżkę dopasowania przez macierz, pokazując dokładnie, które wstawienia, usunięcia i podstawienia zostały wybrane.

Najczęściej zadawane pytania

Jaka jest relacja rekurencyjna używana do wypełnienia macierzy Levenshteina?

Każda komórka jest wypełniana jako: d[i][j] = d[i−1][j−1], jeśli s[i] = t[j] (znaki się zgadzają, brak kosztu); w przeciwnym razie d[i][j] = 1 + min(d[i−1][j], d[i][j−1], d[i−1][j−1]) odpowiednio dla usunięcia, wstawienia i podstawienia. Pierwszy wiersz i kolumna są inicjalizowane jako 0…m i 0…n, ponieważ przekształcenie pustego ciągu wymaga i wstawień lub j usunięć.

Jaka jest różnica między odległością edycyjną a odległością Hamminga?

Odległość Hamminga liczy tylko podstawienia między dwoma ciągami o równej długości. Odległość edycyjna jest ściśle bardziej ogólna: dopuszcza wstawienia i usunięcia, czyniąc ją stosowalną do ciągów o różnych długościach. Dla ciągów o równej długości bez indeli odległości Hamminga i Levenshteina są zgodne. Odległość Hamminga oblicza się w O(n), podczas gdy Levenshteina w O(mn), co odzwierciedla jej większą ekspresywność.

Jak odległość edycyjna wiąże się z najdłuższym wspólnym podciągiem (LCS)?

Jeśli dozwolone są tylko wstawienia i usunięcia (bez podstawień), to odległość edycyjna = m + n − 2·LCS(s, t): dwa dodatkowe znaki dla każdej dopasowanej pary w LCS znoszą jedno usunięcie i jedno wstawienie. Levenshtein dodaje podstawienia (koszt 1) jako skrót zastępujący usunięcie + wstawienie (koszt 2), gdy jest to korzystne. Tabele PD mają tę samą strukturę, różniącą się jedynie członem kosztu podstawienia.

Jak wsteczne śledzenie odzyskuje optymalne dopasowanie z tabeli PD?

Zaczynając od d[m][n], algorytm przechodzi do dowolnej komórki poprzedzającej (po przekątnej dla dopasowania/podstawienia, w lewo dla wstawienia, w górę dla usunięcia) o najmniejszej wartości. Remisy mogą być rozstrzygane arbitralnie; każdy wybór daje inne, ale równie optymalne dopasowanie. Sekwencja ruchów odczytana wstecz daje skrypt edycji (ciąg CIGAR w notacji bioinformatycznej).

Czym jest odległość Damerau-Levenshteina?

Odległość Damerau-Levenshteina dodaje transpozycję dwóch sąsiadujących znaków jako czwartą operację elementarną o koszcie 1. Jest to bardziej odpowiednie do modelowania błędów popełnianych przez ludzi podczas pisania, gdzie transpozycje odpowiadają za do 80% literówek. Jej obliczenie wymaga bardziej złożonego PD z O(|Σ|) dodatkowymi tablicami śledzącymi ostatnią pozycję wystąpienia każdego znaku, dając czas O(mn), ale z większą stałą.

Czy odległość edycyjną można obliczyć szybciej niż O(mn)?

Dla ogólnych ciągów najlepszy znany algorytm działa w O(mn/log n), wykorzystując równoległość na poziomie słowa (algorytm Maska-Patersona i warianty wektorów bitowych). Dla ciągów, które są „niemal równe” (odległość k ≪ n), istnieje algorytm Ukkonena O(kn), który wypełnia jedynie diagonalny pas o szerokości 2k+1 w macierzy. W praktyce warianty bit-równoległe są używane w narzędziach takich jak agrep i uniksowe narzędzie diff.

Jak odległość edycyjna jest wykorzystywana w bioinformatyce?

W dopasowywaniu sekwencji nukleotydy A, C, G, T stanowią alfabet, a macierz podstawień (np. BLOSUM62 dla białek) zastępuje jednolitą karę kosztu 1. Algorytm Smitha-Watermana to lokalny wariant odległości edycyjnej, który znajduje najwyżej ocenione dopasowane podsekwencje, ujawniając zachowane domeny funkcjonalne. Dopasowanie globalne używa algorytmu Needlemana-Wunscha, matematycznie identycznego z Levenshteinem przy afinicznych karach za przerwy.

Jaka jest odległość edycyjna między „kitten” a „sitting”?

Odległość edycyjna wynosi 3: podstaw 'k'→'s' (kitten→sitten), podstaw 'e'→'i' (sitten→sittin) i wstaw 'g' na końcu (sittin→sitting). Jest to klasyczny przykład podręcznikowy używany do ilustracji algorytmu, z tabelą PD 7×8 często pokazywaną na kursach algorytmów.

Jak sprawdzacze pisowni wykorzystują odległość edycyjną?

Sprawdzacz pisowni oblicza odległość edycyjną między błędnie napisanym słowem a każdym słowem w słowniku (lub przyciętej liście kandydatów z drzewa BK), a następnie sugeruje słowa w odległości 1 lub 2 jako poprawki. Drzewa BK wykorzystują nierówność trójkąta odległości edycyjnej, by przycinać wyszukiwanie w słowniku, redukując średnią liczbę porównań z O(|słownik|) do O(|słownik|0,2) w praktyce.

Czy odległość edycyjna spełnia nierówność trójkąta?

Tak — odległość edycyjna jest prawdziwą metryką: jest nieujemna, symetryczna, zerowa wtedy i tylko wtedy, gdy ciągi są identyczne, i spełnia d(s, u) ≤ d(s, t) + d(t, u). Ta własność metryczna umożliwia drzewom BK i VP indeksowanie ciągów dla szybkiego przybliżonego wyszukiwania najbliższego sąsiada, co leży u podstaw wyszukiwania podobieństwa w korekcji pisowni i bazach danych DNA.

Podobne symulacje