Структуры данных (28 сентября 2016)
- [15 минут] Хеш-таблица
- Чем хеш-таблица лучше масива? поиск и удаление за O(1).
- Умеем Add, Del, Find. Интерфейсы HashSet, HashMap. Решение задачи про два указателя хеш-таблицей.
- Открытая адресация:
i = hash(x), while (h[i] && h[i] != x) i++;
- Сравнение открытой и списков: открытая быстрее, из списков проще удалять. Удаление из открытой: просто помечаем, когда помеченных слишком много, перестроим таблицу.
- [20 минут] Избавляемся от амортизации:
- Вектор. Ленивое копирование: когда переполнились начинаем копировать по одному элементу
- Вектор. Ленивое копирование: заранее начинаем копировать по одному элементу и выделять память
- Хеш-таблица. Ленивое копирование.
- Очередь с минимумом на двух стеках. Реализация через два динамических массива.
- [25 минут] Куча
- Интерфейс, преобразование функций друг через друга: Add, Del, ExtractMin, DecreaseKey
- Бинарная куча: реализация на массиве через siftUp → decreaseKey, Add; siftDown → Del
- Бинарная куча: build за O(n) (док-во sum k/2k уже было в практике)
- Обратные ссылки (пример: массив с операцями a[i]=x, min на всём массиве)
- Min = Max (+1 на -1, меньше на больше)
- heapsort = build + ExtractMin*n
− Перерыв −
- [30 минут] Аллокация памяти:
- сложность задачи, пример решения: heap + hash_table
- стек + рекурсия, c++: рекурсия с финализатором и примером рекурсивной функции
- список + куски одного размера (пример: хеш-таблица на списках) + кеширование
- в с++ : new, delete = empty