0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Github上超過2.7萬星標(biāo):最全算法及Python實(shí)現(xiàn)

DPVg_AI_era ? 來源:lq ? 2019-04-29 08:40 ? 次閱讀

Github上超過2.7萬星標(biāo):最全算法Python實(shí)現(xiàn)。該項(xiàng)目的算法包括排序、搜索等經(jīng)典算法,描述較為詳細(xì),對算法原理本身、應(yīng)用場景以及實(shí)現(xiàn)過程的可視化等。

我們討論機(jī)器學(xué)習(xí)的時候,其實(shí)很多時候都是在討論算法。今天新智元向大家推薦一個好資源,用Python實(shí)現(xiàn)所有算法。該項(xiàng)目在Github上已經(jīng)獲得了超過2.7萬星標(biāo),可以說非常受歡迎了。

該項(xiàng)目主要包括兩方面內(nèi)容:算法的基本原理講解,以及Python代碼實(shí)現(xiàn),并給出了算法實(shí)現(xiàn)過程的動圖,非常直觀易懂。項(xiàng)目地址:

https://github.com/TheAlgorithms/Python

排序算法介紹及代碼實(shí)現(xiàn)

冒泡算法

冒泡排序,有時也稱為下沉排序,是一種簡單的排序算法,它反復(fù)遍歷要排序的列表,比較每對相鄰的項(xiàng)目,如果它們的順序錯誤則交換它們。重復(fù)傳遞列表,直到不需要交換,這表明列表已排序。

代碼實(shí)現(xiàn):

https://www.toptal.com/developers/sorting-algorithms/bubble-sort

桶排序算法

桶排序(Bucket sort)或所謂的箱排序,是一個排序算法,工作的原理是將數(shù)組分到有限數(shù)量的桶里。每個桶再個別排序(有可能再使用別的排序算法或是以遞歸方式繼續(xù)使用桶排序進(jìn)行排序)。桶排序是鴿巢排序的一種歸納結(jié)果。

雞尾酒排序算法

雞尾酒排序,也叫雙向冒泡排序(Bidirectional Bubble Sort)等。這是冒泡排序的一種變體。不同之處在于,冒泡排序是從低到高比較序列里的每個元素,而雞尾酒排序從兩個方向(低到高、高到低)來回排序,效率更高。

代碼實(shí)現(xiàn):

https://en.wikipedia.org/wiki/Cocktail_shaker_sort

插入排序

插入排序(英語:Insertion Sort)是一種簡單直觀的排序算法。它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。插入排序在實(shí)現(xiàn)上,通常采用in-place排序,因而在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。

代碼實(shí)現(xiàn):

https://www.toptal.com/developers/sorting-algorithms/insertion-sort

歸并排序

歸并排序(英語:Merge sort,或mergesort),是創(chuàng)建在歸并操作上的一種有效的排序算法,。1945年由約翰·馮·諾伊曼首次提出。該算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用,且各層分治遞歸可以同時進(jìn)行。

代碼實(shí)現(xiàn):

https://www.toptal.com/developers/sorting-algorithms/merge-sort

快速排序

快速排序(英語:Quicksort),又稱劃分交換排序(partition-exchange sort),簡稱快排,一種排序算法,最早由東尼·霍爾提出,用作按順序放置數(shù)組元素的系統(tǒng)方法。

代碼實(shí)現(xiàn):

https://www.toptal.com/developers/sorting-algorithms/quick-sort

堆排序

