Жадные алгоритмы (29 марта 2017)
- [5 минут] Введение и рюкзак: непрерывный рюкзак, равносильность сортировки выбору первого элемента
- [10 минут] Гамильтонов путь
- Конь и правило Варнсдорфа
- Вариации: рандом или прижиматься к границе; начинать с рандома или с угла/стороны/центра.
- Применение к произвольному графу. Вероятностный алгоритм, поэтому запустить нужно несколько раз. Можно не 1 ребро брать, а k минимальных.
- Отсечение для произвольного графа: остаток связен
- [15 минут] Коммивояжёр
- Формулировка: есть неравенство треугольника, граф полный
- 2 приближение через MST
- 1.5 приближение через MST (дополняем до эйлерова, добавляя)
- Локальные оптимизации: перестановка, reverse для пересекающегося
− Перерыв −
- [20 минут] Хаффман (повторение с дискретки)
- Принцип сжатия: символам сопоставляем разные коды. Минимизируем Σ counti leni
- Чтобы можно было однозначно декодировать сделаем коды беспрефиксными (пример с a=0, b=0; a=0, b=00; a=0, b=1, c=01)
- Кодирование (encode) за O(length). Раскодирование (decode) за O(length) построением дерева кодов (бора строк).
- Доказательство корректности + алгоритм
- Рассмотрим дерево, в нём нет deg = 1, и leni↑ counti↓
- Заменим пару с минимальными count1 и count2 на новую вершину count1 + count2
- [skipped] Реализация кучей за O(ΣlogΣ). Получение собственно кодов.
- [skipped] Реализация очередью за O(sort + Σ)
- Хранение дерева: можно хранить собственно, можно массив count, можно сжать хаффманом
- [30 минут] Компаратор
- Примеры задач
- Сортировка по ti (успеть сделать побольше заданий!)
- Сортировка по di (успеть все! дедлайн на время концов) док-во выбором минимума
- Спортсмены si, mi выстраиваются в башню
- Сортировка по feei/ti (штраф = Ti*feei)
- Обобщение
- Если решение сортировка, то существует компаратор, его не обязательно описывать формулой
- Применяем к feei/ti
- Применяем к ti+di
- Применяем к задаче о двух станках без доказательства