Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CLIO_фокин24.doc
Скачиваний:
9
Добавлен:
18.11.2019
Размер:
3.11 Mб
Скачать

Задача о максимальной клике.

Нельзя ли было бы обойтись двумя красками? Двойственной задачей к этой является задача о максимальной клике (клика = полный подграф). Если в графе существует полный подграф на 3 ребрах, то минимальное число красок = 3 (т.к. минимальное число красок для полного подграфа на N вершинах равно N).

В нашем случае есть клика: т.е. чтобы решить задачу о максимальной клике и решить задачу о раскраске, и посмотреть не являются ли вершины с номерами 8, 7, 1 вершинами клики.

Задача о P-медиане на графе. Даны граф G =(V,E), матрица расстояний D ={dij} и веса вершин W={wi}. Найти подмножество С  V и |С| = p такое, что Интерпретация: С – множество складов.

Минимизируем суммарную длину пути при подвозе товаров со складов.

Решение (аналог argmin алгоритма ДОСТРОЙКА). Пусть C*= {j *- новый склад} и - расстояние до ближайшего склада. Тогда

Трудоемкость: 1. C*= C  {j *}, 2. ri(C*) 3. n = |V|операций.

O(n2) - выбор одного центра. Повторяя выбор p раз, получим трудоемкость O(n2 p). Задача на графе NP‑полна, для деревьев существует полиномиальный алгоритм.

Задача о P-центре. В отличие от задачи о p‑медиане функционал будет такой:

Аналог алгоритма ДОСТРОЙКА для этой задачи – наиболее удаленный сосед.

Задача коммивояжера.

Алгоритм 1. Иди в ближайшую непройденную вершину (может не найти цикл).

А лгоритм 2: Если выполнено неравенство треугольника dijdik+dkj, то гаран­тируется нахождение цикла с длиной, превышающий оптимум не более чем в 2 раза.

Сначала построим МОД и выпишем обход: 1,2,7,6,3,6,5,4,5,6,7,2,8,2,1 (вперед и назад). Проредим его, вычеркивая все повторные вхождения вершин, кроме последней. Получим эйлеров цикл: 1,2,7,6,3,5,4,8,1. Оценим погрешность :

Из неравенства треугольника Dпостр  2DМОД  2Dопт  - длина кратчайшего обхода.

2Dопт  Dпостр  Dпостр - Dопт  Dопт    - приближенный алгоритм. Трудоемкость решения O(n2) (построение МОД)

28. Алгоритм Кристофидеса для ЗКНТ.

  1. Строим МОД и на нем множество V’ вершин с нечетной степенью.

  2. На множестве V’ строим минимальное взвешенное паросочетание (МПС) (вершины разбиваются на пары, соединяемые ребрами с минимальной суммарной длиной): (1,8), (2,3), (6,4). Добавляем эти ребра в дерево.

  3. На этом мультиграфе строится эйлеров обход: 1 2 3 6 4 5 6 7 2 8 1

Прореживаем его так же, как в предыдущем алгоритме: 1 2 3 6 4 5 7 8 1.

Докажем, что его длина превышает оптимум не более, чем на.50%.

П усть {i1, i2,…,i2m}- множество вершин из V, выписанных в порядке появления их на оптимальном маршруте коммивояжера. Тогда по неравенству треугольника имеем для паросочетаний

S1 = {(i1, i2), (i3, i4),…} и S 2 = {(i2, i3), (i4, i5),…}:

Dпостр  DМОД + DМПС  Dопт + DМПС , и Dопт  D(S1) + D(S2)  2D МПС   .

Приведем пример того, что эта оценка неулучшаема. МОД – k треугольников.

при

3.7. Точные методы решения np-полных задач.

29 Решение задачи коммивояжера методом ветвей и границ.

-

2

-

8

3

7

2

-

2

-

1

3

-

2

-

2

1

2

8

-

2

-

2

1

3

1

1

2

-

3

7

3

2

1

3

-

Н а основе чего делать ветвление? Фиксируем любую часть пути – цепочку C длины DC. На вершинах, не вошедших в цепочку C, построим МОД длины DМОД.

Пусть Dопт  – оптимальная длина цикла при фиксированной цепочке C,

-длина перемычки, Dопт ≥ DC + DМОД + Dперем.= fC

Если fC  fR , т.е. fR - D  DМОД + Dперем , (где fR – длина текущего рекордного цикла R), то цепочка C не улучшает рекорд  последнее звено цепочки C можно отбросить.

Некоторые ребра выкинем сразу. Если из гамильтонова цикла выкинуть любое ребро, то останется цепочка, для которой Dопт  DМОД (V),  fR  Dопт  DМОД (V) + r (на множестве всех вершин графа, r-длина любого ребра, вошедшего в оптимальный цикл). Получаем r  fR – DМОД (V). Если r > fR – DМОД (V), то это ребро в улучшающий цикл не войдет.

Чтобы улучшить рекорд, необходимо r  fR – DМОД (V). Решаем:

  1. С начала строим текущий рекордный цикл R:

