24
Хакасский государственный университет им. Н.Ф. Катанова Структуры и алгоритмы обработки данных Лекция: Методы программирования. Николай Гребенщиков, www.grebenshikov.ru

Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки данных"

Embed Size (px)

Citation preview

Хакасский государственный университет им. Н.Ф. Катанова

Структуры и алгоритмы обработки данных

Лекция: Методы программирования.

Николай Гребенщиков, www.grebenshikov.ru

Методы программирования

• Жадные алгоритмы - производится локально оптималь-ный выбор в надежде, что он приведет к оптимальномурешению глобальной задачи.

• Динамическое программрование - разбить большуюзадачу на подзадачи и не вычислять подзадачи более од-ного раза (использовать память).

1

Жадные алгоритмы

• Не всегда дают оптимальный реультат. Например, рас-краска графа.

• Также являются жадными: алгоритмы поиска минималь-ного остовного дерева, алгоритм Дейкстры, алгоритм Хафф-мана.

2

Задача о выборе процессов

Дано: множество процессов S = {a1, a2, . . . , an}, процессамтребуется некоторый ресурс, который одновременно можетиспользоваться лишь одним процессом. Каждый процесс ai

характеризуется начальным моментом si и конечным мо-ментом si, где 0 ≤ si < fi < ∞. Будучи выбран, процесс ai

длится в течение [si, fi), а процессы ai и aj совместимы,если интервалы [si, fi) и

[sj, fj

)не перекрываются.

Найти: подмножество взаимно совместимых процессов, об-разующих множество максимального размера.

3

Задача о выборе процессов. Оптимальное решение.

Пусть S осортировано по f в порядке возрастания.

Aij ={sk ∈ S : fi ≤ sk < fk ≤ sj

}- подмножество процессов,

которые можно выполнить в промежутке между заверше-нием ai и началом aj

Оптимальное решение задачи Sij равно Aij = Aik⋃

akAkj.

c[i, j] =

0, при Sij = �maxi<k<j,ak∈Sij

{c[i, k] + c[k, j] + 1} , при Sij 6= �

4

Задача о выборе процессов. Жадный алгоритм.

5

Задача о выборе процессов. Жадный алгоритм.

6

Задача о выборе процессов

T (n) = Θ(NlogN). Почему?

Доказательство оптимальности:

7

Задача о рюкзаке.

8

Жадный метод

1. Привести задачу оптимизации к виду, когда после сделан-ного выбора остается решить только одну поздзадачу.

2. Доказать, что существует оптимальное решение, котороеможно получить жадным выбором и такой выбор всегдадопустим.

3. Показать, что после жадного выбора остается подзадача,которую можно решить жадным методом.

9

На семинар

• Теоретические основы жадных алгоритмов.

• Задача планировки заданий, выполняющихся на одномпроцессоре.

10

Динамическое программирование - применяется если под-задачи не являются независимыми.

1. Описание структуры оптимального решения.

2. Рекурсивное определение значения оптимального реше-ния.

3. Вычисление значения с помощью восходящего анализа.

4. Составление оптимального решения на основе информа-ции, полученной предыдущих этапах.

11

Числа Фиббоначи

F (n) =

1, при n = 1, n = 2

f(n− 1) + f(n− 2), при n > 2

Trecursive(n) = O(2n)

Ttable(n) = O(n) - это и есть динамическое программирова-ние.

12

Дискретная задача о рюкзаке

Дано: N предметов {x1, x2, . . . , xN} с различной стоймостьюVi и весом Wi, максимальный вес Wmax.

Найти: подмножество предметов, вес которых бы не привы-шал Wmax, стоймость которых была бы максимальной.

13

Дискретная задача о рюкзаке. Описание структуры

Ciw - максимальная стоимость предметов из множества{x1, x2, . . . , xi} при максимальном весе равном w.

Ciw =

0, если i = 0 ∨ w = 0

C(i−1)w, если Wi > w

max(C(i−1)w, C(i−1)(w−Wi)+ Vi если Wi ≤ w

Ответ: CNW

14

Дискретная задача о рюкзаке. Алгоритм.1 for (i=0;i<=N ;i++) C[i][0] = 0;2 for (w=0;w<=Wmax;w++) C[0][w] = 0;3

4 for (i=1;i<=N;i++)5 for (w=1;w<=Wmax;w++) {6 if (Wi[i] > w)7 C[i][w] = C[i-1][w];8 else9 C[i][w] = max(C[i-1][w] , C[i-1][w-Wi[i]]+Vi[i]);10 }11

12 output(C[N][Wmax]);

15

Дискретная задача о рюкзаке. Анализ алгоритма.

T (N, Wmax) = Θ(N ·Wmax)

16

Отличие строк. Edit distance problem

Дано: две строки, стоимость удаления, вставки и заменысимвола.

Найти: минимальное количество действий необходимых дляпреобразования одной строки в другую.

Применение: сравнение ДНК.

17

Отличие строк. Описание структуры

d(s1, s2) - количество действий по переобразованию строкиs1 в s2.

d(s1, s2) =

0, если s1 =<> ∨s2 =<>

|s|, если(s1 =<> ∧s2 = s)∨(s1 = s ∧ s2 =<>)

min(d(s1, s2

+if(c1 = c2)0else1),

d(s1, s2),

d(s1, s2))

если s1 = s1 + c1, s2 = s2 + c2

18

Отличие строк. Алгоритм.

m[0..|s1|,0..|s2|]m[i,j] = d(s1[1..i], s2[1..j]).

1 m[0][0] = 0;2 for (i=1; i<length(s1); i++) m[i][0] = i;3 for (j=1; j<length(s2); j++) m[0][j] = j;4

5 for (i=0; i<length(s1); i++)6 for (j=0; j<length(s2); j++) {7 val = (s1[i] == s2[j]) ? 0 : 1;8 m[i][j] = min( m[i-1][j-1] + val,9 min(m[i-1][j]+1 , m[i][j-1]+1));10 }

19

Отличие строк. Анализ алгоритма.

T (s1, s2) = Θ(|s1| · |s2|)

20

На семинар

• Задача составления расписания конвейера.

• Задача перемножения цепочки матриц.

• Поиск самой длинной общей подпоследовательности.

• Построение оптимального бинарного дерева поиска.

• Задача оптимальной триангуляции многоугольника.

21

Лабораторная работа

В далекой стране Тарватии разгорелся бензиновый кризис.Вследствие чего цены на топливо в каждом городе отлича-лись в значительной степени. В это время принц Педро ДеЛя Вега решил проехать по своей стране на автомобиле. Онпроложил маршрут, так что ну пути его следования будутнаходиться N городов. В каждом из этих городов есть за-правочные станции. Агенты принца сообщили ему стоимостьбензина в каждом из городов. Помогите, пожалуйста, Педровыбрать в каких городах ему заправиться, чтобы потратитьна бензин как можно меньше денег. Примите во внимание,что принц всегда заправляет полный бак.

22

Список литературы

• David M. Mount, The Lecture notes: Design and Analysisof Computer Algorithms. [Электронный ресурс] / Dept. ofComputer Science, University of Maryland, 2004. - Режимдоступа: http://www.cs.umd.edu/ mount/451/Lects/451lects.pdf. - сс.11-25

• Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-мы: построение и анализ, 2-е издание. - М. : Издатель-ский дом “Вильямс”, 2007. сс.386-481.

23