Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_5.doc
Скачиваний:
10
Добавлен:
24.08.2019
Размер:
82.43 Кб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]