Тема3.ppt
- Количество слайдов: 27
Тема 3 Разработка эффективных алгоритмов o Метод «разделяй и властвуй» o Динамическое программирование o
Метод «разделяй и властвуй» 1. Задача разбивается на независимые подзадачи (части), которые не пересекаются. 2. Каждая подзадача решается отдельно. 3. Из отдельных решений подзадач строится решение исходной задачи.
o принцип балансировки, предполагает, что задача разбивается на подзадачи приблизительно равных размерностей, т. е. идет поддержание равновесия.
Пример 1 o Необходимо отсортировать массив из n элементов. n n сортировка слиянием (есть балансировка) T(n)=2 T(n/2)+Cn, n>1, T(1)=1. сортировка выбором T(n)=T(n-1)+Cn, n>1, T(1)=1.
Пример 2 o Необходимо найти максимальный и минимальный элементы массива. n Выбираем из первых двух элементов массива максимальный и минимальный элементы (1 сравнение), затем, последовательно просматривая элементы массива, сравниваем каждый последующий из (n – 2) элементов с максимальным и минимальным элементами 2(n-2) сравнения. Количество сравнений T(n) = 2 n-3
n Делим массив на две части (балансировка) Находим максимальный и минимальный элементы для каждой и частей; выбираем из максимальных элементов наибольшй и из минимальных элементов наименьший. T(n) = 2 T(n/2) + 2, T(2) = 1. T(n) = 3 n/2 – 2. n>2
Динамическое программирование 1. 2. 3. Задача погружается в семейство задач той же природы. Другими словами разбивается на зависимые (могут пересекаться) задачи. Каждая подзадача решается отдельно один раз. Оптимальные значения решений всех подзадач запоминаются (обычно в таблице). Для исходной задачи строится возвратное соотношение, связывающее между собой оптимальные значения зависимых подзадач.
Пример 1 o Заданы две строки символов A = {a 1, a 2, . . , am} B = {b 1, b 2, …, bn} Необходимо определить d(A, B) минимальное число вставок, · удалений, замен символа, требуемое для преобразования одной строки в другую.
Подзадачи данной задачи Ai. Bj o o Преобразование строки {a 1, a 2, …, ai} в строку {b 1, b 2, …, bj}. d[i, j] - минимальное количество операций для выполнения этого преобразования.
Таблица подзадач Ai. Bj при m=2, n=3 j=0 j=2 j=3 b 1 i=0 j=1 b 1 b 2 b 3 i=1 a 1 b 1 b 2 b 3 i=2 a 1 a 2 b 1 b 2 b 3
Таблица d[i, j] при m=2, n=3 j=0 j=1 j=2 j=3 i=0 0 1 2 3 i=1 1 i=2 2
Таблица d[i, j] при m=2, n=3 j=0 j=1 j=2 j=3 i=0 0 1 2 3 i=1 1 i=2 2
Рассмотрим смежные задачи: a 1 a 2 …ai-1 b 1 b 2…bj-1 a 2 …ai-1 b 1 b 2…bj a 1 a 2 …ai b 1 b 2…bj-1 a 2 …ai b 1 b 2…bj Ai-1 Bj-1 Ai-1 Bj Ai. Bj-1 Ai B j
Связь решений o o o Если удалить в задаче Ai. Bj элемент ai, то приходим к задаче Ai-1 Bj (d[i - 1, j] + 1). Решим задачу Ai. Bj-1, после чего прибавим элемент bj. Получаем решение задачи Ai. Bj (d[i, j-1] + 1). Решим задачу Ai-1 Bj-1, после чего одна операция замены элемента ai на bj, которая необходима лишь в случае когда элементы не совпадают приводит к решению задачи Ai. Bj (d[i - 1, j - 1] + δ(ai, bj), где δ(ai, bj) = 0 , если ai = bj ; δ(ai, bj) = 1 если ai = bj)
Возвратное соотношение: o d[i, j] = min(d[i- 1, j] + 1; d[i, j - 1] + 1; d[i - 1, j - 1] + δ(ai, bj)).
Пример. A : p t s l d d f B: tsgldds i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 j=0 0 1 2 3 4 5 6 7 j=1 1 j=2 2 j=3 3 j=4 4 j=5 5 j=6 6 j=7 7
Пример. A : p t s l d d f B: tsgldds i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 j=0 0 1 2 3 4 5 6 7 j=1 1 1 j=2 2 2 j=3 3 3 j=4 4 4 j=5 5 5 j=6 6 6 j=7 7 7
Пример. A : p t s l d d f B: tsgldds i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 j=0 0 1 2 3 4 5 6 7 j=1 1 j=2 2 j=3 3 j=4 4 j=5 5 j=6 6 j=7 7
Пример. A : p t s l d d f B: tsgldds i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 j=0 0 1 2 3 4 5 6 7 j=1 1 2 j=2 2 1 j=3 3 2 j=4 4 3 j=5 5 4 j=6 6 5 j=7 7 6
Пример. A : p t s l d d f B: tsgldds i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 j=0 0 1 2 3 4 5 6 7 j=1 1 2 3 j=2 2 1 2 j=3 3 2 2 j=4 4 3 2 j=5 5 4 3 j=6 6 5 4 j=7 7 6 5
Пример. A : p t s l d d f B: tsgldds i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 j=0 0 1 2 3 4 5 6 7 j=1 1 2 3 4 j=2 2 1 2 3 j=3 3 2 2 3 j=4 4 3 2 3 j=5 5 4 3 2 j=6 6 5 4 3 j=7 7 6 5 4
Пример. A : p t s l d d f B: tsgldds i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 j=0 0 1 2 3 4 5 6 7 j=1 1 2 3 4 5 j=2 2 1 2 3 4 j=3 3 2 2 3 4 j=4 4 3 2 3 4 j=5 5 4 3 2 3 j=6 6 5 4 3 2 j=7 7 6 5 4 3
Пример. A : p t s l d d f B: tsgldds i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 j=0 0 1 2 3 4 5 6 7 j=1 1 2 3 4 5 6 j=2 2 1 2 3 4 5 j=3 3 2 2 3 4 5 j=4 4 3 2 3 4 5 j=5 5 4 3 2 3 4 j=6 6 5 4 3 2 3 j=7 7 6 5 4 3 3
Пример. A : p t s l d d f B: tsgldds i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 j=0 0 1 2 3 4 5 6 7 j=1 1 2 3 4 5 6 j=2 2 1 2 3 4 5 j=3 3 2 2 3 4 5 j=4 4 3 2 3 4 5 j=5 5 4 3 2 3 4 j=6 6 5 4 3 2 3 j=7 7 6 5 4 3 3
Пример 2 o Задана группа матриц A 1, A 2, …, As. Каждая матрица Ai задана размерами ni, mi. Причем, mi = ni+1. Определить, какое минимальное число операций умножения требуется для перемножения s матриц, причем, перемножать можно любые две рядом стоящие матрицы.
o o Известно, что для перемножения двух матриц размером [n × m] [m × k] требуется nmk операций умножения. A=A 1(10× 20)·A 2(20× 50)·A 3(50× 1)·A 4(1× 100). A=A 1·(A 2·(A 3·A 4)). 125000 операций. A=(A 1·(A 2·A 3))·A 4. 2200 операций.
F[i, j]- минимальное количество операций для перемножения матриц с номерами от i до j. F[i, j]=min (F[i, k]+F[k+1, j]+ni·nk+1·mj), F[i, i]=0. o i ≤ k ≤ j-1 o o F[i, j] вычисляется в порядке возрастания разностей индексов, те. начинаем с вычисления F[i, i] для всех i, затем F[i, i + 1] для всех i, затем F[i, i + 2] для всех i, и т. д. Результат решения задачи соответствует величине F[1, s].
Тема3.ppt