Расстояние Левенштейна

Расстояние Левенштейна (редакционное расстояние, дистанция редактирования) — метрика, измеряющая по модулю разность между двумя последовательностями символов. Она определяется как минимальное количество односимвольных операций (а именно вставки, удаления, замены), необходимых для превращения одной последовательности символов в другую. В общем случае, операциям, используемым в этом преобразовании, можно назначить разные цены. Широко используется в теории информации и компьютерной лингвистике.

Впервые задачу поставил в 1965 году советский математик Владимир Левенштейн при изучении последовательностей [1], впоследствии более общую задачу для произвольного алфавита связали с его именем. Большой вклад в изучение вопроса внёс Дэн Гасфилд[2].

Применение

Расстояние Левенштейна и его обобщения активно применяется:

  • для исправления ошибок в слове (в поисковых системах, базах данных, при вводе текста, при автоматическом распознавании отсканированного текста или речи).
  • для сравнения текстовых файлов утилитой diff и ей подобными. Здесь роль «символов» играют строки, а роль «строк» — файлы.
  • в биоинформатике для сравнения генов, хромосом и белков.

С точки зрения приложений определение расстояния между словами или текстовыми полями по Левенштейну обладает следующими недостатками:

  1. При перестановке местами слов или частей слов получаются сравнительно большие расстояния;
  2. Расстояния между совершенно разными короткими словами оказываются небольшими, в то время как расстояния между очень похожими длинными словами оказываются значительными.

Редакционное предписание

Редакционным предписанием называется последовательность действий, необходимых для получения из первой строки второй кратчайшим образом. Обычно действия обозначаются так: D (англ. delete) — удалить, I (англ. insert) — вставить, R (replace) — заменить, M (match) — совпадение.

Например, для 2 строк «CONNECT» и «CONEHEAD» можно построить следующую таблицу преобразований:

M M M R I M R R
C O N N E C T
C O N E H E A D

Найти только расстояние Левенштейна — более простая задача, чем найти ещё и редакционное предписание (подробнее см. ниже).

Обобщения

Разные цены операций

Цены операций могут зависеть от вида операции (вставка, удаление, замена) и/или от участвующих в ней символов, отражая разную вероятность мутаций в биологии[3], разную вероятность разных ошибок при вводе текста и т. д. В общем случае:

  • w(a, b) — цена замены символа a на символ b
  • w(ε, b) — цена вставки символа b
  • w(a, ε) — цена удаления символа a

Необходимо найти последовательность замен, минимизирующую суммарную цену. Расстояние Левенштейна является частным случаем этой задачи при

  • w(a, а) = 0
  • w(a, b) = 1 при a≠b
  • w(ε, b) = 1
  • w(a, ε) = 1

Как частный случай, так и задачу для произвольных w, решает алгоритм Вагнера — Фишера, приведённый ниже. Здесь и ниже мы считаем, что все w неотрицательны, и действует неравенство треугольника: замена двух последовательных операций одной не увеличит общую цену (например, замена символа x на y, а потом y на z не лучше, чем сразу x на z).

Транспозиция

Если к списку разрешённых операций добавить транспозицию (два соседних символа меняются местами), получается расстояние Дамерау — Левенштейна. Для неё также существует алгоритм, требующий O(MN) операций. Дамерау показал, что 80 % ошибок при наборе текста человеком являются транспозициями. Кроме того, расстояние Дамерау — Левенштейна используется и в биоинформатике.

Формула

Здесь и далее считается, что элементы строк нумеруются с первого, как принято в математике, а не с нулевого, как принято во многих языках программирования.

Пусть и  — две строки (длиной и соответственно) над некоторым алфавитом, тогда редакционное расстояние (расстояние Левенштейна) можно подсчитать по следующей рекуррентной формуле

, где

,

где равна нулю, если и единице в противном случае; возвращает наименьший из аргументов.

Здесь шаг по символизирует удаление (D) из первой строки, по  — вставку (I) в первую строку, а шаг по обоим индексам символизирует замену символа (R) или отсутствие изменений (M).

Очевидно, справедливы следующие утверждения:

