本文概述了 The Algorithms Java 仓库中实现的各种算法类别。它旨在指导读者了解代码库中算法的组织、结构和类型。有关用于实现这些算法的特定数据结构的信息,请参阅数据结构。
该仓库包含各种算法实现,这些算法根据其功能和问题解决方法分为逻辑类别。以下图表显示了主要的算法类别
回溯算法通过逐步构建解决方案来解决问题,并在确定候选方案无法导出有效解决方案时放弃(“回溯”)该候选方案。
主要实现包括
位操作算法在位级别操作,对数据的二进制表示执行操作。这些算法常用于优化和低级操作。
主要实现
此类别包含各种加密算法的实现,用于通过加密和解密来保护数据。
主要实现
来源:DIRECTORY.md59-89 src/main/java/com/thealgorithms/ciphers/Caesar.java1-99 src/main/java/com/thealgorithms/ciphers/XORCipher.java1-96
分治算法通过将问题分解为更小的子问题,解决每个子问题,然后组合解决方案来解决问题。
主要实现
动态规划算法通过将复杂问题分解为更简单的子问题并存储结果以避免冗余计算来解决问题。
主要实现
数学算法实现了各种数学计算和操作,从基本算术到复杂的数值方法。
主要实现
来源:src/main/java/com/thealgorithms/maths/AliquotSum.java1-64 src/main/java/com/thealgorithms/maths/PerfectNumber.java1-72
此类别包含用于在集合中搜索元素以及根据特定标准排序元素的算法。
主要实现
来源:src/main/java/com/thealgorithms/searches/QuickSelect.java1-126
主要实现
来源:src/main/java/com/thealgorithms/sorts/MergeSortRecursive.java1-61
下表总结了关键算法的时间和空间复杂度
| 类别 | 算法 | 时间复杂度(平均) | 时间复杂度(最坏) | 空间复杂度 |
|---|---|---|---|---|
| 排序 | 归并排序 | O(n log n) | O(n log n) | O(n) |
| 排序 | 快速排序 | O(n log n) | O(n²) | O(log n) |
| 排序 | 堆排序 | O(n log n) | O(n log n) | O(1) |
| 搜索 | 二分搜索 | O(log n) | O(log n) | O(1) |
| 搜索 | 线性搜索 | O(n) | O(n) | O(1) |
| 搜索 | 快速选择 | O(n) | O(n²) | O(log n) |
| 回溯 | N 皇后 | O(n!) | O(n!) | O(n) |
| 加密 | 凯撒密码 | O(n) | O(n) | O(1) |
来源:src/main/java/com/thealgorithms/searches/QuickSelect.java1-126 src/main/java/com/thealgorithms/ciphers/Caesar.java1-99
以下流程图有助于根据问题特征选择合适的算法类型
该仓库包含多个堆实现,演示了重要的算法原理
MinHeap 和 MaxHeap 类实现了二叉堆数据结构,这些结构维护了堆属性,即每个节点的键值都小于或等于(最小堆)或大于或等于(最大堆)其子节点的键值。
关键操作包括
来源:src/main/java/com/thealgorithms/datastructures/heaps/MinHeap.java1-271 src/main/java/com/thealgorithms/datastructures/heaps/MaxHeap.java1-249 src/main/java/com/thealgorithms/datastructures/heaps/HeapElement.java1-173 src/main/java/com/thealgorithms/datastructures/heaps/Heap.java1-44
有关特定算法类型的更多详细信息,请参阅以下维基页面