
7. Алгоритм определения полной цены
Обозначим через D(l,k) значение расстояния между двумя списками, когда в первой списке обработано I первых элементов, а во второй - k первых элементов.
Поставим в соответствие каждой nape l,k вершину графа, а каждой допустимой операции по преобразованию списков ребро графа. Каждое ребро взвешено ценой выполнения операции по преобразованию списков. Тогда задача отыскания полной цены преобразования сводится к отысканию пути наименьшей стоимости из вершины (0,0) в вершину (n,m). Длина пути D(n,m) соответствует расстоянию между списками (полной цене преобразований).
Рассмотрим пример. Пусть даны два списка: Y:1,2,2,1 иХ:1,2,1.
Пусть стоимость создания и стоимость уничтожения определяются матрицей R для различных I и k, а стоимость замены равна удвоенному элементу этой же матрицы.
Элементы матрицы для списков Y и X определяются выражением:
r(l,k)=|y(l)-x(k)|
г(0,0)=0;
r(0,k)=r(l,0)=MAX
N Y
4 1 0 1 0
R: 3 2 1 0 1
2 2 1 0 1
1 1 0 1 0
1 2 1 X
1 2 3 N
Определим полную цену преобразований Y в X.
D(1,1)=r(1,1);
Шаг 1. l=1,k=2; D(1, 2)=min[D(1,1)+r(1,2)], [D(0,1)+2*r(1,2)],[D(0,2)+r(l,2)]=
[0+1], [МАХ + 2], [МАХ + 1]=1 Создаем элемент в списке. Переход из состояния (1,1) в состояние (1,2).
Шаг 2. l=1,k=3;
D(1,3)=min[D(1,2)+r(1,3)], [D(0,2)+2*r(1,3) ,[D(0,3)+r(1,3))=
[1+0 ],[МАХ +0 1],[МАХ + 0 ]=1
Создаем элемент в списке. Переход из состояния (1,2) в состояние (1.3).
ШагЗ. l=2.k=1;
D(2,1)=min[D(2,0)+r(2,1)3,[D(1,0)+2V<2.1) ].[D(1,1)+r(2.1)]=
[MAX +1], [MAX +2 ], [0 +1]=1
Удаляем элемент в списке Переход из состояния (1,1) в состояние (2,1).
Шаг 4. l=2,k=2;
D(2,2)=min[D(2,1)+r(2,2)], [D(1,1)+2*r(2,2) ], [D(1,2)+r(2,2)]=[1 + 0 ], [0 + 0],[1 + 0]=0
Заменяем элемент в списке. Переход из состояния (1,1) в состояние (2,2).
Шаг 5. l=2,k=3;
D(2,3)=min[D(2,2)+r(2,3)],[(D(1,2)+2*r(2,3)],[D(1,3)+r(2,3)]=.[ 0 + 1],[1 +2],[ 1 + 1 ]=1
Создаем элемент в списке. Переход из состояния (2,2) в состояние (2,3).
Шаг б. l=3,k=1;D(3,1)=min[D(3lO)+r(3,1)],[D(2.0)+2*r(3,1)],[D(2,1)+r(3,1)]=
[ МАХ + 1 ],[ МАХ + 2 ],[ 1 + 1 ]=2
Удаляем элемент из списка. Переход из состояния (2,1) в состояние (3,1).
Шаг 7. l-3,k=2;
D(3,2)=min[D(3,1)+r(3,2)],[D(2,1)+2*r(3,2)],[D(2,2)+r(3,2)]=[2 + 0],[1 +0 ],[0+ 0 ]=0
Удаляем элемент из списка. Переход из состояния (2,2) в состояние (3,2),
Шаг 8. l=3,k=3;
D(313)=min[D(3,2)+r(3,3)],[D(2,2)+2*r(3.3}],[D(2,3)+r(3,3)]=[0 + 1],[0 + 2],[1 + 1]=1
Удаляем элемент из списка. Переход из состояния (2,3) в состояние (3,3).
Шаг 9. l=4,k=1;
D(4,1)=min[D(4,0)+r(4,1)],[D(3,0)+2*r(4,1)],[D(3,1)+r(4,1)]=[MAX + 0],[МАХ + 0],
[2 + 0]=2
Удаляем элемент из списка. Переход из состояния (3,1) в состояние (4,1).
Шаг 10. l=4,k=2;
D(4,2)=min[D(4,1)+r(4,2)],[D(3,1)+2*r(4,2)],[D(3,2)+r(4,2)]=[2 + 1],[2 +2],[0+1]=1 Удаляем элемент из списка. Переход из состояния (3,2) в состояние (4,2).
Шаг11.1=4, k=3;
D(4,3)=min[D(4,2)+r(4,3)],[D(3,2)+2*r{4,3)], [D(3,3)+r(4.3)]=[1 + 0],[0 +0],[1 + 0]=0
Заменяем элемент в списке. Переход из состояния (3,3) в состояние (4,3). Таким образом, преобразование списка Y в список X может быть выполнено за 4 шага:
1) Выполнение операции замены (стоимость 0). (Первая операция всегда является операцией замены). Переход из состояния (0,0) в состояние (1,1).
2) Выполнение операции замены (стоимость 0, шаг 4 ). Переход из состояния (1,1) в состояние (2,2).
3) Выполнение операции создания (стоимость 0, шаг 7 ). Переход из состояния (2,2) в состояние (3,2).
4) Выполнение операции замены (стоимость 0, шаг 11 ). Переход из состояния (3,2) в состояние (4,3).
Таким образом, полная цена преобразования равна 0. Для учета длины списков используют выражение:
DN(n,m)=D(n,m)/(n+m).
Для примера: DN(4,3)=0/(4+3)=0