Пример работы алгоритма.
P O L Y N O M I A L
0 1 2 3 4 5 6 7 8 9 10
E 1 1 2 3 4 5 6 7 8 9 10
X 2 2 2 3 4 5 6 7 8 9 10
P 3 2 3 3 4 5 6 7 8 9 10
O 4 3 2 3 4 5 5 6 7 8 9
N 5 4 3 3 4 4 5 6 7 8 9
E 6 5 4 4 4 5 5 6 7 8 9
N 7 6 5 5 5 4 5 6 7 8 9
T 8 7 6 6 6 5 5 6 7 8 9
I 9 8 7 7 7 6 6 6 6 7 8
A 10 9 8 8 8 7 7 7 7 6 7
L 11 10 9 8 9 8 8 8 8 7 6

Доказательство

Рассмотрим формулу более подробно. Очевидно, что редакционное расстояние между двумя пустыми строками равно нулю. Так же очевидно то, что чтобы получить пустую строку из строки длиной , нужно совершить операций удаления, а чтобы получить строку длиной из пустой, нужно произвести операций вставки.

Осталось рассмотреть нетривиальный случай, когда обе строки непусты.

Для начала заметим, что в оптимальной последовательности операций их можно произвольно менять местами. В самом деле, рассмотрим две последовательные операции:

  • Две замены одного и того же символа — неоптимально (если мы заменили x на y, потом — y на z, выгоднее было сразу заменить x на z).
  • Две замены разных символов можно менять местами
  • Два стирания или две вставки можно менять местами
  • Вставка символа с его последующим стиранием — неоптимально (можно их обе отменить)
  • Стирание и вставку разных символов можно менять местами
  • Вставка символа с его последующей заменой — неоптимально (излишняя замена)
  • Вставка символа и замена другого символа меняются местами
  • Замена символа с его последующим стиранием — неоптимально (излишняя замена)
  • Стирание символа и замена другого символа меняются местами

Пусть кончается на символ «a», кончается на символ «b». Есть три варианта:

  1. Символ «а», на который кончается , в какой-то момент был стёрт. Сделаем это стирание первой операцией. Тогда мы стёрли символ «a», после чего превратили первые символов в (на что потребовалось операций), значит, всего потребовалось операций
  2. Символ «b», на который кончается , в какой-то момент был добавлен. Сделаем это добавление последней операцией. Мы превратили в первые символов , после чего добавили «b». Аналогично предыдущему случаю, потребовалось операций.
  3. Оба предыдущих утверждения неверны. Если мы добавляли символы справа от финального «a», то, чтобы сделать последним символом «b», мы должны были или в какой-то момент добавить его (но тогда утверждение 2 было бы верно), либо заменить на него один из этих добавленных символов (что тоже невозможно, потому что добавление символа с его последующей заменой неоптимально). Значит, символов справа от финального «a» мы не добавляли. Самого финального «a» мы не стирали, поскольку утверждение 1 неверно. Значит, единственный способ изменения последнего символа — его замена. Заменять его 2 или больше раз неоптимально. Значит,
    1. Если , мы последний символ не меняли. Поскольку мы его также не стирали и не приписывали ничего справа от него, он не влиял на наши действия, и, значит, мы выполнили операций.
    2. Если , мы последний символ меняли один раз. Сделаем эту замену первой. В дальнейшем, аналогично предыдущему случаю, мы должны выполнить операций, значит, всего потребуется операций.

Алгоритм Вагнера — Фишера

Для нахождения кратчайшего расстояния необходимо вычислить матрицу D, используя вышеприведённую формулу. Её можно вычислять как по строкам, так и по столбцам. Псевдокод алгоритма:

 для всех i от 0 до M
   для всех j от 0 до N
     вычислить D(i, j)
 вернуть D(M, N)

Или в более развёрнутом виде, и при произвольных ценах замен, вставок и удалений:

 D(0, 0) = 0
 для всех j от 1 до N
   D(0, j) = D(0, j - 1) + цена вставки символа S2[j]
 для всех i от 1 до M
   D(i, 0) = D(i - 1, 0) + цена удаления символа S1[i]
 для всех j от 1 до N
   D(i, j) = min{
     D(i - 1, j) + цена удаления символа S1[i],
     D(i, j - 1) + цена вставки символа S2[j],
     D(i - 1, j - 1) + цена замены символа S1[i] на символ S2[j]
   }
 вернуть D(M, N)

(Напоминаем, что элементы строк нумеруются с первого, а не с нулевого.)

