Жадные алгоритмы
- [10 минут] Гамильтонов путь
- Конь и правило Варнсдорфа
- Вариации: рандом или прижиматься к границе; начинать с рандома или с угла/стороны/центра.
- Применение к произвольному графу. Вероятностный алгоритм, поэтому запустить нужно несколько раз. Можно не 1 ребро брать, а k минимальных.
- [30 минут] Хаффман
- Как обычно записывается текст в файл? Есть алфавит Σ каждому символу дают ceil(logΣ) бит.
- Принцип сжатия: символам сопоставляем разные коды. Минимизируем Σ 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↓
- Заменим пару с минимальными counti на новую вершину
- Реализация кучей за O(ΣlogΣ). Получение собственно кодов.
- Хранение дерева
- Можно записать массив частот, в decode строить дерево так же, как в encode
- Можно писать или 0.LR или 1.символ
- Можно перестановку символов и структуру дерева: m(logm - loge + 2).
--- Перерыв ---
- [20 минут] Компаратор
- Примеры задач
- Сортировка по ti (успеть побольше!)
- Сортировка по di (успеть все! дедлайн на время концов) док-во выбором минимума
- Сортировка по ti+di (успеть все! дедлайн на время начала) док-во выбором максимума
- Сортировка по feei/ti (штраф = Ti*feei)
- Обобщение
- Если решение сортировка, то существует компаратор, его не обязательно описывать формулой
- Применяем к feei/ti
- Применяем к ti+di
- Применяем к задаче о двух станках без доказательства