Алгоритмы и структуры данных:Тикеты — различия между версиями
м |
м (→5. Поисковые структуры данных) |
||
Строка 79: | Строка 79: | ||
# [[2-3 дерево]] | # [[2-3 дерево]] | ||
# [[B-дерево]] | # [[B-дерево]] | ||
− | # | + | # [[Красно-черное дерево]] 10 |
## добавить псевдокод для операций | ## добавить псевдокод для операций | ||
## расписать доказательства теорем и утверждений подробнее | ## расписать доказательства теорем и утверждений подробнее | ||
Строка 87: | Строка 87: | ||
# [[Splay-дерево]] 0,25 | # [[Splay-дерево]] 0,25 | ||
## См. также | ## См. также | ||
− | # | + | # [[Взвешенное дерево]] |
− | |||
− | |||
− | |||
# [[Tango-дерево]] 8 | # [[Tango-дерево]] 8 | ||
## Доказательство теоремы Уилбера | ## Доказательство теоремы Уилбера |
Версия 20:07, 23 сентября 2017
Тикеты индексируются как "X-Y", где X — номер раздела, Y — номер конспекта внутри раздела.
Содержание
- 1 1. Амортизационный анализ
- 2 2. Персистентные структуры данных
- 3 3. Приоритетные очереди
- 4 4. Система непересекающихся множеств
- 5 5. Поисковые структуры данных
- 6 6. Дерево отрезков
- 7 7. Дерево Фенвика
- 8 8 Задача о наименьшем общем предке
- 9 9. Хеширование
- 10 10. Сортировка
- 11 11. Сортирующие сети
- 12 12. Алгоритмы поиска
- 13 Динамическое программирование
- 14 16. Связь между структурами данных
1. Амортизационный анализ
- Амортизационный анализ 0,25
- См. также
- Динамический массив 6
- Сравнение со списком
- Англоязычные термины
- Потенциальный анализ для произвольных A, B, C
- См. также
- Hashed Array Tree 5
- Сравнение с таким способом: храним указатели на массивы константного размера, размеры массивов не меняем, увеличиваем только массив указателей (чтобы не копировать). За сколько будет работать?
- Добавить про буферизованный список
- Редактирование по мелочи
- См. также
- Список
- Стек
- Очередь
- Дек
- Мажорирующий элемент 0,25
- См. также
- Счетчик Кнута 5
- Добавить рассуждения про декремент (и вычитание 1 из произвольного разряда)
- Мастер-теорема
- List order maintenance
2. Персистентные структуры данных
- Персистентные структуры данных
- Персистентный стек
- Персистентная очередь
- Персистентный дек
- Персистентная приоритетная очередь 10
- Отрефакторить псевдокод
- Добавить красивые картинки
- Оформить всё правильно
- Добавить наивное решение на дереве
- Подробней описать решение
3. Приоритетные очереди
- Двоичная куча
- Биномиальная куча
- Фибоначчиева куча
- Левосторонняя куча 0,25
- См. также
- Тонкая куча 0,25
- См. также
- Толстая куча на избыточном счетчике
- Куча Бродала-Окасаки 4
- Ссылки заменить на источники информации, сделать маркированным списком
- Непонятно, почему merge работает за О(1), если он вызывает insert ниже, который вызывает merge
- Написать подробней операции
- Форматнуть чутка псевдокод
- Заменить Смотри также на См. также
4. Система непересекающихся множеств
- Наивные реализации 0.5
- Сделать структуру в списке типа Generic
- Написать про возможную частую ошибку в реализации массивом
- Взять обозначения перед псевдокодом и внутри комментариев в \mathtt
- Списки с весовой эвристикой 0.5
- Оформить правильно источники информации
- Интервики на амортизационный анализ
- Добавить пробелы в Других реализациях перед (
- Англоязычные термины правильно оформить
- Реализация с помощью леса корневых деревьев
- СНМ с операцией удаления за О(1) 6
- "Мы работаем в предположении, что очистка списка не подразумевает удаления каждого элемента вручную" - пояснить, почему можем так предполагать
- Кое-где не хватает точек в конце предложений
- Вообще кажется, что можно проще
- Пояснить соображения для второй модификации, начав с того, почему нельзя сделать намного проще: хранить в корне просто список листьев поддерева с этим корнем; во время union объединить два списка; во время get просто добавить все вершины пути к списку листьев корня (а то что-то развели в конспекте текста на дофига). Если внезапно окажется, что можно проще, то переписать всё.
- Если проще нельзя, то пояснить про трудности с обычной эвристикой во время get (find)
5. Поисковые структуры данных
- Упорядоченное множество
- Дерево поиска, наивная реализация
- АВЛ-дерево
- 2-3 дерево
- B-дерево
- Красно-черное дерево 10
- добавить псевдокод для операций
- расписать доказательства теорем и утверждений подробнее
- Декартово дерево
- Декартово дерево по неявному ключу 1
- В псевдокоде нет проверок на null
- Splay-дерево 0,25
- См. также
- Взвешенное дерево
- Tango-дерево 8
- Доказательство теоремы Уилбера
- А причём тут вообще она?
- Рандомизированное бинарное дерево поиска 0,25
- См. также
- Дерево ван Эмде Боаса
- Список с пропусками 7
- \theta cделать большой буквой
- Определение в начале мутное
- Оформить правильно англоязычные термины
- Для log n уровней неясно: добавить знак умножения надо, и откуда там 2 log n взялось?
- Увеличить дроби
- Пояснить подробней структуру и разделить операции по псевдокодам, добавить пояснений
- Отформатировать псевдокод
- log заменить на \log
- Расписать связь вероятности монетки с числом уровней; добавить пару слов про различные варианты честности монетки и что от них зависит
- Оформить правильно источники информации
- Добавить См. также
- Написать, почему все так любят скиплист, особенно в вычислительной геометрии
- Fusion tree
- Сверхбыстрый цифровой бор 2
- Отформатировать псевдокоды
- Сказать, почему префиксы в хеше не буду есть много памяти
- Добавить См. также
- Многоточия заменить на \ldots
- Rope
- AA-дерево
6. Дерево отрезков
- Статистики на отрезках. Корневая эвристика
- Дерево отрезков. Построение
- Реализация запроса в дереве отрезков сверху 0.5
- Много пробелов в коде, отформатировать
- Заменить neutral на varepsilon, введя сначала моноид
- Добавить построение в См. также
- В примере случаи разной глубины красиво оформить
- Реализация запроса в дереве отрезков снизу
- Несогласованные поддеревья. Реализация массового обновления 3
- Добавить примеры массовых операций в начало
- В начале определение очень похоже на определение кольца, то есть возможно ДО работает на кольце. Надо бы это пояснить и кинуть интервики на кольцо (см. замечания в обсуждениях)
- Константы взять в tex
- Отформатировать псевдокод
- Обозначения перед псевдокодов взять в \mathtt или в \mathrm
- Оформить правильно источники информации
- Добавить см. также
- Многомерное дерево отрезков
- Сжатое многомерное дерево отрезков
7. Дерево Фенвика
- Дерево Фенвика
- Встречное дерево Фенвика
- Дерево Фенвика для некоммутативных операций 0.25
- Источники информации
- Многомерное дерево Фенвика 0,25
- См. также
8 Задача о наименьшем общем предке
- Алгоритм Мо
- Сведение задачи LCA к задаче RMQ
- Сведение задачи RMQ к задаче LCA
- Метод двоичного подъема 3
- добавить пример работы алгоритма
- Решение RMQ с помощью разреженной таблицы
- Двумерная разреженная таблица
- Алгоритм Фарака-Колтона и Бендера (решение +/-1 RMQ с помощью метода четырех русских)
- Алгоритм Хьюи
- Heavy-light декомпозиция 6
- "решается с помощью heavy-light декомпозиции" — может быть решена
- "Пусть A, B - ко" — дефисы нужно заменить на тире
- В начале у тебя идут вершины a,b и A,B, а потом u,v и a,b. Надо сделать единообразно, чтобы начало конспекта и его конец согласовывались. Например, сделать корни путей большими буквами — норм. Тогда можно либо a,b и A,B, либо u,v и U,V.
- "В данном случае корень одного из путей является вершиной другого." — а почему пути не могут пересекаться крест-на-крест?
- Слишком много повтором «Пусть» в доказательстве леммы.
- "Но LCA должен принадлежать двум путям. Но" — дублирование «Но»
- "Предположим, что LCA не равны" — криво написано, нужно формально исходя из формулировки
- Ну и вообще, как будто слов пожадничал на лемму и кое-как написал
- "Построим декомпозицию." — декомпозицию чего и для чего? Очень плохо оставлять открытый контекст, особенно в начале пункта. Лучше чуть более подробно описать, чтобы было понятно
- "Корень пути, на котором лежит текущая вершина.
- Из всех путей выбираем тот, чья начальная вершина наиболее удалена от корня дерева." — вообще непонятно, как связано то, что мы хотим сохранить с тем, что написано потом. Нет предложения-связки
- "Пусть требуется" — опять пуст
- "Пусть на данной итерации" — как будто других слов нет
- "LCA будет та" — это не по-русски
- Возьми LCA в тексте везде в \mathrm
- "Потому что бесконечно большое количество путей" — откуда в конечном дереве взялось бесконечно большое число путей?
- Алгоритм Шибера-Вишкина
- Алгоритм Тарьяна поиска LCA за O(1) в оффлайн 0,25
- См. также
- Link-Cut Tree
- Rake-Compress деревья 0,25
- Английские термины
9. Хеширование
- Хеш-таблица 0,25
- См. также
- Разрешение коллизий
- взяли Хеширование кукушки 2
- Англоязычные термины
- Взять в tex знаки = и константы
- Добавить интервики
- Оформить правильно источники информации
- А что делать в случае зацикливания?
- Плюсы-минусы метода
- Идеальное хеширование
- Перехеширование. Амортизационный анализ 1
- Пояснить, почему будет O(1) на добавление при перехешировании
- Фильтр Блума 0,25
- См. также
- Quotient filter 3
- Сделать нормальное описание алгоритма, а то ничего не понятно
- Универсальное семейство хеш-функций 0.5
- Добавить ссылок
- Англоязычные термины
- Смотри обсуждения
- Заменить многоточия на \dots
- Заменить \mod на \bmod
- Заменить знаки неравенств
- Добавить "информации" в источники
- Расширяемое хеширование 5
- Красивые картинки
- Понятное описание
10. Сортировка
- 0. Сортировка
Квадратичные сортировки
- Сортировка выбором
- Сортировка пузырьком 2
- Сделать единообразные псевдокоды с равным количеством отступов
- Пояснить преимущества каждой модификации сортировки
- Подробней расписать comb sort, и почему там n log n?
- Увеличить дроби
- Добавить категорию
- Сортировка вставками
Сортировки на сравнениях
- Сортировка Шелла
- Сортировка кучей
- Быстрая сортировка
- Сортировка слиянием
- Cортировка слиянием с использованием O(1) дополнительной памяти (0.5)
- Оформить правильно Источники информации
- Добавить категорию
- Написать в начале, зачем оно надо и насколько эффективно в реальной жизни
- Терпеливая сортировка (0.5)
- Имена массивов взять в \mathtt
- Отформатировать псевдокоды
- Добавить категорию
- Timsort
- Smoothsort
- Теорема о нижней оценке для сортировки сравнениями (4)
- Заменить знаки неравенств
- Добавить "информации" в источники
- Добавить пару следствий из теоремы
- Добавить категорию
Многопоточные сортировки
Другие сортировки
- Поиск k-ой порядковой статистики 2
- Англоязычные термины
- Переменные в Tex
- Отформатировать псевдокод
- Заменить знаки неравенств
- Увеличить дроби
- Оформить правильно Источники информации
- Добавить категории, См. также
- Добавить про модификацию partition с разбиением на 3 части
- Кажется, что не работает, так как partition возвращает абсолютное смещение
- Поиск k-ой порядковой статистики за линейное время
- Поиск k-ой порядковой статистики в двух массивах
- Сортировка подсчетом
- Цифровая сортировка
- Карманная сортировка
- Сортировка Хана
- (10) В отдельный конспект про ЭП-дерево и что это такое (за отдельные баллы, разумеется)
- Задача флага Нидерландов
- Блинная сортировка
11. Сортирующие сети
- Сортирующие сети
- Проверка сети компараторов на то, что она сортирующая. 0-1 принцип
- Сортирующие сети для квадратичных сортировок
- Сортировочные сети с особыми свойствами
- Сеть Бетчера
12. Алгоритмы поиска
- Целочисленный двоичный поиск
- Поиск в матрице
- Вещественный двоичный поиск
- Троичный поиск 2
- Про == нужно сказать другое
- Добавить про унимодальность функции в начале
- Сказать, почему плохо, когда функция не строго монотонна
- Добавить сюда метод дихотомии
- Поиск с помощью золотого сечения
- Интерполяционный поиск 2
- Хотелось бы увидеть пример Интерполяционного поиска на арифметической прогрессии, как говорится в начале, в сравнении с бинпоиском
- Можно что-нибудь сказать про интерполяционный поиск на геом. прогрессии или в других предположениях
- Метод Фибоначчи 2?
- Пример работы алгоритма
- Что-то еще может быть, написать куратору
Динамическое программирование
0 Динамическое программирование
13 Классические задачи динамического программирования
- Кратчайший путь в ациклическом графе
- Задача о числе путей в ациклическом графе
- Задача о расстановке знаков в выражении
- Задача о порядке перемножения матриц (3)
- Взять переменные и константы в Tex
- Обернуть задачу в шаблон
- Интервики на конспект правильных скобочных последовательностей
- Написать, почему нас не устраивает число Каталана в асимптотике
- Отформатировать псевдокоды
- Оформить правильно источники информации
- Убрать про мемоизацию
- Задача о наибольшей общей подпоследовательности
- Задача о наибольшей возрастающей подпоследовательности
- Быстрый поиск наибольшей возрастающей подпоследовательности*
- Задача коммивояжера, ДП по подмножествам
- Задача о редакционном расстоянии, алгоритм Вагнера-Фишера
- Задача о рюкзаке
14 Способы оптимизации методов динамического программирования
- Метод четырех русских для умножения матриц
- Применение метода четырех русских в задачах ДП на примере задачи о НОП
- Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза
- Meet-in-the-middle
- Convex hull trick
15 Другие задачи
- Задача о расстоянии Дамерау-Левенштейна
- Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами
- Задача о наибольшей подпоследовательности-палиндроме
- Задача о наибольшей общей возрастающей последовательности
- Задача о наибольшей общей палиндромной подпоследовательности
- Динамическое программирование по профилю (7)
- Англоязычные термины
- Заменить умножение на \cdot
- Заменить дефисы на тире
- Взять переменные и константы в Tex
- Отформатировать псевдокоды
- Добавить ещё примеров
- Оформить правильно источники информации
- Добавить нормальное объяснение происходящего (и почему это работает)
- Динамика по поддеревьям