Для восстановления редакционного предписания требуется вычислить матрицу D, после чего идти из правого нижнего угла (M,N) в левый верхний, на каждом шаге ища минимальное из трёх значений:

  • если минимально (+ цена удаления символа S1[i]), добавляем удаление символа S1[i] и идём в (i-1, j)
  • если минимально (+ цена вставки символа S2[j]), добавляем вставку символа S2[j] и идём в (i, j-1)
  • если минимально (+ цена замены символа S1[i] на символ S2[j]), добавляем замену S1[i] на S2[j] (если они не равны; иначе ничего не добавляем), после чего идём в (i-1, j-1)

Здесь (i, j) — клетка матрицы, в которой мы находимся на данном шаге. Если минимальны два из трёх значений (или равны все три), это означает, что есть 2 или 3 равноценных редакционных предписания.

Этот алгоритм называется алгоритмом Вагнера — Фишера. Он предложен Р. Вагнером (R. A. Wagner) и М. Фишером (M. J. Fischer) в 1974 году.[4]

Память

Алгоритм в виде, описанном выше, требует операций и такую же память. Последнее может быть неприятным: так, для сравнения файлов длиной в 105 строк потребуется около 40 гигабайт памяти.

Если требуется только расстояние, легко уменьшить требуемую память до . Для этого надо учесть, что после вычисления любой строки предыдущая строка больше не нужна. Более того, после вычисления D(i, j) не нужны также D(i-1,0) … D(i-1,j-1). Поэтому алгоритм можно переписать как

 для всех i от 0 до M
   для всех j от 0 до N
     вычислить D(i, j)
   если i > 0
     стереть строку D(i - 1)
 вернуть D(M, N)

или даже

 для всех i от 0 до M
   для всех j от 0 до N
     вычислить D(i, j)
     если i > 0 и j > 0
       стереть D(i - 1, j - 1)
 вернуть D(M, N)

Если требуется редакционное предписание, экономия памяти усложняется.

Для того, чтобы обеспечить время при памяти , определим матрицу E минимальных расстояний между суффиксами строк, то есть E(i, j) — расстояние между последними i символами и последними j символами . Очевидно, матрицу E можно вычислить аналогично матрице D, и так же быстро.

Теперь опишем алгоритм, считая, что  — кратчайшая из двух строк.

  • Если длина одной из строк (или обеих) не больше 1, задача тривиальна. Если нет, выполним следующие шаги.
  • Разделим строку на две подстроки длиной . (Если M нечётно, то длины подстрок будут и .) Обозначим подстроки и .
  • Для вычислим последнюю строку матрицы D, а для  — последнюю строку матрицы E.
  • Найдём i такое, что минимально. Здесь D и Е — матрицы из предыдущего шага, но мы используем только их последние строки. Таким образом, мы нашли разбиение на две подстроки, минимизирующее сумму расстояния левой половины до левой части и расстояния правой половины до правой части . Следовательно, левая подстрока соответствует левой половине , а правая — правой.
  • Рекурсивно ищем редакционное предписание, превращающее в левую часть (то есть в подстроку )
  • Рекурсивно ищем редакционное предписание, превращающее в правую часть (то есть в подстроку ).
  • Объединяем оба редакционных предписания.[5]

Время выполнения удовлетворяет (с точностью до умножения на константу) условию

,

откуда следует (доказывается индукцией по M)

следовательно

Требуемая память пропорциональна

Кроме того, есть алгоритмы, экономящие память за счёт существенного замедления, например, время становится кубическим, а не квадратичным, по длине строк.

Примечания

  1. В. И. Левенштейн. Двоичные коды с исправлением выпадений, вставок и замещений символов. Доклады Академий Наук СССР, 1965. 163.4:845-848.
  2. Гасфилд. Строки, деревья и последовательности в алгоритмах. Информатика и вычислительная биология. Невский Диалект БВХ-Петербург, 2003.
  3. См., например: http://www.medlit.ru/medrus/mg/mg080237.htm Архивная копия от 8 марта 2012 на Wayback Machine
  4. R. A. Wagner, M. J. Fischer. The string-to-string correction problem. J. ACM 21 1 (1974). P. 168—173
  5. При этом во втором редакционном предписании нужно увеличить номера символов первой строки на , а второй строки на , поскольку теперь они отсчитываются с начала строк, a не с их середины.

