数据架构
该库提供了经典算法和数据架构的实现。
组织
该项目分为两个软件包:算法和结构。算法软件包包含大部分独立算法的实现,而结构软件包包含仅在其上运行的数据结构和算法。
算法
这是算法软件包下的算法列表:
在binarysearch.py中:
- 标准二进制搜索:标准二进制搜索。 https://en.wikipedia.org/wiki/binary_search_algorithm
- 第一次出现二进制搜索:标准二进制搜索,除了它找到与搜索键匹配的第一个元素。
在expression.py中:
在Quessionolver.py中:
- A*算法:找到算法的路径。 https://en.wikipedia.org/wiki/a* _search_algorithm
- a*算法适应8个式问题问题:https://www.cs.princeton.edu/courses/archive/spr10/cos226/assignments/8puzzle.html
sort.py:
- 选择排序:https://en.wikipedia.org/wiki/selection_sort
- 插入排序:https://en.wikipedia.org/wiki/insertion_sort
- 外壳排序:https://en.wikipedia.org/wiki/shellsort
- 合并排序的变化:https://en.wikipedia.org/wiki/merge_sort
- 反转计数:计数具有修改合并排序的反转数
- 快速排序的变化:包括标准快速排序,3向快速排序和采样快速排序。 https://en.wikipedia.org/wiki/quicksort
- 堆排序:https://en.wikipedia.org/wiki/heapsort
- 选择KTH:按顺序选择KTH元素。基于快速排序分区。
结构
这是在它们上运行的已实施数据结构和算法的列表:
在linkedlist.py中:
- 链接列表:https://en.wikipedia.org/wiki/linked_list
- 链接堆栈:用链接列表实现的堆栈。
- 链接队列:用链接列表实现的队列。
在unionfind.py中:https://en.wikipedia.org/wiki/disjoint-set_data_structure
- 快速查找:使用数组之类的数据结构实现的脱节集。 o(1)查找。
- 快速联合:使用父链接树实现的脱节集。
- 平衡的快速联合:与父链接树实现并在联合上平衡的脱节集。 o(log(n))查找和联合效率。
- 路径压缩快速联合:与父链接树实现并通过路径压缩进行增强。
- 平衡路径压缩快速联合:与父链接树实现的脱节集和平衡和路径压缩。几乎摊销的O(1)在查找和联合方面效率。
在Symboltable.py中:
- 二进制搜索树:标准BST。 https://en.wikipedia.org/wiki/binary_search_tree
- 红色和黑树:使用2-3表示的平衡BST。 https://en.wikipedia.org/wiki/red%E2%80%93Black_tree
- 单独的链式哈希表:哈希表通过将它们链接在列表中来解决碰撞。 https://en.wikipedia.org/wiki/hash_table#separate_chaining
- 开放地址哈希表:用线性探测解决碰撞的哈希表。 https://en.wikipedia.org/wiki/hash_table#open_addressing
在堆中:
- 二进制堆:用二进制堆的优先队列实现。 https://en.wikipedia.org/wiki/binary_heap
在Graph.py中:
- 无向图:https://en.wikipedia.org/wiki/graph_(Discrete_mathematics)#undirected_graph
- 定向图:https://en.wikipedia.org/wiki/graph_(discrete_mathematics)#directed_graph
- 无方向的加权图:https://en.wikipedia.org/wiki/graph_(discrete_mathematics)#Weighted_graph
- 定向加权图:https://en.wikipedia.org/wiki/graph_(Discrete_mathematics)#Weighted_graph
- 深度搜索:https://en.wikipedia.org/wiki/depth-first_search
- 广度首次搜索:https://en.wikipedia.org/wiki/breadth-first_search
- 无向连接组件:https://en.wikipedia.org/wiki/component_(graph_theory)
- 无向周期检测:https://en.wikipedia.org/wiki/cycle_(graph_theory)
- 定向周期检测:https://en.wikipedia.org/wiki/cycle_(graph_theory)
- 双党检测:https://en.wikipedia.org/wiki/bipartite_graph
- 拓扑排序:https://en.wikipedia.org/wiki/topology_sorting
- 紧密连接的组件(Kosaraju的算法):https://en.wikipedia.org/wiki/kosaraju%27S_ALGORITHM
- PRIM的算法(懒惰):https://en.wikipedia.org/wiki/prim%27S_ALGORITHM
- Kruskal的算法:https://en.wikipedia.org/wiki/kruskal%27S_ALGORITHM
- Dijkstra的最短路径:https://en.wikipedia.org/wiki/dijkstra%27s_algorithm
- 拓扑无环最短路径:https://en.wikipedia.org/wiki/topologice_sorting#application_to_shortest_path_finding
- 贝尔曼·福特(Bellman Ford
用法
所有组件均已测试。但是,它们未经过严格的生产标准测试。诸如链接列表和Symboltables之类的数据结构具有标准Python列表和字典等接口。