Жадности, приближения, PTAS-ы (12 марта 2021)
- Крутая жадность с заменами
- Задача: даны дедлайны окончания di и времена исполнения ti
- Выбрать макс число задач за O(n2). Сортировка по di + динамика minSumT[i,k].
- Выбрать макс число задач за O(nlogn). Жадность с заменами: поддерживаем minSumT только для максимально возможного maxK.
- Доказательство: на самом деле мы знаем весь слой динамики, ответ для каждого k ≤ maxK : minSumT[i,k] − это первые k в сортировке по ti maxK выбранных.
- Применяем доказательство к задаче: спортсмены с силой si, массой mi выстраиваются в башню. Выстроить всех: сортировка по si+mi.
- Жадности и приближения
- Set Cover ln(n)-OPT.
- [skipped] [ушло в практику] взвешенный случай Set Cover
- [skipped] [Ушла в практику] Надстрока (жадное решение)
- [skipped] [Ушла в практику] Хорновские формулы (определение: не более одного отрицания в каждом дизъюнкте; решение: жадно или все 1, или есть одинокое отрицание)
- Рюкзаки, PTAS-ы для knapsack
- Задачи: partition, subsetsum, knapsack, binpacking. Целочисленность, вещественность.
- NP-трудоность: сводим решаем partition через любую из subsetsum, knapsack, binpacking
- Определяем PTAS и FPTAS (приближение для любого ε)
- [skipped] [ушло в практику] PTAS для рюкзака без стоимостей (partition).
- Рюкзак со стоимостями (knapsack)
- Проблема обычной жадности по wi/pi: никак не приближает
- PTAS (1+1/k) приближение (переберём какие k точно возьмём за nk)
- FPTAS: динамика maxProfit[i, weight] и minWeight[i, profit]. Берём вторую динамику и делим профиты всех предметов на K.
- Жадное решение для partition
- Что собственно хочется приближать? |sum(ai)-sum(bi)| плохо, max(sum(ai), sum(bi))
- Жадность: sort(wi), класть в меньший из двух
- Понимание того, что это 6/5-OPT: n=4 предмета мы всегда решим оптимально, далее разность не более a5 ⇒ ошибка не более a5/2
- На самом деле это 7/6-OPT