堆排序(英語:Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆是一個近似完全二叉樹的結(jié)構(gòu),并同時滿足堆積的性質(zhì):即子節(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。

代碼實(shí)現(xiàn):

https://www.toptal.com/developers/sorting-algorithms/heap-sort

基數(shù)排序

基數(shù)排序(英語:Radix sort)是一種非比較型整數(shù)排序算法,其原理是將整數(shù)按位數(shù)切割成不同的數(shù)字,然后按每個位數(shù)分別比較。由于整數(shù)也可以表達(dá)字符串(比如名字或日期)和特定格式的浮點(diǎn)數(shù),所以基數(shù)排序也不是只能使用于整數(shù)?;鶖?shù)排序的發(fā)明可以追溯到1887年赫爾曼·何樂禮在打孔卡片制表機(jī)(Tabulation Machine)上的貢獻(xiàn)。

選擇排序

選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最?。ù螅┰?,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續(xù)尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

代碼實(shí)現(xiàn):

https://www.toptal.com/developers/sorting-algorithms/selection-sort

希爾排序

希爾排序,也稱遞減增量排序算法,是插入排序的一種更高效的改進(jìn)版本。希爾排序是非穩(wěn)定排序算法。希爾排序是基于插入排序的以下兩點(diǎn)性質(zhì)而提出改進(jìn)方法的:

插入排序在對幾乎已經(jīng)排好序的數(shù)據(jù)操作時,效率高,即可以達(dá)到線性排序的效率

但插入排序一般來說是低效的,因?yàn)椴迦肱判蛎看沃荒軐?shù)據(jù)移動一位

代碼實(shí)現(xiàn):

https://www.toptal.com/developers/sorting-algorithms/shell-sort

拓?fù)渑判?/p>

在計(jì)算機(jī)科學(xué)領(lǐng)域,有向圖的拓?fù)渑判蚴瞧漤旤c(diǎn)的線性排序,使得對于從頂點(diǎn)u到頂點(diǎn)v的每個有向邊uv,u在排序中都在v之前。例如,圖形的頂點(diǎn)可以表示要執(zhí)行的任務(wù),并且邊可以表示一個任務(wù)必須在另一個任務(wù)之前執(zhí)行的約束; 在這個應(yīng)用中,拓?fù)渑判蛑皇且粋€有效的任務(wù)順序。 如果且僅當(dāng)圖形沒有定向循環(huán),即如果它是有向無環(huán)圖(DAG),則拓?fù)渑判蚴强赡艿?。任何DAG具有至少一個拓?fù)渑判颍⑶乙阎@些算法用于在線性時間內(nèi)構(gòu)建任何DAG的拓?fù)渑判颉?/p>

搜索算法

線性搜索

線性搜索或順序搜索是一種尋找某一特定值的搜索算法,指按一定的順序檢查數(shù)組中每一個元素,直到找到所要尋找的特定值為止。是最簡單的一種搜索算法。

二分搜索算法

二分搜索(英語:binary search),也稱折半搜索(英語:half-interval search),對數(shù)搜索(英語:logarithmic search),是一種在有序數(shù)組中查找某一特定元素的搜索算法。搜索過程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數(shù)組為空,則代表找不到。這種搜索算法每一次比較都使搜索范圍縮小一半。

插值搜索算法

插值查找(Interpolation Search)是根據(jù)要查找的關(guān)鍵字key與順序表中最大、最小記錄的關(guān)鍵字比較后的查找方法,它假設(shè)輸入數(shù)組是線性增加的(這個假設(shè)的精確度會影響算法的效率,但不會影響算法的正確性)。

跳躍搜索算法

跳躍搜索算法(Jump Search)跟二分查找算法類似,它也是針對有序序列的查找,只是它是通過查找比較少的元素找到目標(biāo)。當(dāng)然它需要通過固定的跳躍間隔,這樣它相比二分查找效率提高了很多。

快速選擇

快速選擇(英語:Quickselect)是一種從無序列表找到第k小元素的選擇算法。它從原理上來說與快速排序有關(guān)。與快速排序一樣都由托尼·霍爾提出的,因而也被稱為霍爾選擇算法。它在實(shí)際應(yīng)用是一種高效的算法,具有很好的平均時間復(fù)雜度,然而最壞時間復(fù)雜度則不理想??焖龠x擇及其變種是實(shí)際應(yīng)用中最常使用的高效選擇算法。與快速排序一樣,快速選擇一般是以原地算法的方式實(shí)現(xiàn),除了選出第k小的元素,數(shù)據(jù)也得到了部分地排序。

