levenstein distance.beam

35
Задача «Российская Инновация» или Levenstein distance Стас Фомин, [email protected] Заказные ИнформСистемы 2 мая 2010 г. 1 / 35

Upload: stas-fomin

Post on 16-Jun-2015

976 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Levenstein distance.beam

Задача «Российская Инновация» илиLevenstein distance

Стас Фомин, [email protected]

Заказные ИнформСистемы

2 мая 2010 г.

1 / 35

Page 2: Levenstein distance.beam

Россия Вперед!TM — Великий ПланTM

ОпределениеТехнологическая Карта Завода —конвеер-последовательность из стандартныхстанков и прочих машин.Cтанок кодируются однобуквенным кодом издиапазона{0-9, A-z, a-z}.Например «04ABFGSDDD8F67GODMNDOT895J4C7DHT84H».Технологическая карта может быть очень длинной (до 1000 знаков).Соответственно, АналитикиTM Великого ПланаTM исследуютвозможности по оптимальной перестройке всех заводов, выполняямногофакторную оптимизацию.

2 / 35

Page 3: Levenstein distance.beam

Задача

OLD — старая технологическая картаNEW — новая технологическая карта

Разрешенные операции:D I — демонтаж станка с номером I

R I S — замена станка с номером I на станок S.A I S — вставка станка S в позицию I.

Т.е. замена «C» на «G» для «ABDCFFF23», выполняетсякомандой «R 4 G», приводит к «ABDGFFF23».

Т.е. вставка «E» перед «С» для «ABDCFFF23», выполняетсякомандой «A 4 E», приводит к «ABDECFFF23».

Найти план перестройки с минимальной стоимостью.

3 / 35

Page 4: Levenstein distance.beam

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

Оно же редакторское расстояниеДинамическое программированиеза O(m · n) времениМожно уложиться в O(n) памяти (даже при нахожденииплана преобразования).

Алгоритм и Оптимальность: любой оптимальный план можнопереписать, чтобы операции шли над концом строки.

1Владимира Иосифовича

4 / 35

Page 5: Levenstein distance.beam

5 / 35

Page 6: Levenstein distance.beam

for i in x range (m+1):D[ i , 0 ] = COST[ "D" ]∗ iP [ i , 0 ] = "D"

for j in x range ( n+1):D[ 0 , j ] = COST[ "A" ]∗ jP [ 0 , j ] = "A"

for j in x range (1 , n+1):for i in x range (1 , m+1):

i f o ldscheme [ i −1] == newscheme [ j −1] :D[ i , j ] , P [ i , j ] = D[ i −1, j −1] , ’M’

e l se :D[ i , j ] , P [ i , j ] = min (

(D[ i −1, j ] + COST[ ’D ’ ] , ’D ’ ) ,(D[ i , j −1] + COST[ ’A ’ ] , ’A ’ ) ,(D[ i −1, j −1] + COST[ ’R ’ ] , ’R ’ ) )

6 / 35

Page 7: Levenstein distance.beam

«» → «» стоит 0

M MI MIR

AACACMACMIACMIPACMIPT

7 / 35

Page 8: Levenstein distance.beam

«A» → «» стоит 2

M MI MIR

A 2D

ACACMACMIACMIPACMIPT

A ⇒ −→D 1

8 / 35

Page 9: Levenstein distance.beam

«AC» → «» стоит 4

M MI MIR

A 2D

AC 4D

ACMACMIACMIPACMIPT

AC ⇒ −→D 1

C ⇒ −→D 1

9 / 35

Page 10: Levenstein distance.beam

«ACM» → «» стоит 6

M MI MIR

A 2D

AC 4D

ACM 6D

ACMIACMIPACMIPT

ACM ⇒ −→D 1

CM ⇒ −→D 1

M ⇒ −→D 1

10 / 35

Page 11: Levenstein distance.beam

«ACMI» → «» стоит 8

M MI MIR

A 2D

AC 4D

ACM 6D

ACMI 8D

ACMIPACMIPT

ACMI ⇒ −→D 1

CMI ⇒ −→D 1

MI ⇒ −→D 1

I ⇒ −→D 1

11 / 35

Page 12: Levenstein distance.beam

«ACMIP» → «» стоит 10

M MI MIR

A 2D

AC 4D

ACM 6D

ACMI 8D

ACMIP 10D

ACMIPT

ACMIP ⇒ −→D 1

CMIP ⇒ −→D 1

MIP ⇒ −→D 1

IP ⇒ −→D 1

P ⇒ −→D 1

12 / 35

Page 13: Levenstein distance.beam

«ACMIPT» → «» стоит 12

M MI MIR

A 2D

