1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7

# конспект · шаг 7 из 7

Конспект: жадный выбор и доказательство обменом

выжимка - её можно унести в заметки

Понятия

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

Безопасность жадного шага - существует оптимальный ответ, СОДЕРЖАЩИЙ наш выбор. Не «наш выбор лучший».

Оптимальность подзадачи - после шага остаётся задача того же вида.

Обменный аргумент - доказательство безопасности заменой одного элемента оптимума на наш.

Формула Хорна - правила «все посылки ⇒ вывод» и запреты «не все сразу». Жадность ставит истину только вынужденно; каждая такая истина обязательна в любом решении: нарушенный запрет - решений нет, целые запреты - наименьшее решение. Линейное время со счётчиками посылок.

Что унести

СХЕМА АЛГОРИТМА                        ЧТО ДОКАЗАТЬ
1. выбрать критерий                    1. безопасность шага (обменом)
2. отсортировать      Θ(n·log n)       2. оптимальность подзадачи
3. пройти и брать совместимое  Θ(n)    → по индукции весь ответ оптимален
4. не пересматривать
ОБМЕННЫЙ АРГУМЕНТ
    O - произвольный оптимум; g - наш жадный выбор
    если g ∈ O - готово
    иначе найти o ∈ O, мешающий g, и взять O' = O − o + g
    проверить: (а) O' допустим   (б) O' не хуже O
    ⇒ существует оптимум с g
ОБМЕН СОСЕДНИХ (когда ответ - ПОРЯДОК)
    показать, что в оптимуме нет «плохой пары соседей»
    так доказывается «короткие задачи вперёд»:
    перестановка длинной и короткой уменьшает сумму завершений на t_i − t_j

ЖАДНЫЙ НЕ ОТСТАЁТ (когда ответ - ЧИСЛО)
    выбрать меру частичного ответа и индукцией показать,
    что по ней жадный не хуже любого другого

Выбор занятий - эталонный пример: три правдоподобных критерия, верен один.

критерий на наборе из 14 занятий вердикт
самое раннее начало 6 неверен: длинное занятие выбивает короткие
самое короткое 8 неверен: короткое на стыке мешает двум
самый ранний КОНЕЦ 10 верен, доказывается обменом

Полный перебор на том же наборе подтверждает 10.

Где жадность ломается: когда взятый элемент меняет не только ЗАПАС ресурса, но и ПРАВИЛА для остальных.

задача жадность
дробный рюкзак оптимум по удельной цене (240 на классическом наборе)
целый рюкзак неверна: 160 против оптимума 220 - нужна динамика
максимум занятий оптимум по раннему концу
занятия с ценностями неверна: отношение ответов можно сделать любым
сдача монетами 1, 5, 10, 25 верна
сдача монетами 1, 3, 4 (сумма 6) неверна: 3 монеты вместо 2

Порядок работы: сначала контрпример (перебор ВСЕХ входов до пяти-шести элементов против точного алгоритма, потом минимизировать руками), и только если его нет - доказательство. Доказывать ложное утверждение можно бесконечно.

Если точной жадности нет - она годится как приближённый алгоритм с ДОКАЗАННОЙ гарантией: покрытие множеств ln n (неулучшаемо при P ≠ NP), вершинное покрытие 2 (брать оба конца ребра, а не вершину максимальной степени). «Гарантия 2» - граница худшего случая, а не типичная ошибка.

Тихие ошибки: доказывать «наш выбор лучший»; обменивать не тот элемент; забыть проверить допустимость после обмена; остановиться на безопасности шага, не проверив подзадачу; искать контрпример случайными данными; объявить приближённый алгоритм точным.

Куда это ведёт

Следующая глава - три классические задачи, где обмен работает по-разному: расписания (обмен соседних), код Хаффмана (обмен листьев дерева) и покрытие множеств (жадность без точности, но с оценкой).

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.