Read other articles:

31°29′52.52″N 34°26′13.01″E / 31.4979222°N 34.4369472°E / 31.4979222; 34.4369472 كلية العودة الجامعية شعار كلية العودة الجامعية مقر كلية العودة الجامعية بغزة الشعار ماضون للمعالي الأسماء السابقة أكاديمية فلسطين للعلوم الأمنية معلومات التأسيس 2008 الموقع الجغرافي الشارع ش.مصطفى حافظ، الرم...

 

 

الجمعية المصرية لكتاب ونقاد السينما البلد مصر  تاريخ التأسيس أكتوبر 1973  الاهتمامات السينما اللغات الرسمية عربية تعديل مصدري - تعديل   الجمعية المصرية لكتاب ونقاد السينما هي جمعية تختص بتنظيم ورعاية الفن السينمائي في مصر. تأسست في أكتوبر 1973 برئاسة الناقد كمال الملا...

 

 

Catholic newspaper in the United States Not to be confused with National Catholic Reporter or The Catholic Register. This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: National Catholic Register...

محمد أحمد منصور معلومات شخصية الميلاد سنة 1930   ذي سفال  الوفاة 13 مايو 2021 (90–91 سنة)  الجعاشن  مواطنة اليمن  الحياة العملية المهنة كاتب،  وشاعر غنائي،  وكاتب أغاني  اللغة الأم العربية  اللغات العربية  بوابة الأدب تعديل مصدري - تعديل   محمد أحمد منص...

 

 

Election for Lieutenant Governor of Nevada 2022 Nevada lieutenant gubernatorial election ← 2018 November 8, 2022 2026 →   Nominee Stavros Anthony Lisa Cano Burkhead Party Republican Democratic Popular vote 500,994 463,871 Percentage 49.41% 45.75% County results Congressional district resultsAnthony:      40–50%      50–60%      60–70%      70–80%  &#...

 

 

Gaius Caesar Gaius Caesar (20 SM – 21 February 4 M) adalah putra sulung dari putri tunggal Kaisar Augustus, yakni Julia The Elder. Gaius dilahirkan dari pernikahan kedua Ibunya dengan Marcus Vipsanius Agrippa dan memiliki dua adik, yaitu Lucius Caesar dan Agrippa Postumus. Pada mulanya, Gaius dan Lucius Caesar dibesarkan seperti putranya sendiri oleh Kaisar Augustus sejak 17 SM. Adapun kedua kakak beradik ini dibesarkan untuk menjadi bagian dari pewaris kekaisaran.[1] Hal ini diketa...

