Algorithms,最全的Python算法倉(cāng)庫(kù)!
學(xué)習(xí)編程、學(xué)習(xí)Python最好的方式就是練習(xí),哪怕是新手,只要不斷地敲代碼輸出,肯定會(huì)有神效。
Python的練手項(xiàng)目很多,特別是Github上,建議不管新手、老司機(jī)都去看看。
這里推薦給大家一個(gè)Gitthub上練習(xí)的項(xiàng)目,算法倉(cāng)庫(kù)-algorithms。
https://github.com/keon/algorithms
這里面集合眾多核心算法的Python實(shí)現(xiàn),比如排序、圖計(jì)算、回溯、隊(duì)列、流計(jì)算、堆、搜索、壓縮等等。

該倉(cāng)庫(kù)支持第三方庫(kù)安裝,在python中進(jìn)行調(diào)用,非常方便。
首先使用pip進(jìn)行安裝:
pip3?install?algorithms
然后導(dǎo)入相關(guān)模塊進(jìn)行調(diào)用,比如sort模塊里的merge_sort歸并排序算法。
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)
舉幾個(gè)常見的算法案例。
1、排序算法-桶排序
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、機(jī)器學(xué)習(xí)-最近鄰插值法
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?=?d
????????????current_key?=?key
????return?tSet[current_key]
3、字符串解碼編碼
#?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?????????index?=?s.find(":",?i)
????????size?=?int(s[i:index])
????????strs.append(s[index+1:?index+1+size])
????????i?=?index+1+size
????return?strs
4、直方分布
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
個(gè)人感覺這個(gè)倉(cāng)庫(kù)里的算法很齊全,適合做練習(xí),小伙伴們可以試試。
如果小伙伴們想要所有算法腳本,可以在后臺(tái)回復(fù)【b】,領(lǐng)取打包文件。

加入知識(shí)星球【我們談?wù)摂?shù)據(jù)科學(xué)】
500+小伙伴一起學(xué)習(xí)!
·?推薦閱讀?·
盤點(diǎn)2021最佳數(shù)據(jù)可視化作品
評(píng)論
圖片
表情