禁忌搜索

禁忌搜索(Tabu Search,TS,又稱禁忌搜尋法)是一種現(xiàn)代啟發(fā)式算法,由美國科羅拉多大學(xué)教授Fred Glover在1986年左右提出的,是一個用來跳脫局部最優(yōu)解的搜索方法。其先創(chuàng)立一個初始化的方案;基于此,算法“移動”到一相鄰的方案。經(jīng)過許多連續(xù)的移動過程,提高解的質(zhì)量。

加密算法

凱撒密碼

凱撒密碼(英語:Caesar cipher),或稱凱撒加密、凱撒變換、變換加密,是一種最簡單且最廣為人知的加密技術(shù)。它是一種替換加密的技術(shù),明文中的所有字母都在字母表上向后(或向前)按照一個固定數(shù)目進(jìn)行偏移后被替換成密文。例如,當(dāng)偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推。這個加密方法是以羅馬共和時期愷撒的名字命名的,當(dāng)年愷撒曾用此方法與其將軍們進(jìn)行聯(lián)系。

維吉尼亞密碼

維吉尼亞密碼(又譯維熱納爾密碼)是使用一系列凱撒密碼組成密碼字母表的加密算法,屬于多表密碼的一種簡單形式。維吉尼亞密碼曾多次被發(fā)明。該方法最早記錄在吉奧萬·巴蒂斯塔·貝拉索( Giovan Battista Bellaso)于1553年所著的書《吉奧萬·巴蒂斯塔·貝拉索先生的密碼》(意大利語:La cifra del. Sig. Giovan Battista Bellaso)中。然而,后來在19世紀(jì)時被誤傳為是法國外交官布萊斯·德·維吉尼亞(Blaise De Vigenère)所創(chuàng)造,因此現(xiàn)在被稱為“維吉尼亞密碼”。

置換密碼

又名取代加密法,是密碼學(xué)中按規(guī)律將文字加密的一種方式。置換密碼中可以用不同字母數(shù)為一單元,例如每一個或兩個字母為一單元,然后再作加密。密文接收者解密時需用原加密方式解碼才可取得原文本。由于拼音文字中字的組成為有限的字母,以英語為例只有26個字母,組成可能的單元數(shù)較少,因此使用置換密碼相對較為容易,而且亦可使用簡單機(jī)械進(jìn)行加密;相反,非拼音文字如中文則因單元數(shù)非常大難以使用一般加密方式,必需建立密碼本,然后逐字替換。更何況某些非拼音文字中字字皆由不同大小的字根來組字,較難轉(zhuǎn)換,因此使用置換密碼的示例比較少。

RSA加密算法

RSA加密算法是一種非對稱加密算法。在公開密鑰加密和電子商業(yè)中RSA被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當(dāng)時他們?nèi)硕荚诼槭±砉W(xué)院工作。RSA就是他們?nèi)诵帐祥_頭字母拼在一起組成的。對極大整數(shù)做因數(shù)分解的難度決定了RSA算法的可靠性。換言之,對一極大整數(shù)做因數(shù)分解愈困難,RSA算法愈可靠。假如有人找到一種快速因數(shù)分解的算法的話,那么用RSA加密的信息的可靠性就肯定會極度下降。但找到這樣的算法的可能性是非常小的。今天只有短的RSA鑰匙才可能被強(qiáng)力方式解破。到當(dāng)前為止,世界上還沒有任何可靠的攻擊RSA算法的方式。只要其鑰匙的長度足夠長,用RSA加密的信息實(shí)際上是不能被解破的。

ROT13算法