AC 4D

ACM 6D

ACMI 8D

ACMIP 10D

ACMIPT 12D

ACMIPT ⇒ −→D 1

CMIPT ⇒ −→D 1

MIPT ⇒ −→D 1

IPT ⇒ −→D 1

PT ⇒ −→D 1

T ⇒ −→D 1

13 / 35

Page 14: Levenstein distance.beam

«» → «» стоит 0

M MI MIR

A 2D

AC 4D

ACM 6D

ACMI 8D

ACMIP 10D

ACMIPT 12D

14 / 35

Page 15: Levenstein distance.beam

«» → «M» стоит 3

M MI MIR3A

A 2D

AC 4D

ACM 6D

ACMI 8D

ACMIP 10D

ACMIPT 12D

⇒ −→A 0 M

M

15 / 35

Page 16: Levenstein distance.beam

«» → «MI» стоит 6

M MI MIR3A 6A

A 2D

AC 4D

ACM 6D

ACMI 8D

ACMIP 10D

ACMIPT 12D

⇒ −→A 0 M

M ⇒ −→A 1 I

MI

16 / 35

Page 17: Levenstein distance.beam

«» → «MIR» стоит 9

M MI MIR3A 6A 9A

A 2D

AC 4D

ACM 6D

ACMI 8D

ACMIP 10D

ACMIPT 12D

⇒ −→A 0 M

M ⇒ −→A 1 I

MI ⇒ −→A 2 R

MIR

17 / 35

Page 18: Levenstein distance.beam

«A» → «M» стоит 4

M MI MIR3A 6A 9A

A 2D 4R

AC 4D

ACM 6D

ACMI 8D

ACMIP 10D

ACMIPT 12D

A ⇒ −→R 1 M

M

18 / 35

Page 19: Levenstein distance.beam

«AC» → «M» стоит 6

M MI MIR3A 6A 9A

A 2D 4R

AC 4D 6D

ACM 6D

ACMI 8D

ACMIP 10D

ACMIPT 12D

AC ⇒ −→R 1 M

MC ⇒ −→D 2

M

19 / 35

Page 20: Levenstein distance.beam

«ACM» → «M» стоит 4

M MI MIR3A 6A 9A

A 2D 4R

AC 4D 6D

ACM 6D 4M

ACMI 8D

ACMIP 10D

ACMIPT 12D

ACM ⇒ −→D 1

CM ⇒ −→D 1

M

20 / 35

Page 21: Levenstein distance.beam

«ACMI» → «M» стоит 6

M MI MIR3A 6A 9A

A 2D 4R

AC 4D 6D

ACM 6D 4M

ACMI 8D 6D

ACMIP 10D

ACMIPT 12D

ACMI ⇒ −→D 1

CMI ⇒ −→D 1

MI ⇒ −→D 2

M

21 / 35

Page 22: Levenstein distance.beam

«ACMIP» → «M» стоит 8

M MI MIR3A 6A 9A

A 2D 4R

AC 4D 6D

ACM 6D 4M

ACMI 8D 6D

ACMIP 10D 8D

ACMIPT 12D

ACMIP ⇒ −→D 1

CMIP ⇒ −→D 1

MIP ⇒ −→D 2

MP ⇒ −→D 2

M

22 / 35

Page 23: Levenstein distance.beam

«ACMIPT» → «M» стоит 10

M MI MIR3A 6A 9A

A 2D 4R

AC 4D 6D

ACM 6D 4M

ACMI 8D 6D

ACMIP 10D 8D

ACMIPT 12D 10D

ACMIPT ⇒ −→D 1

CMIPT ⇒ −→D 1

MIPT ⇒ −→D 2

MPT ⇒ −→D 2

MT ⇒ −→D 2

M

23 / 35

Page 24: Levenstein distance.beam

«A» → «MI» стоит 7

M MI MIR3A 6A 9A

A 2D 4R 7A

AC 4D 6D

ACM 6D 4M

ACMI 8D 6D

ACMIP 10D 8D

ACMIPT 12D 10D

A ⇒ −→R 1 M

M ⇒ −→A 1 I

MI

24 / 35

Page 25: Levenstein distance.beam

«AC» → «MI» стоит 8

M MI MIR3A 6A 9A

A 2D 4R 7A

AC 4D 6D 8R

ACM 6D 4M

ACMI 8D 6D

ACMIP 10D 8D

ACMIPT 12D 10D

AC ⇒ −→R 1 M

MC ⇒ −→R 2 I

MI

25 / 35

Page 26: Levenstein distance.beam

«ACM» → «MI» стоит 7

M MI MIR3A 6A 9A

A 2D 4R 7A

