Структуры данных (21 сентября 2016)
- [5 минут] Объявления
- Перекличка (47)
- TeX: кладите TeX, не кладите pdf.
- TeX: не нужно коммитить, как Crtl+S каждые 30 секунд, есть парень у которого за 5 минут 10 коммитов.
- TeX: проблемы с кодировкой. То чего не нужно делать − когда кодировка отобразилась не верно, пытаться копировать/менять текст, сохранять файл можно.
- TeX: орфография
- [5 минут] Реализация очереди, дека на циклическом динамическом массиве. Циклический список.
- [10 минут] Разбор выражений. Пишем код для левой ассоциативности.
- [30 минут] Время работы
- На операцию (real time) ti, в среднем (average time) mi = (sum ti) / n, амортизированное ai = ti + Δφ
- Теорема о связи амортизированного и среднего времени
- Примеры на амортизированное время (amortized time)
- Пример с вектором
- Пример со стеком
PUSH, POP_K
- Пример a2 + b2 = N : правильный потенциал = b
- Пример a2 + b2 = N : пример неправильного потенциала, b2
- Амортизация монетками, определение и равносильность.
− Перерыв −
- [20 минут] Бинпоиск
- Сортированный массив: sort(a, a+n)
- Поиск позиции x в сортированном массиве. 3 ветки: x.
lower_bound
(первый >= x) и upper_bound
(первый >x),
- Правильный бинпоиск: по инварианту. В l выполняется, в r не выполняется, r-l>1.
- Вещественный бинпоиск. Поиск корня многочлена нечётной степени.
- [15 минут] Два указателя + сортированный массив
- Online решение : sort + bs (задача: поиск всех элементов массива B в массиве A)
- Offline решение : sort + sort + два указателя
- Пересечение множеств (и мультимножеств!), C++
set_intersection
. Две версии кода: while и for.
- Ещё задачи на два указателя и множества:
merge, union, set_difference
.
- [15 минут] Хеш-таблица
- HashSet на списках:
vector<int> h[M]; hash(x), vecor::push_back, vector::find
- Как выбрать функцию
hash
? Самая простая hash(x) = x % M
- C++ :
unordered_set<int> s(N), unordered_map<int,int> m(N), MyHash { size_t operator() ( T t ); }