fR=14

  1. Строим МОД алгоритмом Тарьяна: 1 – 2 – 5 – 3 – 4 – 6, DМОД  =7

  2. О тбросим ребра 1–4 и 1–6, длина которых. fR - DМОД = 14-7 = 7. Степень вершины 1 равна 2  ребра 1–2 и 1–5 участвуют в цепи, хорда 2–5 не участвует (иначе возникнет цикл). Начнем построение цепочки с вершины 5, т.к. ее степень больше степени вершины 2.

При поиске сначала вглубь цепочка с фиксированным началом целиком определяется своей последней вершиной k.  вместо fC и DC будем писать fk. и Dk..

f6 = 8+2+(1+1) = 12 = f3 = 7+1+(2+2) < fR = 14. Оценочные функции совпали  выбираем для ветвления вершину с мин.номером, т.е. 3: fR-D3=14-7=7

 Ветвим и делаем проверку на новый рекорд: в самом деле, имеем fR=12  назад.

Т .к. рекорд изменился, снова проверяем вершину 6 на возможность ветвления. Проверяем

f6 =12 ≥ fR = 12.  улучшения быть не может,  назад.

Все висячие вершины раскрыты  R – оптимален, fR=12.

Этот метод работает, если граф неориентированный (нужно для построения МОД).

30. Задача оптимального распределения ограниченного ресурса.

Пусть задан ресурс R  0 и n потребителей со своими функциями прибыли  i(x). Требуется распределить ресурс между потребителями: R = iri , ri  0, максими­зируя суммарную прибыль i  i(ri). Заметим, что любая часть оптимального рас­пределения сама является оптимальным распределением (принцип Беллмана).

Пусть Fk(y) = { k(xk) + Fk+1(y-xk)} - максимальная прибыль потребителей с номерами от k до n-1 при распределении между ними ресурса y и Fn(y) = n(y). Если R и ri – целые, то, меняя k от n-1 до 1 (метод динамического программирова­ния), мы найдем максимальную прибыль F1(R). Трудоемкость = O(nR2).

Пример: 3 экзамена за 8 дней. i – оценка на экзамене, x - время на подготовку.

x

1

2

3

y

F3(y)

x2(y)

F2(y)

x1(y)

F1(y)

2(x)

F3(4-x)

2+F3

1(x)

F2(8-x)

1+F2

0

2

3

2

0

2

0

5

3

3

6

2

8

10

1

2

3

2

1

2

0

5

3

3

6

2

8

10

2

3

4

2

2

2

2

6

4

2

6

3

7

10

3

3

4

3

3

3

0

6

4

2

6

3

7

10

4

4

5

3

4

3

4

7

5

2

7

4

7

11

5

4

5

3

5

3

2

7

max=7

4

6

10

6

5

5

4

6

4

0

7

xk(y) = min { xk y |

5

6

11

7

5

5

4

7

4

4

8

k(xk) + Fk+1(y-xk)=Fk(y)}

5

5

10

8

5

5

4

8

4

2

8

4

11

max=11

5

5

10

Случай идентичных потребителей: i(x)=(x). Докажите, что

а) если (x) выпукла по x, то весь ресурс можно отдать одному потребителю,

б) если вогнута, то его надо делить поровну между всеми потребителями.

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

Пусть есть рюкзак объема V  0 и n камней с объемами vi и ценами ci. С каждым камнем свяжем переменную xi, равную 1 (если камень берется) или 0 (в противном случае). Требуется найти подмножество камней с максимальной суммарной стоимостью, влезающее в рюкзак (т.е. iciximax при ivixi,   V).

Пусть Fk(y) - максимальная стоимость камней с номерами от k до n, влезающих в рюкзак объема y. Т.к. любая часть оптимального решения оптимальна, то

Fn(y) = cn (если vny) или 0 (в противном случае) Если V и vi – целые, то метод

Fk(y) = max { Fk+1(y), ck + Fk+1(y-vk) если yvk} динамического программирования:

xk(y) = min { xk  y | ckxk + Fk+1(y-vkxk) = Fk(y) }. меняя k от n-1 до 1, найдем F1(V), Трудоемкость - O(nV). x1(y1=V), xk+1(yk+1= yk - vkxk(yk)).

y

x1(y)

F1(y)

x2(y)

F2(y)

x3(y)

F3(y)

x4(y)

F4(y)

 1

0

0

0

0

0

0

2

1

6

0

0

0

0

3

0

8

1

8

0

0

4

0

10

0

10

1

10

5

1

15

1

14

0

10

1

10

Пример:

5x1+6x2 + 8x3+10x4 max

x1+2x2 + 3x3+ 4x4 5

F2(4) =max{ F3(4),6+ F3(4-2=2)}

= max{10,6+0} = 10, x2(4)=0.

F1(5) =max{ F2(5),10+ F2(5-1)}

= max{14,5+10} = 15, x1(5)=1.

x1 =x1(5)=1, x2 =x2(5-v1x1 =4)=0, x3 =x3(4-v2x2 =4)=0, x4=x4(4-v3x3 =4)=1.

NP-полны и варианты задачи: если xk  {0,1,2,3,…} или ограничен вес рюкзака. Точное решение дает метод ветвей и границ, нижние оценки для которого получают при отказе от ограничений (целочисленности), или метод динамического программирования. NP-полна и задача о двух кучах камней: можно ли разделить на 2 равные части кучу камней с целочисленными весами?

Пример: для набора весов {5,4,3,3,3} жадная эвристика не находит решения.