ROT13(回轉(zhuǎn)13位,rotate by 13 places,有時中間加了個連字符稱作ROT-13)是一種簡易的替換式密碼。它是一種在英文網(wǎng)絡(luò)論壇用作隱藏八卦(spoiler)、妙句、謎題解答以及某些臟話的工具,目的是逃過版主或管理員的匆匆一瞥。ROT13被描述成“雜志字謎上下顛倒解答的Usenet點(diǎn)對點(diǎn)體”。(Usenet equivalent of a magazine printing the answer to a quiz upside down.)ROT13 也是過去在古羅馬開發(fā)的凱撒加密的一種變體。

異或密碼

異或密碼是密碼學(xué)中一種簡單的加密算法,異或運(yùn)算符常作為更為復(fù)雜的加密算法的組成部分。對于其本身來說,如果使用不斷重復(fù)的密鑰,利用頻率分析就可以破解這種簡單的異或密碼。如果消息的內(nèi)容被猜出或知道,密鑰就會泄露。異或密碼值得使用的原因主要是其易于實(shí)現(xiàn),而且計(jì)算成本小。簡單重復(fù)異或加密有時用于不需要特別安全的情況下來隱藏信息。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4552

    瀏覽量

    92023
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84077
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    461

    瀏覽量

    16235