この項目には、一部のコンピュータや閲覧ソフトで表示できない文字が含まれています(詳細)。 数字の大字(だいじ)は、漢数字の一種。通常用いる単純な字形の漢数字(小字)の代わりに同じ音の別の漢字を用いるものである。 概要 壱万円日本銀行券(「壱」が大字) 弐千円日本銀行券(「弐」が大字) 漢数字には「一」「二」「三」と続く小字と、「壱」「�...

 

 

 Сент-Люсияангл. Saint Lucia Одна из первых почтовых марок Сент-Люсии,без номинала (зелёный цвет соответствовал6 пенсам), 1860 (SG #3)[^][^][^][^] История почты Почта существует начиная с 1858 Член ВПС с 1881 (колония),с 10 июля 1980 (независимое государство) Этапы истории почтовые систем�...

 

 

rumah tipe back-to-back Back-to-back adalah bentuk rumah bertingkat di Inggris, dibangun dari akhir abad ke-18 hingga awal abad ke-20. Ribuan tempat tinggal ini dibangun selama revolusi Industri untuk populasi kota dengan pabrik yang berkembang pesat. Back-to-backs berbagi dinding tiga dari empat sisi bangunan, dengan dinding depan memiliki satu-satunya pintu dan jendela.[1][2][3][4][5][6][7] Back-to-back pertama kali dibangun secara tid...

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (septembre 2014). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ». En pratique : Quelles sources sont attendues ?...

 

 

Військово-музичне управління Збройних сил України Тип військове формуванняЗасновано 1992Країна  Україна Емблема управління Військово-музичне управління Збройних сил України — структурний підрозділ Генерального штабу Збройних сил України призначений для планува...

 

 

Каталонская овчарка Длинношёрстная каталонская овчарка Происхождение Место  Испания Время XVIII век Рост кобели47—55 см суки45—53 см Масса кобели18 кг суки16 кг Классификация МКФ Группа 1. Пастушьи и скотогонные собаки, кроме швейцарских скотогонных собак Секция 1. Овчарки �...

الإسلام في أفغانستان جزء من سلسلة مقالات حولالإسلام حسب البلد الإسلام في إفريقيا أنغولا بنين بوتسوانا بوركينا فاسو بوروندي الكاميرون الرأس الأخضر أفريقيا الوسطى نشاد الجزائر جزر القمر الكونغو الديمقراطية الكونغو ساحل العاج جيبوتي مصر غينيا الاستوائية إريتريا إثيوبيا �...

 

 

Set of six French tapestries depicting unicorns created around 1500 This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: The Lady and the Unicorn – news · newspapers · books · scholar · JSTOR (April 2019) (Learn how and when to remove this message) The Lady and the Unicorn: À mon seul désir (Musée national du ...

 

 

الاحتلال البريطاني لمانيلا الأرض والسكان إحداثيات 14°34′01″N 120°58′59″E / 14.567°N 120.983°E / 14.567; 120.983   الحكم التأسيس والسيادة التاريخ تاريخ التأسيس 1762  وسيط property غير متوفر. تعديل مصدري - تعديل   جزء من سلسلة حول تاريخ الفلبين عصور ما قبل التاريخ (قبل 900)عصر حجري ح�...

Furniture company in the United States For the defunct department store chain also named Value City, see Value City. American Signature, Inc.Company typeSubsidiaryIndustryRetail, ManufacturingFounded1948; 76 years ago (1948)FounderJerome SchottensteinHeadquartersColumbus, Ohio, United StatesNumber of locations120Key peopleJay SchottensteinProductsFurnitureOwnerJay SchottensteinParentSchottenstein StoresWebsiteamericansignaturefurniture.comvaluecityfurniture.com Value City Fu...

 

 

Admiral-class battlecruiser This article is about the Admiral-class battlecruiser. For other ships of the same name, see List of ships called HMS Hood. Hood, 17 March 1924 History United Kingdom NameHood NamesakeAdmiral Samuel Hood Ordered7 April 1916 BuilderJohn Brown & Company Cost£6,025,000 Yard number460 Laid down1 September 1916 Launched22 August 1918 Commissioned15 May 1920 In service1920–1941 IdentificationPennant number: 51 MottoVentis Secundis (Latin: With Favourable Winds) ...

 

 

Aymavillescomune(IT) Comune di Aymavilles(FR) Commune d'Aymavilles Aymavilles – VedutaPanorama del capoluogo LocalizzazioneStato Italia Regione Valle d'Aosta ProvinciaNon presente AmministrazioneSindacoLoredana Petey (Autonomie Communale) dal 10-5-2015 Lingue ufficialiFrancese, italiano TerritorioCoordinate45°42′04.32″N 7°14′25.08″E45°42′04.32″N, 7°14′25.08″E (Aymavilles) Altitudine640 m s.l.m. Superficie53,24 km² Abitanti2 091[...

Atelier du Marquis de CrocogouleHistoireFondation 2006Prédécesseur Atelier SanzotCadreType Collectif d'artistesSiège AngoulêmePays  FranceOrganisationSite web atelierdumarquis.frmodifier - modifier le code - modifier Wikidata L'atelier du Marquis de Crocogoule, abrégré en atelier du Marquis, est un collectif d'auteurs de bande dessinée fondé en 2006 à Angoulême. Il succède à l'atelier Sanzot. Histoire L'atelier Sanzot était un collectif d'auteurs de bande dessinée fondé en...

 

 

xD-Picture Une carte xD de 16 MB Fujifilm Type de média Carte mémoire Capacité Maximum 512 MB (original)maximum 2 GB (Type M/M+, Type H) Développé par Olympus, Fujifilm Dimensions physiques 20 × 25 × 1,78 mm Poids 2,8 g Utilisé pour Appareils photo numériques, dictaphones modifier  Le format xD (ou xD Picture Card) est une carte mémoire utilisée pour les appareils photos, mais aussi pour les téléphones et ordinateur, principalement soutenue par Olym...