데이터 구조
이 라이브러리는 클래식 알고리즘 및 데이터 구조의 구현을 제공합니다.
조직
이 프로젝트는 두 개의 패키지, 알고리즘 및 구조로 나뉩니다. 알고리즘 패키지에는 주로 독립형 알고리즘의 구현이 포함되어 있으며 구조 패키지에는 독점적으로 작동하는 데이터 구조 및 알고리즘이 포함되어 있습니다.
알고리즘
다음은 알고리즘 패키지의 알고리즘 목록입니다.
binarysearch.py에서 :
- 표준 바이너리 검색 : 표준 바이너리 검색. https://en.wikipedia.org/wiki/binary_search_algorithm
- 첫 번째 발생 바이너리 검색 : 검색 키와 일치하는 첫 번째 요소를 찾는 경우를 제외하고 표준 바이너리 검색.
표현식에서 :
문제자에서 :
- A* 알고리즘 : 경로 찾기 알고리즘. https://en.wikipedia.org/wiki/a*_search_algorithm
- 8-puzzle 문제에 적합한 A* 알고리즘 : 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
- Merge 정렬의 변형 : 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) 찾기.
- Quick Union : 부모 링크 트리와 함께 구현 된 Disjoint 세트.
- 균형 잡힌 Quick Union : Disjoint 세트는 부모 링크 트리와 함께 구현하고 Union 밸런싱 밸런싱. O (log (n)) 찾기 및 통합에 대한 효율성.
- 경로 압축 Quick Union : Disjoint 세트는 부모 링크 트리와 함께 구현되고 경로 압축으로 보강됩니다.
- 균형 경로 압축 Quick Union : 밸런싱 및 경로 압축이있는 부모 링크 트리와 함께 구현 된 Disjoint 세트. 발견 및 노조에 대한 거의 상각 된 O (1) 효율성.
symplictable.py에서 :
- 이진 검색 트리 : 표준 BST. https://en.wikipedia.org/wiki/binary_search_tree
- RED & BLACK 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
heap.py에서 :
- 이진 힙 : 이진 힙을 사용한 우선 순위 큐의 구현. https://en.wikipedia.org/wiki/binary_heap
그래프에서 :
- 방향 그래프 : https://en.wikipedia.org/wiki/graph_(discrete_mathematics) #undired_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)
- Biparte Detection : https://en.wikipedia.org/wiki/bipartite_graph
- 토폴로지 순서 : https://en.wikipedia.org/wiki/topological_sorting
- 강력하게 연결된 구성 요소 (Kosaraju의 알고리즘) : https://en.wikipedia.org/wiki/kosaraju%27S_algorithm
- Prim 's Algorithm (Lazy) : 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
- 토폴로지 acyclic 최단 경로 : https://en.wikipedia.org/wiki/topological_sorting#application_to_shortest_path_finding
- Bellman Ford 가장 짧은 경로 : https://en.wikipedia.org/wiki/bellman%E2%80%93ford_algorithm
용법
모든 구성 요소가 테스트됩니다. 그러나 엄격한 생산 표준에 따라 테스트되지 않았습니다. 링크 된 목록 및 SymbolTables와 같은 데이터 구조에는 표준 파이썬 목록 및 사전과 같은 인터페이스가 있습니다.