Модели памяти, приближения, надстрока, bin-packing (8 апреля 2025)
- Забытое: крутая жадность с заменами
- Задача: даны дедлайны окончания di и времена исполнения ti
- Выбрать макс число задач за O(n2). Сортировка по di + динамика minSumT[i,k].
- Выбрать макс число задач за O(nlogn). Жадность с заменами: поддерживаем minSumT только для максимально возможного maxK.
- Доказательство: на самом деле мы знаем весь слой динамики, ответ для каждого k ≤ maxK : minSumT[i,k] − это первые k в сортировке по ti maxK выбранных.
- Применяем доказательство к задаче: спортсмены с силой si, массой mi выстраиваются в башню. Выстроить всех: сортировка по si+mi.
- Модели вычислений
- Основное
- Интуиция RAM, RAM-w, читы с длинными числами
- Флойда за n3/w или n2 в ram
- bfs за n2/w или n в ram
- Основные операции в RAM (asm), пишем через них a>b (sub, jump, jz, jl, jc) и for/while/if/function; div → a>b
- RAM: Какие операции разрешены? add/sub/mul/div/jz/jump/halt/in/out. Специальный регистр "результат вычислений". Программа не может менять саму себя.
- RAM-w и RAM
- Какой размер регистров? RAM − неограниченные целые числа, RAM-w, до 2w.
- Читы из неограниченности : операции с массивами, как с целыми числами за O(1)
- Читы из неограниченности : bitset, bfs за O(V), Флойд за O(V2).
- Читы из неограниченности : сумма w-битных чисел в массиве за O(logn) (первую половину складываем со второй)
- Для RAM P=NP: общий алгоритм, конкретика для SAT.
- Строго полиномиальное время.
- Машина Тьюринга
- Определили машину Тьюринга, ленты, полнота по Тьюрингу
- Запрограммировать что-нибудь на Тьюринге : reverse(L,R)
- [skipped] Запрограммировать что-нибудь на Тьюринге : даны i, a, вернуть a[i]
- [skipped] Классы: Тьюринг в полином раз отличается от RAM-w. Можно RAM-w программу времени T моделировать за T2 log T.
- Приближения
- Повторили определение PTAS/FPTAS/FPRAS и алгоритмы PTAS/FPTAS для knapsack.
- Надстрока
- Пример задачи: есть много кусочков генома, нужно собрать из них геном.
- Сведение к TSP. Решение динамикой за O(2nn2).
- Простое жадное решение. Гипотеза: это 2-приближение (доказывать умеют 3.5-OPT)
- Сведение надстроки к weighted-set-cover (p[i,j,k] − зацепление i и j длины ровно k, покрывает какое-то множество исходных строк)
− Перерыв −
- Алгоритм Кармаркар-Карпа (1982)
- Что уже умеем для partition? Как оно себя ведёт на случайных R 0-1 весах?
- 0-1 → 0-1/n → 0-1/n2 → ...
- Алгоритм. Интуиция того, что это n-Θ(logn)
- [хешей мы ещё не знаем, только упоминаем] Применение для поиска теста к полиномиальным хешами.
- Мультирюкзак (bin packing)
- Повторили определение PTAS/FPTAS/FPRAS и алгоритмы.
- bin-packing, формулировка. Сложность 1.5-OPT приближения: определить 2 или 3 − уже NP-hard (partition)
- first fit: 2-OPT + доказательство.
- first fit decresing и best fit decresing (11/9*OPT+1 приближение)
- [skipped] Практически эффективное решение: локальные оптимизации (timus-1144)
- PTAS для bin packing: (адовая константа): (1+ε)OPT+1
- Задачи
- Центроид: запрос = сумма по всем вершинам на расстояние ровно d от данной
- Жадность: разбить число в виде суммы 5 квадратов