Metadata-Version: 2.4 Name: Python-Algorithm-pyal Version: 1.4.2 Summary: PYthon Algorithm Library (pyal) targets at providing a python version substitue of STL in C++, such as linked list, tree map, and other data structures and popular algorithms. Home-page: https://github.com/SummerRainET2008/PYthon_Algorithms_Library Author-email: tianxia0209@gmail.com Classifier: Programming Language :: Python :: 3 Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Requires-Python: >=3.8 Description-Content-Type: text/markdown # PYthon Algorithms Library (pyal) Unlike the STL in C++ which provides misceneous data structures, Python does not have some important structures, like `linked list`, `tree map`. This library aims to provide a python counterpart of C++ STL. # 1. Install ```bash python3 -m pip install Python-Algorithm-pyal psutil pytz ``` # 2. Examples [github](https://github.com/SummerRainET2008/PYthon_Algorithms_Library) Balanced search tree based map, ```TreeMap``` ```python import pyal def main(): tree_map = pyal.TreeMap() data = [(0, "a"), (1, "b"), (2, "c"), (3, "d"), (4, "e"), (5, "f")] for key, value in data: tree_map[key] = value key = -1 value = tree_map.get(key) if value is None: print(f"key={key} does not exist") key = 0 print(f"key={key}, value={tree_map[key]}") key = 1 node = tree_map.lower_bound(key) print(f"lower_bound({key=}): {node.get()=}") node = tree_map.upper_bound(key) print(f"upper_bound({key=}): {node.get()=}") print(f"min key: {tree_map.key_list_begin().get()}") print(f"max key: {tree_map.key_list_end().prev().get()}") ``` Output ``` key=-1 does not exist key=0, value=a lower_bound(key=1): node.get()=1 upper_bound(key=1): node.get()=2 min key: 0 max key: 5 ``` # 3. Popular data structures and algorithms. Please check [github](https://github.com/SummerRainET2008/PYthon_Algorithms_Library) for all examples. * ### Tree >* TreeMap [example](doc/example_TreeMap.md) > * ___Balanced___ binary search tree. > * ___insert___ & ___delete___: O(log N) > * ___get___: O(1) >* DynamicHeap [example](doc/example_DynamicHeap.md) > * ___update___ & ___deletion___: O(log N) >* MinHeap, MaxHeap [example](doc/example_MinHeap.md) >* DisjointSet [example](doc/example_DisjointSet.md) * ### List > * LinkedList [example](doc/example_LinkedList.md) > * Queue [example](doc/example_Queue.md) > * Dequeue [example](doc/example_Deque.md) > * Stack [example](doc/example_Stack.md) > * LRUCache [example](doc/example_LRUCache.md) > * ___get___ & ___set___: O(1) > * LFUCache [example](doc/example_LFUCache.md) > * `get` & `set`: O(1) * ### String >* search_KMP >* search_multipatterns > * todo * ### Graph > * Graph > * Dijkstra > * topological_traversal * ### Common useful functions > * `binary_search` > * General binary search, binary_search(sorted_data, from, to, user_func), where user_func(x) defines the data as [False, ..., False, True, ..., True], this function returns the first position of 'True'. > * Many practical problems can be converted to this form, like binary_find, lower_bound, upper_bound, peak position in a rotated sorted array and etc. > * `is_none_or_empty` > * `histogram_ascii` > * `is_sorted` > * `unique` > * `cmp` > * `split_data_by_func` > * `eq` > * `discrete_sample` > * `group_by_key_fun` > * `top_n` > * `clamp` > * `argmax` > * `argmin` > * `make_list` > * `swap` > * `rotate` > * `copy_to` > * `kth_smallest_element` > * `lower_bound` > * `upper_bound` > * `reverse_in_place` > * `sort_in_place` > * `find_first_if` > * `find_last_if` > * `next_permutation` > * `prev_permutation` > * `factorial` > * `combinatorial_number` > * `permutation_number` > * `combinations_with_duplicate` > * `longest_common_substr` > * `top_k_similar`