原文標(biāo)題:GitHub超2.7萬星,最全Python入門算法來了

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    盤點(diǎn)史上最全Python算法

    本文是一些機(jī)器人算法(特別是自動導(dǎo)航算法)的Python代碼合集。其主要特點(diǎn)有以下三點(diǎn):選擇了在實(shí)踐中廣泛應(yīng)用的算法;依賴最少;容易閱讀,容易理解每個
    的頭像 發(fā)表于 02-21 10:04 ?5947次閱讀

    最全PID控制算法的C語言實(shí)現(xiàn)(轉(zhuǎn))

    最近項(xiàng)目中用到PID控制算法,查了很多資料,資料上說的一塌糊涂,什么手動調(diào)節(jié)???說的和沒說一樣,對于剛接觸PID的人根本弄不明白。當(dāng)我看到《最全PID控制算法的C語言實(shí)現(xiàn)》的時候,只看
    發(fā)表于 06-01 10:53

    【技術(shù)雜談】超全 Python 速查表登上 GitHub 熱榜,標(biāo) 4600+

    Advanced Python內(nèi)容。而且還有文本文件可以下載。目前,這份資源已經(jīng)獲得4600+標(biāo),登上了GitHub趨勢榜。核心是代碼這份資源中,核心是代碼,基本沒有廢話。比如說,在
    發(fā)表于 07-17 04:00

    Python的Apriori算法和FP-Growth算法是什么

    [源碼和文檔分享]基于Python實(shí)現(xiàn)的Apriori算法和FP-Growth算法的頻繁項(xiàng)集挖掘的研究與實(shí)現(xiàn)
    發(fā)表于 06-04 12:49

    KNN分類算法python代碼實(shí)現(xiàn)

    kNN分類算法Python實(shí)現(xiàn)
    發(fā)表于 06-05 12:02

    國產(chǎn)開源,GitHub 標(biāo) 47000+

    國產(chǎn)開源,GitHub 標(biāo) 47000+| 阿司匹林出品 | AI科技大本營(ID:rgznai100)封圖 |CSDN付費(fèi)下載自視覺中國打響第一槍:占領(lǐng)高地從 PaddlePaddle 到飛槳2016 年,百度 Pa...
    發(fā)表于 07-28 07:07

    分享幾個在GitHub上嵌入式相關(guān)的開源項(xiàng)目

    關(guān)注+標(biāo)公眾號,不錯過精彩內(nèi)容來源 | 人人都是極客大家平時學(xué)習(xí)的資源可能來自不同地方,對于程序員來說,Github上高的開源項(xiàng)目值得了解并學(xué)習(xí)。今天就給大家分享幾個在
    發(fā)表于 10-27 08:10

    BP神經(jīng)網(wǎng)絡(luò)算法 python實(shí)現(xiàn)

    直接上代碼是最有效的學(xué)習(xí)方式。這篇教程通過由一段簡短的 python 代碼實(shí)現(xiàn)的非常簡單的實(shí)例來講解 BP 反向傳播算法
    發(fā)表于 12-29 14:06 ?2.1w次閱讀
    BP神經(jīng)網(wǎng)絡(luò)<b class='flag-5'>算法</b> <b class='flag-5'>python</b><b class='flag-5'>實(shí)現(xiàn)</b>

    蟻群算法python編程實(shí)現(xiàn)

    本文主要介紹了Python編程實(shí)現(xiàn)蟻群算法詳解,涉及螞蟻算法的簡介,主要原理及公式,以及Python中的
    發(fā)表于 02-02 10:36 ?7390次閱讀
    蟻群<b class='flag-5'>算法</b><b class='flag-5'>python</b>編程<b class='flag-5'>實(shí)現(xiàn)</b>

    Github上超過6.8標(biāo)最全算法Python實(shí)現(xiàn)

    冒泡排序,有時也稱為下沉排序,是一種簡單的排序算法,它反復(fù)遍歷要排序的列表,比較每對相鄰的項(xiàng)目,如果它們的順序錯誤則交換它們。重復(fù)傳遞列表,直到不需要交換,這表明列表已排序。
    的頭像 發(fā)表于 05-12 09:10 ?2852次閱讀
    <b class='flag-5'>Github</b><b class='flag-5'>上超過</b>6.8<b class='flag-5'>萬</b><b class='flag-5'>星</b><b class='flag-5'>標(biāo)</b>:<b class='flag-5'>最全</b><b class='flag-5'>算法</b>及<b class='flag-5'>Python</b><b class='flag-5'>實(shí)現(xiàn)</b>

    本文整理了關(guān)于Python資源最全的中文合集!

    本文整理了關(guān)于 Python 資源最全的中文合集!內(nèi)容如下:
    的頭像 發(fā)表于 06-15 10:56 ?1360次閱讀
    本文整理了關(guān)于<b class='flag-5'>Python</b>資源<b class='flag-5'>最全</b>的中文合集!

    Python實(shí)現(xiàn)所有算法-基本牛頓法

    Python實(shí)現(xiàn)所有算法-二分法 Python實(shí)現(xiàn)所有算法-力系統(tǒng)是否靜態(tài)平衡
    的頭像 發(fā)表于 07-13 10:40 ?1528次閱讀

    Coordula向您展示世界上超過1100個地方

    電子發(fā)燒友網(wǎng)站提供《Coordula向您展示世界上超過1100個地方.zip》資料免費(fèi)下載
    發(fā)表于 12-22 16:26 ?0次下載
    Coordula向您展示世界<b class='flag-5'>上超過</b>1100<b class='flag-5'>萬</b>個地方

    ChatGPT火爆,最全prompt工程指南登GitHub熱榜,標(biāo)4.7k!

    如何才能讓大規(guī)模語言模型輸出自己想要的結(jié)果?現(xiàn)在,一本超全超詳提示工程指南來了,GitHub標(biāo)4.7k。提示工程,可以說是玩轉(zhuǎn)ChatGPT、DALL·E 2等等這類AI模型的「必修課」。
    的頭像 發(fā)表于 02-27 09:48 ?1218次閱讀

    基于Python實(shí)現(xiàn)隨機(jī)森林算法

    機(jī)器學(xué)習(xí)算法是數(shù)據(jù)挖掘、數(shù)據(jù)能力分析和數(shù)學(xué)建模必不可少的一部分,而隨機(jī)森林算法和決策樹算法是其中較為常用的兩種算法,本文將會對隨機(jī)森林算法
    的頭像 發(fā)表于 09-21 11:17 ?1030次閱讀
    基于<b class='flag-5'>Python</b><b class='flag-5'>實(shí)現(xiàn)</b>隨機(jī)森林<b class='flag-5'>算法</b>