Upload
fontaine-callum
View
31
Download
0
Embed Size (px)
DESCRIPTION
ДИСКРЕТНЫЕ ЭКСТРЕМАЛЬНЫЕ ЗАДАЧИ. Институт математики , ауд. 220 пятница 14:15. Лектор: Кононов Александр Вениаминович. http :// www . math . nsc . ru / LBRT / k 5/ dep . html. Программа первого семестра. Введение Графы Остовные деревья Кратчайшие пути Потоки в сетях - PowerPoint PPT Presentation
Citation preview
Институт математики, ауд. 220
пятница 14:15
Лектор: Кононов Александр Вениаминович
http://www.math.nsc.ru/LBRT/k5/dep.html
Программа первого семестра
1. Введение
2. Графы
3. Остовные деревья
4. Кратчайшие пути
5. Потоки в сетях
6. Максимальное паросочетание
7. Матроиды
1. Введение
1.1. Перечисление (перебор)
1.2. Время работы алгоритмов
1.3. Алгоритм сортировки слиянием
2. Графы
2.1 Основные определения
2.2 Деревья, обходы и разрезы
2.3 Связность
2.4 Эйлеровы и двудольные графы
3. Остовные деревья
3.1 Задача о минимальном остовном дереве
3.2 Задача о минимальном взвешенном ориентированном остовном дереве
3.3 Упаковка остовных деревьев
4. Кратчайшие пути
4.1 Кратчайшие пути из одной вершины
4.2 Кратчайшие пути между всеми парами вершин
4.3 Задача о минимальном усредненном цикле
5. Потоки в сетях
5.1 Теорема о максимальном потоке и минимальном разрезе
5.2 Теорема Менгера
5.3 Алгоритм Эдмонса-Карпа
5.4 Блокирующие потоки
5.5 Алгоритм Голдберга-Тарьяна
6.Максимальное паросочетание
6.1 Двудольное паросочетание
6.2 Матрица Татта
6.3 Теорема Татта
6.4 Алгоритм Эдмонса
Матроиды
7.1 Независимые системы и матроиды
7.2 Жадный алгоритм для задачи максимизации независимой системы
Литература
• Korte B., Vygen J. Combinatorial Optimization: theory and algorithms. (Algorithms and Combinatorics 21), Springer, Berlin, 2000.
• Пападимитриу Х., Стайглиц К. Комбинаторная оптимизация. Алгоритмы и сложность. М.: Мир, 1985.
Век комбинаторной оптимизации
• Теория чисел ~ 4000 лет назад
• Геометрия ~ 2600 лет назад
• Анализ ~ 300 лет назад
• Алгебра ~ 200 лет назад
----------------------------------------------------
Комбинаторная оптимизация
~ 50 лет назад!
Причина
Тысячи проблем в экономике, военных приложениях, организации производства могут быть сформулированы как задачи комбинаторной оптимизации.
Производство печатных плат
• Даны: Множество точек p1,…,pn R2 .
• Найти : Перестановку : {1,..., n}{1,..., n}
такую что d(p(i) , p(i+1) ) минимально.
1
1
n
i
Задача о назначении
• Даны: Множество чисел p1,…,pn R+
(длительность работ), m N рабочих, и непустое подмножество Si {1,..., m} рабочих для каждой работы i {1,..., n}.
• Найти : Числа xij R+ ( i =1,...,n; j Si )
так что ( i =1,...,n ) и
минимизирующее maxj .
iS
iij px j
iSijx
j:i
Комбинаторная оптимизация
Вычислительные проблемы ― не только задачки, которые должны быть решены; они ― также объекты, которые заслуживают изучения. Задачи и алгоритмы можно формализовать и изучать математически.
Х. Пападимитриоу
Задача разметки печатных плат
• Даны: Множество точек p1,…,pn R2 .
• Найти : Перестановку : {1,..., n}{1,..., n}
такую что d(p(i) , p(i+1) ) минимально.
1
1
n
i
Алгоритм ???
Input: N точек …
Найти оптимальный путь !!!
Output: оптимальный путь NO
Алгоритм ???
Input: N точек …
Перебрать все возможные перестановки и выбрать оптимальную !
Output: оптимальный путь
NO
Перебор с возвратом
(1, 1, … , 1, 1) (1, 1, … , 1, 2) (1, 1, … , 1, 3) (1, 1, … , 1, n)
(1, 1, … , 2, 1) (1, 1, … , 2, 2) (1, 1, … , 2, 3) (1, 1, … , 2, n)
(1, 1, … , 3, 1) (1, 1, … , 3, 2) (1, 1, … , 3, 3) (1, 1, … , 3, n)
• • •
• • •
• • •
• • •
nn шаговn! перестановок
n! << nn
Лексикографический порядок
Определение 1.1
Пусть x,y Rn ― два вектора. Вектор x лексикографически меньше чем y, если существует индекс j{1,..., n}, такой что xi= yi для i =1,..., j – 1 и xj < yj .
Алгоритм перебора путей
Input: Натуральное число n 3. Множество {p1,…,pn} точек на плоскости
Output: Перестановка π*:{1,..., n}→{1,..., n}, минимизирующаяcost(π*):= d(pp (i) , pp (i+1) ).
1. Set π(i):=i, π*(i):=i for i =1,...,n. Set i :=n − 1.2. Let k:=min({π(i)+1,…,n+1}\ {π(1),…, π(i) − 1}).3. If k n then:
Set π(i):=k. If i= n & cost(π) < cost(π*) then set π*:= π. If i< n then set π(i+1):=0 & i:=i+1. If k = n+1 then set i := i − 1. If i 3 then go to 2.
1
1
n
i
Примерπ := (1, 2, 3, 4, 5, 6 ) i := 5
k := 6 π := (1, 2, 3, 4, 6, 0 ) i := 6
k := 7
k := 7
k := 5 π := (1, 2, 3, 4, 6, 5 ) ? cost(π) < cost(π*) ?
k := 5 π := (1, 2, 3, 5, 0, 5 ) i := 5
k := 4 π := (1, 2, 3, 5, 4, 0 ) i := 6
k := 6 π := (1, 2, 3, 5, 4, 6 ) ? cost(π) < cost(π*) ?
• • •
i := 5
i := 4
Полезное обозначение
Определение 1.2
Пусть f , g : D R+ две функции. Будем говорить, что f есть O(g) (и писать f = O(g)), если существуют константы α, β > 0, такие что f(x) αg(x)+β для всех x D. Если f = O(g) и g = O( f ), то будем писать f = Θ(g).
Алгоритм перебора путей
Input: Натуральное число n 3. Множество {p1,…,pn } точек на плоскости
Output: Перестановка π*:{1,..., n}→{1,..., n}, минимизирующаяcost(π*):= d(pp (i) , pp (i+1) ).
1. Set π(i):=i, π*(i):=i for i =1,...,n. Set i :=n − 1.2. Let k:=min({π(i)+1,…,n+1}\ {π(1),…, π(i) − 1}).3. If k n then:
Set π(i):=k. If i= n & cost(π) < cost(π*) then set π*:= π. If i< n then set π(i+1):=0 & i:=i+1. If k = n+1 then set i := i − 1. If i 3 then go to 2.
1
1
n
i
k:=min({π(i)+1,…,n+1}\ {π(1),…, π(i) − 1})
• For j := 1 to n do aux(j) := 0.
• For j := 1 to i – 1 do aux(π(j)) := 1.
• Set k := π(i) + 1.
• While k ≤ n and aux(k) = 1 do k := k + 1.
Алгоритм
• Множество исходных данных (Вход)• Последовательность инструкций, каждая из
которых может быть представлена цепочкой элементарных шагов.
• Для каждого допустимого входа алгоритм в процессе вычисления выполняет единственно определенную серию элементарных шагов и выдает некоторый ответ.
Время работы алгоритма
Определение 1.3 Пусть алгоритм A получает на входе множество X, и
пусть f:X→R+. Если существует константа α > 0 такая что алгоритм A заканчивает вычисления не более чем через αf(x) элементарных шагов (включая арифметические операции) для любого входа xX, то будем говорить, что O( f ) время работы алгоритма A.
Размер входа
• Размер входа примера с рациональными данными равен числу бит требуемых для его двоичного представления.
Полиномиальный алгоритм
• Определение 1.4 Алгоритм с рациональным входом называется полиномиальным, если существует целое k такое что алгоритм работает время O(nk), где n есть размер входа и все числа, используемые алгоритмом в процессе вычислений ограничены величиной O(nk) бит.
Алгоритм с произвольным входом называется сильно полиномиальным, если существует целое k такое что алгоритм работает время O(nk) на любом входе состоящим из n чисел и он полиномиальный на рациональном входе. Если k=1 алгоритм называется линейным.
Таблица 1.1
n 100n log n 10n2 n3.5 nlog n 2n n!
10 3μs 1μs 3μs 2μs 1μs 4μs
30 15μs 9μs 148μs 20ms 1s >1015y
100 66μs 100μs 10ms 5 h >1013y
103 1ms 10ms 32s >1013y
108 266s 3 y >1010y
1012 46d >108y
Таблица 1.2
1h 100n log n 10n2 n3.5 nlog n 2n n!
(a) 1.19*109 60000 3868 87 41 15
(b) 10.8*109 189737 7468 104 45 16
Алгоритм сортировки слиянием
Input: Список a1,…,an действительных чисел.Output: Перестановка π : {1,..., n}{1,..., n}, такая что a(i) ≤ a(i+1)
для всех i =1,..., n – 1.
1. If n=1 then set π(1) :=1 and stop (return π ).2. Set m:= [n/2].
Let ρ:=Merge-Sort(a1,…,am). Let σ :=Merge-Sort(am+1,…,an).
3. Set k:=1, l:=1. While k ≤ m and l ≤ n – m do: If aρ(k) ≤ am+σ(l) then set π(k+l – 1):= ρ(k) and k:= k +1. else set π(k+l – 1):= m + σ (l) and l:=l +1. While k ≤ m do: Set π(k+l – 1):= ρ(k) and k:= k+1. While l ≤ n-m do: Set π(k+l – 1):= m + σ (l) and l:= l +1.
Время работы алгоритма
Теорема 1.5 Алгоритм сортировки слиянием
находит решение за O(n log n) элементарных операций.
Алгоритм сортировки слиянием
Input: Список a1,…,an действительных чисел.Output: Перестановка π : {1,..., n}{1,..., n}, такая что a(i) ≤ a(i+1)
для всех i =1,..., n – 1.
1. If n=1 then set π(1) :=1 and stop (return π ).2. Set m:= [n/2].
Let ρ:=Merge-Sort(a1,…,am). Let σ :=Merge-Sort(am+1,…,an).
3. Set k:=1, l:=1. While k ≤ m and l ≤ n – m do: If aρ(k) ≤ am+σ(l) then set π(k+l – 1):= ρ(k) and k:=k +1. else set π(k+l – 1):= m + σ (l) and l:= l +1. While k ≤ m do: Set π(k+l – 1):= ρ(k) and k:= k+1. While l ≤ n-m do: Set π(k+l – 1):= m + σ (l) and l:= l +1.
Доказательство теоремы 1.5
• T(n) время работы алгоритма на примере с n числами.
• Грубо оценим шаг 3 сверху через 5n + 2.
1log12
2522
11
nnnT
nn
Tn
TnT
T
Упражнение 1.1
.log!log , nnnчтоДоказать
Упражнение 1.2
.logn , 1 nOnчтоДоказать
Упражнение 1.3
Показать, что время работы алгоритма перебора путей есть O(n•n!).
Упражнение 1.4
Пусть s, t строчки из нулей и единиц длины m. Скажем, что s лексикографически меньше чем t если существует индекс j {1,..., n}, такой что si= ti
для i =1,..., j-1 и sj< tj .
Дано n строчек длины m, требуется упорядочить строчки в лексикографическом порядке.
Доказать, что существует линейный алгоритм, решающий эту задачу, то есть алгоритм с временем работы O(mn).