算法是程序的靈魂,每個(gè)程序員,尤其是高手程序員,對(duì)算法的掌握應(yīng)該是如數(shù)家珍,必須要熟悉。算法非常枯燥,但是研究透了對(duì)你的程序功底非常有幫助。那么用Python如何實(shí)現(xiàn)主流的算法呢?今天推薦一個(gè)巨牛的repo,不僅把主流的算法都講了一遍還用Python代碼實(shí)現(xiàn)了,一起來看一下。 01 Github標(biāo)星近4萬 這個(gè)repo有近23個(gè)大牛一起維護(hù)的,領(lǐng)頭的是一個(gè)印度工程師!印度我好幾年前出差還是去過,當(dāng)時(shí)去的是號(hào)稱是印度的“硅谷”班加羅爾,確實(shí)軟件行業(yè)非常發(fā)達(dá)。來看一下這個(gè)Github上囊括了幾大主流的編程語言: 有興趣的小伙伴,想學(xué)習(xí)Python。私信小編“Python” 有Python,Java,C,C++,Scala和C#,發(fā)現(xiàn)Python打頭陣,非常欣慰。Python已經(jīng)作為四大主流語言地位越來越穩(wěn)了。因?yàn)槲抑饕芯縋ython,趕緊點(diǎn)進(jìn)去看一下Python的相關(guān)算法: 有興趣的小伙伴,想學(xué)習(xí)Python。私信小編“Python” 哇發(fā)現(xiàn)有近38000多顆星,要知道Python里面的最火的flask也才4.4w。一個(gè)算法的實(shí)現(xiàn)庫能這么多星,真是牛逼?。?/p> 02 主要覆蓋的算法 這么火的repo到底有啥好東西,引來這么多人圍觀點(diǎn)贊呢。介紹了很多常見的排序,而且很多用動(dòng)畫的形式表現(xiàn),代碼也寫的非常通熟易懂,非常適合入門新手,下面我挑幾種大家看一下: 排序算法-冒泡排序: 冒泡排序,有時(shí)也稱為下沉排序,是一種簡單的排序算法,它反復(fù)遍歷要排序的列表,比較每對(duì)相鄰的項(xiàng)目,如果它們的順序錯(cuò)誤則交換它們。重復(fù)傳遞列表,直到不需要交換,這表明列表已排序 來看一下它的code: 代碼還是寫的非常工整而且很嚴(yán)謹(jǐn),一共才20來行,而且作者非常貼心的考慮到了Python2和Python3兩種版本的支持,也加了很多注釋,看的出編程的習(xí)慣非常好。 堆排序 是一種基于比較的排序算法。它可以被認(rèn)為是一種改進(jìn)的選擇排序。它將其輸入劃分為已排序和未排序的區(qū)域,并通過提取最大元素并將其移動(dòng)到已排序區(qū)域來迭代縮小未排序區(qū)域。 看一下堆排序的代碼,寫的還是很巧妙的,其實(shí)就是構(gòu)造一個(gè)完全二叉樹的,即任何一非葉節(jié)點(diǎn)的關(guān)鍵字不大于或者不小于其左右孩子節(jié)點(diǎn)的關(guān)鍵字,堆分為大頂堆和小頂堆。 上面只是挑選了2個(gè)比較典型的算法實(shí)現(xiàn),還有很多經(jīng)典的排序算法,比如桶排序,雞尾酒排序,插入排序,歸并排序,選擇排序;以及搜索算法,比如線性搜索: 線性搜索或順序搜索是用于在列表中查找目標(biāo)值的方法。它按順序檢查列表中的每個(gè)元素的目標(biāo)值,直到找到匹配或直到搜索完所有元素。線性搜索在最差的線性時(shí)間運(yùn)行并且最多進(jìn)行n次比較,其中n是列表的長度。 其實(shí)就是在Python里面一個(gè)遍列列表而已: 快速選擇排序: 快速選擇是一種選擇算法,用于查找無序列表中的第k個(gè)最小元素。它與快速排序算法有關(guān)。像quicksort一樣,它是由Tony Hoare開發(fā)的,因此也被稱為Hoare的選擇算法。[1] 像quicksort一樣,它在實(shí)踐中很有效并且具有良好的平均情況性能,但是具有差的最壞情況性能。Quickselect及其變體是最常用于高效實(shí)際實(shí)現(xiàn)的選擇算法。 還有有趣的RSA加密算法: 除了上面的各種算法之外,還有很多機(jī)器學(xué)習(xí)和人工智能的代碼,比如神經(jīng)網(wǎng)絡(luò)的代碼實(shí)現(xiàn): 總之,這個(gè)repo還是不錯(cuò),有興趣的小伙伴,想學(xué)習(xí)Python。私信小編“Python” |
|