Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы
Alexander Lazarev
Institute of Control Sciences of Russian Academy of Sciences
2009-2010 учебный год
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Outline
1 Алгоритмы
2 Метод динамического программированияЗадача РанецЗадача КоммивояжёрРаскрой выпуклого многоугольникаРасписание работы конвейера
3 Метод ветвей и границЗадача коммивояжёра
4 Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Элементы теории алгоритмов
1 Метод динамического программирования;2 Метод ветвей и границ.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
В 1900 году в Париже прошла Всемирная конференцияматематиков, на которой Давид Гильберт (David Hilbert,1862–1943) изложил в виде тезисов сформулированные им 23наиважнейшие, по его мнению, задачи, которые предстоялорешить ученым-теоретикам наступающего ХХ века. Подвторым номером в его списке значилась одна из тех простыхзадач, ответ на которые кажется очевидным, пока не копнешьнемножечко глубже. Говоря современным языком, это былвопрос: самодостаточна ли математика? Вторая задачаГильберта сводилась к необходимости строго доказать, чтосистема аксиом — базовых утверждений, принимаемых вматематике за основу без доказательств, —- совершенна иполна, то есть позволяет математически описать всё сущее.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Надо было доказать, что можно задать такую систему аксиом,что они будут, во-первых, взаимно непротиворечивы, аво-вторых, из них можно вывести заключение относительноистинности или ложности любого утверждения.И тут в 1931 году какой-то венский очкарик —- математик КуртГёдель —- взял и опубликовал короткую статью, попростуопрокинувшую весь мир так называемой «математическойлогики».
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Гёдель попросту доказал следующее удивительное свойстволюбой системы аксиом:«Если можно доказать утверждение A, то можно доказать иутверждение не-A».
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Слабая теорема Гёделя о неполноте:«Любая формальная система аксиом содержит неразрешенныепредположения».Сильная теорема Гёделя о неполноте:«Логическая полнота (или неполнота) любой системы аксиомне может быть доказана в рамках этой системы. Для еедоказательства или опровержения требуются дополнительныеаксиомы (усиление системы)».
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Ричард Эрнст Беллман (англ. Richard Ernest Bellman; род.26.8.1920, Нью-Йорк — ум.19.3.1984, Лос-Анджелес) —американский математик, один из ведущих специалистов вобласти математики и вычислительной техники.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Ассистент математики в Принстонском университете(1946—1948).Associate Professor математики, Стэнфордский университет(1948—1952).Научный сотрудник, RAND Corporation (1953—1965).Профессор, Университет Южной Калифорнии (1965—1984).Получил многочисленные результаты, связанные сприменением динамического программирования в разныхобластях математики (вариационное исчисление,автоматическое регулирование, теория аппроксимации,исследование операций и др.). В вариационном исчисленииважную роль играет функциональное уравнение Беллмана. Вматематических методах оптимального управления известныБеллмана функция и уравнение. Р.Беллман опубликовал 619статей и 39 книг. Многие его работы переведены на русскийязык.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Динамическое программирование обычно придерживается двухподходов к решению задач:
1 нисходящее динамическое программирование: задачаразбивается на подзадачи меньшего размера, онирешаются и затем комбинируются для решения исходнойзадачи. Используется запоминание для решений частовстречающихся подзадач;
2 восходящее динамическое программирование: всеподзадачи, которые впоследствии понадобятся длярешения исходной задачи просчитываются заранее и затемиспользуются для построения решения исходной задачи.Этот способ лучше нисходящего программирования всмысле размера необходимого стека и количества вызовафункций, но иногда бывает нелегко заранее выяснитьрешение каких подзадач нам потребуется в дальнейшем.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Задача Ранец
n∑i=1
vixi → max
n∑i=1
wixi ≤W
xi ∈ {0, 1},wi > 0, i = 1, . . . , n.
(1)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Ранец
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Коммивояжёр
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Коммивояжёр
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Коммивояжёр
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Коммивояжёр
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Коммивояжёр
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Коммивояжёр
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача Коммивояжёр
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
Рассмотрим применение техники динамическогопрограммирования еще на одном простом примере.Рассматривается множество так называемых раскроеввыпуклого n-угольника или, что то же самое, различныхразбиений его на треугольники с помощью n − 3непересекающихся диагоналей. Стоимость конкретного раскроя– это суммарная длина проведенных диагоналей. Пусть данвыпуклый n-угольник. Требуется найти его раскройминимальной стоимости.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
Будем считать, что все вершины исходного многоугольникапронумерованы в порядке обхода n-угольника по часовойстрелки, т.е. n-угольник образован отрезками(1, 2), (2, 3), . . . , (n − 1, n), (n, 1). Через M(k , l) обозначиммногоугольник, отрезаемый от исходного диагональю (k , l), гдеk ≤ l . Он образован отрезками(k , k + 1), (k + 1, k + 2), . . . , (l − 1, l), (k , l).Ясно, что при l = k + 1 многоугольник M(k , l) вырождается вотрезок, при l = k + 2 – треугольник, а M(1, n) – это исходныйn-угольник.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
Для любых вершин k и l через n(k , l) обозначим минимальнуюстоимость раскроя многоугольника M(k , l), если l > k + 2, иполагаем
n(k , l) = 0, если l = k + 1,n(k , l) = 0, если l = k + 2.
Получаем следующее очевидное рекуррентное соотношение
n(k , l) = min{n(k , i) + n(i , l) + d(k , i) + d(i , l) : k < i < l},
где d(s, r) – это длина диагонали (s, r), если r > s + 1, иd(s, r) = 0, если r = s + 1.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
Указанное соотношение позволяет составить таблицу дляn(k , l), заполняя ее в порядке возрастания числа l − k + 1 –количества вершин в многоугольнике M(k , l). Программатакого заполнения таблицы будет использовать память O(n2) итребовать время O(n3), поскольку всего существует O(n2)элементов таблицы, а для однократного применениярекуррентной формулы требуется осуществить выборминимального числа из не более чем n чисел.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
После того, как вычислена таблица значений n(k , l), мыполучаем минимальную стоимость раскроя (она равна n(1, n))и легко можем вычислить раскрой минимальной стоимости.Для этого можно реализовать процесс обработки подзадач впорядке убывания их размера. Процесс начинается обработкойисходной задачи и постепенно шаг за шагом находитдиагонали, образующие разрез минимальной стоимости. Накаждом шаге рассматривается многоугольник M(k , l) и ищетсятакая вершина i , k < i < l , что
n(k , l) = n(k , i) + n(i , l) + d(k , i) + d(i , l).
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
Поскольку таких шагов будет меньше n, а на каждом шагетребуется осуществить сравнение числа n(k , l) со значениямине более чем сумм
n(k , i) + n(i , l) + d(k , i) + d(i , l),
получаем оценку O(n3) для суммарной временной сложностидвух этапов рассмотренного алгоритма.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
Пример
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
n(1, 9) = min{n(1, 2) + n(2, 9) + d(1, 2) + d(2, 9);n(1, 3) + n(3, 9) + d(1, 3) + d(3, 9);n(1, 4) + n(4, 9) + d(1, 4) + d(4, 9);n(1, 5) + n(5, 9) + d(1, 5) + d(5, 9);n(1, 6) + n(6, 9) + d(1, 6) + d(6, 9);n(1, 7) + n(7, 9) + d(1, 7) + d(7, 9);n(1, 8) + n(8, 9) + d(1, 8) + d(8, 9)}
(2)
n(2, 9) = min{n(2, 3) + n(3, 9) + d(2, 3) + d(3, 9);n(2, 4) + n(4, 9) + d(2, 4) + d(4, 9);n(2, 5) + n(5, 9) + d(2, 5) + d(5, 9);n(2, 6) + n(6, 9) + d(2, 6) + d(6, 9);n(2, 7) + n(7, 9) + d(2, 7) + d(7, 9);n(2, 8) + n(8, 9) + d(2, 8) + d(8, 9)}
(3)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
n(1, 9) = min{n(1, 2) + n(2, 9) + d(1, 2) + d(2, 9);n(1, 3) + n(3, 9) + d(1, 3) + d(3, 9);n(1, 4) + n(4, 9) + d(1, 4) + d(4, 9);n(1, 5) + n(5, 9) + d(1, 5) + d(5, 9);n(1, 6) + n(6, 9) + d(1, 6) + d(6, 9);n(1, 7) + n(7, 9) + d(1, 7) + d(7, 9);n(1, 8) + n(8, 9) + d(1, 8) + d(8, 9)}
n(1, 8) = min{n(1, 2) + n(2, 8) + d(1, 2) + d(2, 8);n(1, 3) + n(3, 8) + d(1, 3) + d(3, 8);n(1, 4) + n(4, 8) + d(1, 4) + d(4, 8);n(1, 5) + n(5, 8) + d(1, 5) + d(5, 8);n(1, 6) + n(6, 8) + d(1, 6) + d(6, 8);n(1, 7) + n(7, 8) + d(1, 7) + d(7, 8)}
(4)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
n(k , l), 1 ≤ k < l ≤ n, O(n2) O(n3) трудоёмкостьO(n2) память
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(1, 2) = n(1, 3) = n(2, 4) = n(3, 4) = 0
n(1, 4) = min{n(1, 2) + n(2, 4) + d(1, 2) + d(2, 4);n(1, 3) + n(3, 4) + d(1, 3) + d(3, 4)} =min{0+ 6; 5+ 0} = 5
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(2, 3) = n(2, 4) = n(4, 5) = n(3, 5) = 0
n(2, 5) = min{n(2, 3) + n(3, 5) + d(2, 3) + d(3, 5);n(2, 4) + n(4, 5) + d(2, 4) + d(4, 5)} =min{0+ 7; 6+ 0} = 6
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(3, 4) = n(3, 5) = n(4, 6) = n(5, 6) = 0
n(3, 6) = min{n(3, 4) + n(4, 6) + d(3, 4) + d(4, 6);n(3, 5) + n(5, 6) + d(3, 5) + d(5, 6)} =min{0+ 8; 7+ 0} = 7
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(4, 5) = n(5, 7) = n(4, 6) = n(6, 7) = 0
n(4, 7) = min{n(4, 5) + n(5, 7) + d(4, 5) + d(5, 7);n(4, 6) + n(6, 7) + d(4, 6) + d(6, 7)} =min{0+ 5; 8+ 0} = 5
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(5, 6) = n(6, 8) = n(5, 7) = n(7, 8) = 0
n(5, 8) = min{n(5, 6) + n(6, 8) + d(5, 6) + d(6, 8);n(5, 7) + n(7, 8) + d(5, 7) + d(7, 8)} =min{0+ 12; 5+ 0} = 5
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(6, 7) = n(7, 9) = n(6, 8) = n(8, 9) = 0
n(6, 9) = min{n(6, 7) + n(7, 9) + d(6, 7) + d(7, 9);n(6, 8) + n(8, 9) + d(6, 8) + d(8, 9)} =min{0+ 7; 12+ 0} = 7
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(1, 2) = n(1, 3) = n(3, 5) = n(4, 5) = 0; n(2, 5) = 6; n(1, 4) = 5
n(1, 5) = min{n(1, 2) + n(2, 5) + d(1, 2) + d(2, 5);n(1, 3) + n(3, 5) + d(1, 3) + d(3, 5);n(1, 4) + n(4, 5) + d(1, 4) + d(4, 5)} =min{6+ 0+ 9; 5+ 7; 5+ 10+ 0} = 12
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(2, 3) = n(2, 4) = n(4, 6) = n(5, 6) = 0; n(3, 6) = 7; n(2, 5) = 6
n(2, 6) = min{n(2, 3) + n(3, 6) + d(2, 3) + d(3, 6);n(2, 4) + n(4, 6) + d(2, 4) + d(4, 6);n(2, 5) + n(5, 6) + d(2, 5) + d(5, 6)} =min{7+ 0+ 4; 6+ 8; 6+ 9+ 0} = 11
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(3, 4) = n(3, 5) = n(5, 7) = n(6, 7) = 0; n(4, 7) = 5; n(3, 6) = 7
n(3, 7) = min{n(3, 4) + n(4, 7) + d(3, 4) + d(4, 7);n(3, 5) + n(5, 7) + d(3, 5) + d(5, 7);n(3, 6) + n(6, 7) + d(3, 6) + d(6, 7)} =min{5+ 0+ 5; 7+ 5; 7+ 4+ 0} = 10
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(4, 5) = n(4, 6) = n(6, 8) = n(7, 8) = 0; n(5, 8) = 5; n(4, 7) = 5
n(4, 8) = min{n(4, 5) + n(5, 8) + d(4, 5) + d(5, 8);n(4, 6) + n(6, 8) + d(4, 6) + d(6, 8);n(4, 7) + n(7, 8) + d(4, 7) + d(7, 8)} =min{5+ 0+ 8; 8+ 12; 5+ 5+ 0} = 10
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(5, 6) = n(5, 7) = n(7, 9) = n(8, 9) = 0; n(6, 9) = 7; n(5, 8) = 5
n(5, 9) = min{n(5, 6) + n(6, 9) + d(5, 6) + d(6, 9);n(5, 7) + n(7, 9) + d(5, 7) + d(7, 9);n(5, 8) + n(8, 9) + d(5, 8) + d(8, 9)} =min{7+ 0+ 6; 5+ 7; 5+ 8+ 0} = 12
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(1, 2) = n(1, 3) = n(4, 6) =n(5, 6) = 0;n(2, 6) = 11;n(3, 6) = 7;n(1, 4) = 5;n(1, 5) = 12
n(1, 6) = min{n(1, 2) + n(2, 6) + d(1, 2) + d(2, 6);n(1, 3) + n(3, 6) + d(1, 3) + d(3, 6);n(1, 4) + n(4, 6) + d(1, 4) + d(4, 6);n(1, 5) + n(5, 6) + d(1, 5) + d(5, 6)} =min{11+ 0+ 8; 7+ 5+ 4; 5+ 10+ 8; 12+ 15+ 0} = 16
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(2, 3) = n(2, 4) = n(5, 7) =n(6, 7) = 0;n(3, 7) = 10;n(4, 7) = 5;n(2, 5) = 6;n(2, 6) = 11
n(2, 7) = min{n(2, 3) + n(3, 7) + d(2, 3) + d(3, 7);n(2, 4) + n(4, 7) + d(2, 4) + d(4, 7);n(2, 5) + n(5, 7) + d(2, 5) + d(5, 7);n(2, 6) + n(6, 7) + d(2, 6) + d(6, 7)} =min{10+ 0+ 8; 5+ 6+ 5; 6+ 9+ 5; 11+ 8+ 0} = 16
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(3, 4) = n(3, 5) = n(6, 8) =n(7, 8) = 0;n(4, 8) = 10;n(5, 8) = 5;n(3, 6) = 7;n(3, 7) = 10
n(3, 8) = min{n(3, 4) + n(4, 8) + d(3, 4) + d(4, 8);n(3, 5) + n(5, 8) + d(3, 5) + d(5, 8);n(3, 6) + n(6, 8) + d(3, 6) + d(6, 8);n(3, 7) + n(7, 8) + d(3, 7) + d(7, 8)} =min{10+ 0+ 7; 5+ 7+ 8; 7+ 4+ 12; 10+ 8+ 0} = 17
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(4, 5) = n(4, 6) = n(7, 9) =n(8, 9) = 0;n(5, 9) = 12;n(6, 9) = 7;n(4, 7) = 5;n(4, 8) = 10
n(4, 9) = min{n(4, 5) + n(5, 9) + d(4, 5) + d(5, 9);n(4, 6) + n(6, 9) + d(4, 6) + d(6, 9);n(4, 7+ n(7, 9) + d(4, 7) + d(7, 9);n(4, 8) + n(8, 9) + d(4, 8) + d(8, 9)} =min{12+ 0+ 10; 7+ 8+ 6; 5+ 5+ 7; 10+ 7+ 0} = 17
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(1, 2) = n(1, 3) = n(5, 7) =n(6, 7) = 0;n(2, 7) = 16;n(3, 7) = 10;n(1, 4) = 5; n(4, 7) = 5;n(1, 5) = 12;n(1, 6) = 16
n(1, 7) = min{n(1, 2) + n(2, 7) + d(1, 2) + d(2, 7);n(1, 3) + n(3, 7) + d(1, 3) + d(3, 7);n(1, 4) + n(4, 7) + d(1, 4) + d(4, 7);n(1, 5) + n(5, 7) + d(1, 5) + d(5, 7);n(1, 6) + n(6, 7) + d(1, 6) + d(6, 7)} =
min{16 + 0 + 5; 10 + 5 + 8; 5 + 5 + 10 + 5; 12 + 15 + 5; 16 + 7 + 0} = 21
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(2, 3) = n(2, 4) = n(6, 8) =n(7, 8) = 0;n(3, 8) = 17;n(4, 8) = 10;n(2, 5) = 6; n(5, 8) = 5;n(2, 6) = 11;n(2, 7) = 16
n(2, 8) = min{n(2, 3) + n(3, 8) + d(2, 3) + d(3, 8);n(2, 4) + n(4, 8) + d(2, 4) + d(4, 8);n(2, 5) + n(5, 8) + d(2, 5) + d(5, 8);n(2, 6) + n(6, 8) + d(2, 6) + d(6, 8);n(2, 7) + n(7, 8) + d(2, 7) + d(7, 8)} =
min{17 + 0 + 4; 10 + 6 + 7; 6 + 5 + 9 + 8; 11 + 8 + 12; 16 + 5 + 0} = 21
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(3, 4) = n(3, 5) = n(7, 9) =n(8, 9) = 0;n(4, 9) = 17;n(5, 9) = 12;n(3, 6) = 7; n(6, 9) = 7;n(3, 7) = 10;n(3, 8) = 17
n(3, 9) = min{n(3, 4) + n(4, 9) + d(3, 4) + d(4, 9);n(3, 5) + n(5, 9) + d(3, 5) + d(5, 9);n(3, 6) + n(6, 9) + d(3, 6) + d(6, 9);n(3, 7) + n(7, 9) + d(3, 7) + d(7, 9);n(3, 8) + n(8, 9) + d(3, 8) + d(8, 9)} =
min{17 + 0 + 6; 12 + 7 + 10; 7 + 7 + 4 + 6; 10 + 8 + 7; 17 + 4 + 0} = 21
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(1, 2) = n(1, 3) = n(6, 8) =n(7, 8) = 0;n(2, 8) = 21;n(3, 8) = 17;n(1, 4) = 5; n(4, 8) = 10;n(1, 5) = 12; n(5, 8) = 5;n(1, 6) = 16;n(1, 7) = 21;
n(1, 8) = min{n(1, 2) + n(2, 8) + d(1, 2) + d(2, 8);
n(1, 3) + n(3, 8) + d(1, 3) + d(3, 8);
n(1, 4) + n(4, 8) + d(1, 4) + d(4, 8);
n(1, 5) + n(5, 8) + d(1, 5) + d(5, 8);
n(1, 6) + n(6, 8) + d(1, 6) + d(6, 8);
n(1, 7) + n(7, 8) + d(1, 7) + d(7, 8)} =
min{21 + 0 + 8; 17 + 5 + 4; 5 + 10 + 10 + 7; 12 + 5 + 15 + 8; 16 + 7 + 12; 21 + 6 + 0} =26
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(2, 3) = n(2, 4) = n(7, 9) =n(8, 9) = 0;n(3, 9) = 21;n(4, 9) = 17;n(2, 5) = 6; n(5, 9) = 12;n(2, 6) = 11; n(6, 9) = 7;n(2, 7) = 16;n(2, 8) = 21;
n(2, 9) = min{n(2, 3) + n(3, 9) + d(2, 3) + d(3, 9);
n(2, 4) + n(4, 9) + d(2, 4) + d(4, 9);
n(2, 5) + n(5, 9) + d(2, 5) + d(5, 9);
n(2, 6) + n(6, 9) + d(2, 6) + d(6, 9);
n(2, 7) + n(7, 9) + d(2, 7) + d(7, 9);
n(2, 8) + n(8, 9) + d(2, 8) + d(8, 9)} =
min{21 + 0 + 8; 17 + 6 + 6; 6 + 12 + 9 + 10; 11 + 7 + 8 + 6; 16 + 5 + 7; 21 + 8 + 0} =28
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Раскрой выпуклого многоугольника
0 0 5 10 15 7 6 9 00 0 0 6 9 8 5 8 65 0 0 0 7 4 8 4 810 6 0 0 0 8 5 7 615 9 7 0 0 0 5 8 107 8 4 8 0 0 0 12 66 5 8 5 5 0 0 0 79 8 4 7 8 12 0 0 00 6 8 6 10 6 7 0 0
n(1, 2) = n(1, 3) = n(7, 9) =n(8, 9) = 0;n(2, 9) = 28;n(3, 9) = 21;n(1, 4) = 5; n(4, 9) = 17;n(1, 5) = 12; n(5, 9) = 12;n(1, 6) = 16; n(6, 9) = 7;n(1, 7) = 21;n(1, 8) = 26.
n(1, 9) = min{n(1, 2) + n(2, 9) + d(1, 2) + d(2, 9);
n(1, 3) + n(3, 9) + d(1, 3) + d(3, 9);
n(1, 4) + n(4, 9) + d(1, 4) + d(4, 9);
n(1, 5) + n(5, 9) + d(1, 5) + d(5, 9);
n(1, 6) + n(6, 9) + d(1, 6) + d(6, 9);
n(1, 7) + n(7, 9) + d(1, 7) + d(7, 9);
n(1, 8) + n(8, 9) + d(1, 8) + d(8, 9)} =
min{28 + 0 + 6; 21 + 5 + 8; 5 + 17 + 10 + 6; 12 + 12 + 15 + 10;
16 + 7 + 7 + 6; 21 + 6 + 7; 26 + 9 + 0} = 34
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
O(2n)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Расписание работы конвейера
Прямой ход.На итерации алгоритма j = 1: суммирований 2; сравнений 0.На итерации алгоритма j = 2, . . . , n: суммирований 6;сравнений 2.Обратный ход.n операций перехода.Трудоёмкость O(n)Память O(n)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Задача коммивояжёра (коммивояжёр -— бродячий торговец,Traveling Salesman Problem) является одной из самыхизвестных задач комбинаторной оптимизации. Задачазаключается в отыскании самого выгодного маршрута,проходящего через указанные города хотя бы по одному разу споследующим возвратом в исходный город. В условиях задачиуказываются критерий выгодности маршрута (кратчайший,самый дешёвый, совокупный критерий и т. п.) исоответствующие матрицы расстояний, стоимости и т. п. Какправило, указывается, что маршрут должен проходить черезкаждый город только один раз —- в таком случае выборосуществляется среди гамильтоновых циклов.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Существует несколько частных случаев общей постановкизадачи, в частности геометрическая задача коммивояжёра(также называемая планарной или евклидовой, когда матрицарасстояний отражает расстояния между точками наплоскости), треугольная задача коммивояжёра (когда наматрице стоимостей выполняется неравенство треугольника),симметричная и асимметричная задачи коммивояжёра. Такжесуществует обобщение задачи, так называемая обобщённаязадача коммивояжёра.Общая постановка задачи, впрочем как и большинство еёчастных случаев, относится к классу NP-сложных задач.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача коммивояжёра
Для решения задачи коммивояжёра предложен в 1963 годугруппой авторов (Дж. Литл, К. Мурти, Д. Суини, К.Кэрол).
Пример
∞ 9 5 10 15 8 6 9 86 ∞ 7 6 9 8 5 8 65 8 ∞ 5 7 4 8 4 810 6 6 ∞ 4 8 5 7 615 9 8 6 ∞ 11 5 8 107 8 4 8 7 ∞ 9 12 66 5 8 5 5 5 ∞ 7 79 8 4 7 8 12 5 ∞ 67 6 8 6 10 6 7 6 ∞
5
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Задача двух станков
Дано:
1 N12 – множество требований, стехнологическим маршрутом(1 −→ 2);
2 для каждого требования заданы p1i
и p2i – времена обслуживания на
первом и втором приборесоответственно;
3 целевая функция – суммарное(общее) время обслуживания всехтребований.
Аэропорт: "прибор" 1 – регистрация, паспортный, таможенныйконтроль. . . ; "прибор" 2 – взлётно-посадочная полоса.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Ограничения:
1 на каждом приборе в каждыймомент времени выполняется неболее одного требования;
2 каждое требование может начатьвыполняться на втором приборе,только если оно завершилось напервом, то есть момент окончанияобслуживания на первом приборе недолжен превосходить моментаначала обслуживания на втором;
3 непрерываемость требований: еслиi-тое требование началообслуживаться в момент времени tна j-том приборе, то оно должнообслуживаться на том же приборедо момента времени t + pj
i .
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритм Джонсона:
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Пример 1.
j 1 2 3 4 5 6 7
p1j 5 7 4 3 5 7 6
p2j 6 5 6 7 4 6 8
π = ( , , , , , , )
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Пример 1.
j 1 2 3 4 5 6 7
p1j 5 7 4 3 5 7 6
p2j 6 5 6 7 4 6 8
π = (4 , , , , , , )
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Пример 1.
j 1 2 3 5 6 7
p1j 5 7 4 5 7 6
p2j 6 5 6 4 6 8
π = (4 , , , , , , )
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Пример 1.
j 1 2 3 5 6 7
p1j 5 7 4 5 7 6
p2j 6 5 6 4 6 8
π = (4 , , , , , , 5)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Пример 1.
j 1 2 3 6 7
p1j 5 7 4 7 6
p2j 6 5 6 6 8
π = (4 , 3 , , , , , 5)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Пример 1.
j 1 2 6 7
p1j 5 7 7 6
p2j 6 5 6 8
π = (4 , 3 , , , , , 5)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Пример 1.
j 1 2 6 7
p1j 5 7 7 6
p2j 6 5 6 8
π = (4 , 3 , , , , 2 , 5)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Пример 1.
j 1 6 7
p1j 5 7 6
p2j 6 6 8
π = (4 , 3 , 1 , , , 2 , 5)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Пример 1.
j 6 7
p1j 7 6
p2j 6 8
π = (4 , 3 , 1 , 6 , 7 , 2 , 5)O(n log n)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Используя Алгоритм 1, строим две перестановки π12 и π21 длямножеств требований N12 и N21, соответственно. В силуТеорем 1 и 2, расписания с такими порядками являютсяоптимальными в задачах 1 и 2, соответственно. Пусть c∗ и c∗∗
оптимальные значения целевой функции. Считаем, чтовыполнены условия Лемм 1 и 2. Обозначим c∗∗∗ оптимальноезначение целевой функции в задаче 3. Все требования имеютположительное время обслуживания, поэтому
c∗∗∗ ≥ max{c∗, c∗∗}.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Также общее суммарное время обслуживание не может бытьменьше, чем суммарное время обслуживания на каждомприборе
c∗∗∗ ≥ max{p1, p2},
гдеp1 = p1
12 + p121, p2 = p2
12 + p221.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Возможны два случая:
1max{p1, p2} ≥ max{c∗, c∗∗};
2max{c∗, c∗∗} ≥ max{p1, p2}.
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
O(n log n)
Алгоритмы Метод динамического программирования Метод ветвей и границ Задача двух станков
O(n log n)