Home > Article > Backend Development > Algorithms, the most comprehensive Python algorithm warehouse
The best way to learn programming and Python is to practice. Even if you are a novice, as long as you keep typing code and output, it will definitely be effective.
There are many Python training projects, especially on Github. It is recommended that both novices and experienced users check it out.
Here is a project recommended for everyone to practice on Gitthub, algorithm warehouse-algorithms.
https://github.com/keon/algorithms
It contains Python implementations of many core algorithms, such as sorting, graph computing, backtracking, queue, stream computing, heap, search, Compression and so on.
#This warehouse supports the installation of third-party libraries and calls them in python, which is very convenient.
First use pip to install:
pip3 install algorithms
Then import relevant modules to call, such as the merge_sort merge sorting algorithm in the sort module.
from algorithms.sort import merge_sort if __name__ == "__main__": my_list = [1, 8, 3, 5, 6] my_list = merge_sort(my_list) print(my_list)
Cite a few common algorithm cases.
def bucket_sort(arr): ''' Bucket Sort Complexity: O(n^2) The complexity is dominated by nextSort ''' # The number of buckets and make buckets num_buckets = len(arr) buckets = [[] for bucket in range(num_buckets)] # Assign values into bucket_sort for value in arr: index = value * num_buckets // (max(arr) + 1) buckets[index].append(value) # Sort sorted_list = [] for i in range(num_buckets): sorted_list.extend(next_sort(buckets[i])) return sorted_list def next_sort(arr): # We will use insertion sort here. for i in range(1, len(arr)): j = i - 1 key = arr[i] while arr[j] > key and j >= 0: arr[j+1] = arr[j] j = j - 1 arr[j + 1] = key return arr
import math def distance(x,y): """[summary] HELPER-FUNCTION calculates the (eulidean) distance between vector x and y. Arguments: x {[tuple]} -- [vector] y {[tuple]} -- [vector] """ assert len(x) == len(y), "The vector must have same length" result = () sum = 0 for i in range(len(x)): result += (x[i] -y[i],) for component in result: sum += component**2 return math.sqrt(sum) def nearest_neighbor(x, tSet): """[summary] Implements the nearest neighbor algorithm Arguments: x {[tupel]} -- [vector] tSet {[dict]} -- [training set] Returns: [type] -- [result of the AND-function] """ assert isinstance(x, tuple) and isinstance(tSet, dict) current_key = () min_d = float('inf') for key in tSet: d = distance(x, key) if d < min_d: min_d = d current_key = key return tSet[current_key]
# Implement the encode and decode methods. def encode(strs): """Encodes a list of strings to a single string. :type strs: List[str] :rtype: str """ res = '' for string in strs.split(): res += str(len(string)) + ":" + string return res def decode(s): """Decodes a single string to a list of strings. :type s: str :rtype: List[str] """ strs = [] i = 0 while i < len(s): index = s.find(":", i) size = int(s[i:index]) strs.append(s[index+1: index+1+size]) i = index+1+size return strs
def get_histogram(input_list: list) -> dict: """ Get histogram representation :param input_list: list with different and unordered values :return histogram: dict with histogram of input_list """ # Create dict to store histogram histogram = {} # For each list value, add one to the respective histogram dict position for i in input_list: histogram[i] = histogram.get(i, 0) + 1 return histogram
I personally feel that the algorithms in this warehouse are very complete and suitable for practice. Friends can try it.
The above is the detailed content of Algorithms, the most comprehensive Python algorithm warehouse. For more information, please follow other related articles on the PHP Chinese website!