levenstein distance.beam
TRANSCRIPT
Задача «Российская Инновация» илиLevenstein distance
Стас Фомин, [email protected]
Заказные ИнформСистемы
2 мая 2010 г.
1 / 35
Россия Вперед!TM — Великий ПланTM
ОпределениеТехнологическая Карта Завода —конвеер-последовательность из стандартныхстанков и прочих машин.Cтанок кодируются однобуквенным кодом издиапазона{0-9, A-z, a-z}.Например «04ABFGSDDD8F67GODMNDOT895J4C7DHT84H».Технологическая карта может быть очень длинной (до 1000 знаков).Соответственно, АналитикиTM Великого ПланаTM исследуютвозможности по оптимальной перестройке всех заводов, выполняямногофакторную оптимизацию.
2 / 35
Задача
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
Расстояние Левенштейна1
Оно же редакторское расстояниеДинамическое программированиеза O(m · n) времениМожно уложиться в O(n) памяти (даже при нахожденииплана преобразования).
Алгоритм и Оптимальность: любой оптимальный план можнопереписать, чтобы операции шли над концом строки.
1Владимира Иосифовича
4 / 35
5 / 35
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
«» → «» стоит 0
M MI MIR
AACACMACMIACMIPACMIPT
7 / 35
«A» → «» стоит 2
M MI MIR
A 2D
ACACMACMIACMIPACMIPT
A ⇒ −→D 1
8 / 35
«AC» → «» стоит 4
M MI MIR
A 2D
AC 4D
ACMACMIACMIPACMIPT
AC ⇒ −→D 1
C ⇒ −→D 1
9 / 35
«ACM» → «» стоит 6
M MI MIR
A 2D
AC 4D
ACM 6D
ACMIACMIPACMIPT
ACM ⇒ −→D 1
CM ⇒ −→D 1
M ⇒ −→D 1
10 / 35
«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
«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
«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
«» → «» стоит 0
M MI MIR
A 2D
AC 4D
ACM 6D
ACMI 8D
ACMIP 10D
ACMIPT 12D
14 / 35
«» → «M» стоит 3
M MI MIR3A
A 2D
AC 4D
ACM 6D
ACMI 8D
ACMIP 10D
ACMIPT 12D
⇒ −→A 0 M
M
15 / 35
«» → «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
«» → «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
«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
«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
«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
«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
«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
«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
«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
«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
«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
«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
«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
«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
«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
«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
«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
«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
«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
«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