Об этом проекте
Этот репозиторий — подборка реализаций алгоритмов и структур данных на Java, демонстрирующая корректные и элегантные реализации распространённых вычислительных методов. Он служит одновременно справочной библиотекой и учебным ресурсом для разработчиков и студентов.
Проект охватывает широкий круг тем, организованных по основным разделам:
**Структуры данных**: включает сбалансированные деревья (AVL, красно-чёрные), бинарные деревья поиска, splay-деревья, динамические массивы, деревья Фенвика, фибоначчиевы кучи, хеш-таблицы (с несколькими стратегиями разрешения коллизий), связные списки, очереди с приоритетом (двоичная куча, D-куча, индексируемые варианты), очереди, деревья отрезков, разреженные таблицы, стеки, суффиксные массивы, префиксные деревья (trie) и структуры union-find.
**Динамическое программирование**: включает классические задачи, такие как размен монет, редакционное расстояние, варианты задачи о рюкзаке, максимальный непрерывный подмассив, наибольшие общая/возрастающая/палиндромная подпоследовательности, задача коммивояжёра и поиск паросочетания минимального веса. Также есть практические примеры, такие как задачи о замощении и ad-hoc задачи.
**Геометрия**: охватывает векторные операции в 2D и 3D, алгоритмы пересечения окружностей и прямых, ближайшую пару точек, построение выпуклой оболочки (Graham Scan и Monotone Chain), проверку площади и принадлежности многоугольника, вычисление площади треугольника и расчёт географических расстояний.
**Теория графов**: обширный раздел, включающий алгоритмы на деревьях (укоренение, изоморфизм, центр, диаметр, LCA), алгоритмы потоков в сетях (Форд-Фалкерсон, Эдмондс-Карп, Диниц, масштабирование пропускной способности, поток минимальной стоимости), а также основные алгоритмы: BFS, DFS, Дейкстра, Беллман-Форд, Флойд-Уоршелл, топологическая сортировка, минимальные остовные деревья (Крускал, Прим, Борувка), сильно связные компоненты (Тарьян, Косарайю), точки сочленения, мосты и эйлеровы пути.
**Линейная алгебра**: включает метод Гаусса, операции с матрицами (определитель, обратная матрица, умножение, возведение в степень), алгоритм Фрейвальда и решения линейных рекуррентных соотношений.
**Математика**: охватывает темы теории чисел, включая китайскую теорему об остатках, решето простых чисел, функцию Эйлера, расширенный алгоритм Евклида, НОД и быстрое преобразование Фурье.
В проекте используется Bazel в качестве системы сборки (требуется JDK 8+), с понятными инструкциями для запуска отдельных алгоритмов или полного набора тестов. Многие реализации сопровождаются видеообъяснениями на YouTube-канале William Fiset, что делает материал доступным для визуального обучения. Каждая запись алгоритма обычно содержит его временную сложность, а код организован по темам с единообразными соглашениями об именовании. Репозиторий распространяется под лицензией MIT и включает бейджи CI/CD для тестов Bazel и проверки URL в README.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.