Home  >  Article  >  Backend Development  >  Algorithms, the most comprehensive Python algorithm warehouse

Algorithms, the most comprehensive Python algorithm warehouse

WBOY
WBOYforward
2023-06-03 08:46:031437browse

​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.

Algorithms, the most comprehensive Python algorithm warehouse

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.

Algorithms, the most comprehensive Python algorithm warehouse

#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.

1. Sorting algorithm-Bucket sort

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

2. Machine learning-nearest neighbor interpolation method

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]

3. String decoding encoding

# 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

4 . Histagonal distribution

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!

Statement:
This article is reproduced at:51cto.com. If there is any infringement, please contact admin@php.cn delete