Вступительное слово
Предисловие
Для кого эта книга
Исходные тексты
Типографические обозначения
Онлайн-обучение O’Reilly
Как с нами связаться
Благодарности
Решение задач
Что такое алгоритм?
Массив всемогущий
Поиск наибольшего значения в произвольной последовательности
Подсчёт действий
Как оценить эффективность алгоритма по схеме?
Поиск двух наибольших значений в произвльном списке
Турнирное дерево
Сложность по времени и сложность по памяти
Заключение
Тренировочные задания
Анализ алгоритмов
Как оценить сложность с помощью эмпирической модели
Умножать быстрее, чем в столбик?
Классы вычислительной сложности
Асимптотический анализ
Подсчёт всех действий
Подсчёт всех байтов
Одна дверь захлопнулась — другая откроется
Двоичный поиск в упорядоченном массиве
Немногим сложнее, чем π
Двух зайцев одним выстрелом
Как всё это работает
Приближённая кривая — или чёткие границы?
Хороший хеш — залог успеха
Соответствие значений ключам
Хеш-функции и хеш-суммы
Хеш-таблица: хранение данных по ключу
Определение коллизий и их разрешение последовательным просмотром
Связный список или динамический массив?
Раздельное хранение цепочек в списках
Оценка
Расширяемые хеш-таблицы
Оценка производительности динамических хеш-таблиц
Динамические массивы
Идеальный хеш
Проход таблицы циклом
Могучая куча
Двоичная куча
Добавление пары в кучу
Снятие элемента с кучи
Хранение двоичной кучи в массиве
Как погружаться и всплывать
Сортировка без магии
Обмен элементов в сортировке
Сортировка выбором
Структура квадратичных алгоритмов сортировки
Оценка производительности сортировки выбором и сортировки вставками
Рекурсия: разделяй и властвуй!
Сортировка слиянием
Быстрая сортировка
Пирамидальная сортировка
Сравнение быстродействия алгоритмов со сложностью O(N log N)
Сортиорвка Тима
Двоичные деревья: бесконечность под рукой
Введение
Двоичные деревья поиска
Поиск значения в двоичном дереве
Удаление значения из двоичного дерева
Обход двоичного дерева
Исследование быстродействия двоичных деревьев поиска
Сбалансированные двоичные деревья
Производительность сбалансированных деревьев
Хранение пар (ключ, значение) в двоичном дереве
Двоичное дерево как приоритетная очередь
Графы: всегда на связи!
В графе удобно хранить полезную информацию
Обход лабиринта вглубину
Другой способ обхода: вширину
Ориентированные графы
Взвешенные графы
Полный поиск кратчайших путей
Алгоритм Флойда-Уоршелла
Подведём итоги
Встроенные типы данных Python
Реализация стека в Python
Реализация очередей в Python
Реализация кучи и приоритетной очереди
Что изучать дальше?
Об авторе
Об обложке
FrBrGeorge/Books/LearningAlgorythms_public (последним исправлял пользователь FrBrGeorge 2023-03-13 20:22:36)