AC 4D 6D 8R

ACM 6D 4M 7A

ACMI 8D 6D

ACMIP 10D 8D

ACMIPT 12D 10D

ACM ⇒ −→D 1

CM ⇒ −→D 1

M ⇒ −→A 1 I

MI

26 / 35

Page 27: Levenstein distance.beam

«ACMI» → «MI» стоит 4

M MI MIR3A 6A 9A

A 2D 4R 7A

AC 4D 6D 8R

ACM 6D 4M 7A

ACMI 8D 6D 4M

ACMIP 10D 8D

ACMIPT 12D 10D

ACMI ⇒ −→D 1

CMI ⇒ −→D 1

MI

27 / 35

Page 28: Levenstein distance.beam

«ACMIP» → «MI» стоит 6

M MI MIR3A 6A 9A

A 2D 4R 7A

AC 4D 6D 8R

ACM 6D 4M 7A

ACMI 8D 6D 4M

ACMIP 10D 8D 6D

ACMIPT 12D 10D

ACMIP ⇒ −→D 1

CMIP ⇒ −→D 1

MIP ⇒ −→D 3

MI

28 / 35

Page 29: Levenstein distance.beam

«ACMIPT» → «MI» стоит 8

M MI MIR3A 6A 9A

A 2D 4R 7A

AC 4D 6D 8R

ACM 6D 4M 7A

ACMI 8D 6D 4M

ACMIP 10D 8D 6D

ACMIPT 12D 10D 8D

ACMIPT ⇒ −→D 1

CMIPT ⇒ −→D 1

MIPT ⇒ −→D 3

MIT ⇒ −→D 3

MI

29 / 35

Page 30: Levenstein distance.beam

«A» → «MIR» стоит 10

M MI MIR3A 6A 9A

A 2D 4R 7A 10A

AC 4D 6D 8R

ACM 6D 4M 7A

ACMI 8D 6D 4M

ACMIP 10D 8D 6D

ACMIPT 12D 10D 8D

A ⇒ −→R 1 M

M ⇒ −→A 1 I

MI ⇒ −→A 2 R

MIR

30 / 35

Page 31: Levenstein distance.beam

«AC» → «MIR» стоит 11

M MI MIR3A 6A 9A

A 2D 4R 7A 10A

AC 4D 6D 8R 11A

ACM 6D 4M 7A

ACMI 8D 6D 4M

ACMIP 10D 8D 6D

ACMIPT 12D 10D 8D

AC ⇒ −→R 1 M

MC ⇒ −→R 2 I

MI ⇒ −→A 2 R

MIR

31 / 35

Page 32: Levenstein distance.beam

«ACM» → «MIR» стоит 10

M MI MIR3A 6A 9A

A 2D 4R 7A 10A

AC 4D 6D 8R 11A

ACM 6D 4M 7A 10A

ACMI 8D 6D 4M

ACMIP 10D 8D 6D

ACMIPT 12D 10D 8D

ACM ⇒ −→D 1

CM ⇒ −→D 1

M ⇒ −→A 1 I

MI ⇒ −→A 2 R

MIR

32 / 35

Page 33: Levenstein distance.beam

«ACMI» → «MIR» стоит 7

M MI MIR3A 6A 9A

A 2D 4R 7A 10A

AC 4D 6D 8R 11A

ACM 6D 4M 7A 10A

ACMI 8D 6D 4M 7A

ACMIP 10D 8D 6D

ACMIPT 12D 10D 8D

ACMI ⇒ −→D 1

CMI ⇒ −→D 1

MI ⇒ −→A 2 R

MIR

33 / 35

Page 34: Levenstein distance.beam

«ACMIP» → «MIR» стоит 8

M MI MIR3A 6A 9A

A 2D 4R 7A 10A

AC 4D 6D 8R 11A

ACM 6D 4M 7A 10A

ACMI 8D 6D 4M 7A

ACMIP 10D 8D 6D 8R

ACMIPT 12D 10D 8D

ACMIP ⇒ −→D 1

CMIP ⇒ −→D 1

MIP ⇒ −→R 3 R

MIR

34 / 35

Page 35: Levenstein distance.beam

«ACMIPT» → «MIR» стоит 10

M MI MIR3A 6A 9A

A 2D 4R 7A 10A

AC 4D 6D 8R 11A

ACM 6D 4M 7A 10A

ACMI 8D 6D 4M 7A

ACMIP 10D 8D 6D 8R

ACMIPT 12D 10D 8D 10D

ACMIPT ⇒ −→D 1

CMIPT ⇒ −→D 1

MIPT ⇒ −→R 3 R

MIRT ⇒ −→D 4

MIR

35 / 35