<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          歷史上的第一個算法,竟然至今還能用!

          共 3326字,需瀏覽 7分鐘

           ·

          2021-02-02 10:11

          ↑↑↑點擊上方藍字,回復資料,10個G的驚喜

          算法一直是程序員們“難啃的骨頭”。但早在計算機被發(fā)明以前,人們對于算法就已經研究了很長的時間。


          算法歷史上的每一個“第一次”,都為計算機的發(fā)展帶來了重大影響。那算法為什么是計算機程序的靈魂?其實可以從它的發(fā)展史中略窺一二。


          異步君將帶領大家從算法的每個“第一次”開始,了解“好”算法的性質,還會送給大家一些算法的基礎學習方法!


          1

          算法的每一個“第一次”


          算法概念的第一次被提出


          自古老的公元前1世紀開始,《周髀算經》就作為中國最古老的天文學和數學著作,在算法的歷史上寫下了濃墨重彩的一筆。


          作為算經的十書之一,《周髀算經》采用最簡便可行的方法確定天文歷法,揭示日月星辰的運行規(guī)律,囊括四季更替,氣候變化,包涵南北有極,晝夜相推的道理。為后來者的生活作息提供了有力保障。


          經過幾個世紀的發(fā)展,到公元9世紀,波斯數學家al-Khwarizmi第一次在數學上提出了“算法”這個概念——演算法(algorithm)。他提出的算法概念,仍舊沿用至今:


          1.算術運算


          指按照規(guī)定的法則和順序對式題或算式進行運算,并求出結果的過程。包括:加法、減法、乘法、除法、乘方、開方等幾種運算形式。


          運算和計算略有區(qū)別,計算是指把橫式中的數按運算符號和規(guī)定的順序求得結果,可以按運算法則,也可以按口算或其他簡便的方式直接求得結果。而運算則是指求得結果的過程。


          2.關系運算


          關系的基本運算有兩類:一類是傳統(tǒng)的集合運算(并、差、交等),另一類是專門的關系運算(選擇、投影、連接、除法、外連接等),有些查詢需要幾個基本運算的組合,要經過若干步驟才能完成。


          3.邏輯運算


          邏輯運算又稱布爾運算。布爾用數學方法研究邏輯問題,成功地建立了邏輯演算。他用等式表示判斷,把推理看作等式的變換。這種變換的有效性不依賴人們對符號的解釋,只依賴于符號的組合規(guī)律 。這一邏輯理論人們常稱它為布爾代數。


          歷史上第一個算法


          公元前330年,被人們稱為“幾何之父”的歐幾里得出生了。在歐幾里得生活的那個時期,幾何學存在一個很大的缺點和不足,就是缺乏系統(tǒng)性。


          這一時期的古希臘幾何學,大多數是片斷、零碎的知識,公理與公理之間、證明與證明之間并沒有什么很強的聯(lián)系性,更不要說對公式和定理進行嚴格的邏輯論證和說明。


          于是歐幾里得下定決心,要在有生之年完成對幾何學的系統(tǒng)化理論化。由此,經過無數個日夜的撰寫,人類史上第一個算法——歐幾里得算法誕生了!


          對現在的計算機行業(yè)來說,歐幾里得算法是目前最經典的幾大算法之一。


          歷史上的第一個算法程序


          19世紀80年代,“軟件之母”Ada Byron為巴貝奇分析機編寫了求解伯努利方程的程序。這是人類史上的第一個算法程序。?


          巴貝奇分析機


          Ada關于算法的研究實現了計算機科學的本質性飛躍。在她去世一百年之后的1953年,她之前所翻譯《分析機概論》留下的筆記被重新公布,再一次震驚了世人。人們因此認為,Ada對現代計算機與軟件工程造成了重大影響。


          從現在的觀點來看,Ada首先為了計算制作了“算法”,然后制作了“程序設計流程圖”,這個珍貴的計劃被認為是“第一件計算機程序”。


          “軟件之母”Ada Byron


          作為世界上的第一位程序員,Ada為編程的發(fā)展做出了極大的貢獻。


          第一次解決算法定義的難題


          進入20世紀,算法得到了進一步的巨大發(fā)展。這個世紀,英國數學家圖靈提出了著名的圖靈論題,并提出一種假想的計算機的抽象模型,這個模型被稱為圖靈機。


          圖靈機的構造


          所謂的圖靈機就是指一個抽象的機器,它有一條無限長的紙帶,紙帶分成了一個一個的小方格,每個方格有不同的顏色,有一個機器頭在紙帶上移來移去。


          機器頭有一組內部狀態(tài),還有一些固定的程序。每個時刻,機器頭都要從紙帶上讀入一個方格信息,然后結合內部狀態(tài)查找程序表,再根據程序輸出信息到紙帶方格上,并轉換自己的內部狀態(tài)進行移動。


          雖然圖靈機十分地簡單,但它可以用來模擬任何算法。圖靈機對人們使用紙筆進行數學計算的過程進行了抽象,實現了用機器代替人類進行數學計算。圖靈機的出現,解決了算法定義的難題。


          算法是計算機程序的靈魂,掌握了算法,就可以離開發(fā)出優(yōu)秀的程序更近一步。


          2

          “算法+數據結構=程序”


          說到算法與編程的關系,異步君就必須向大家介紹一位傳奇人物:Nicklaus Wirth。


          作為編程界的“Pascal之父”,Nicklaus Wirth有一句在計算機領域人盡皆知的名言:“算法+數據結構=程序”。


          憑借著這句名言,Nicklaus Wirth在1984年拿到了圖靈獎的獎項。因為這個公式對計算機科學的影響程度,足以類似物理學中愛因斯坦的“E=MC^2”——僅用一個公式就展示了程序的本質。


          Nicklaus Wirth


          Nicklaus Wirth于1934年在瑞士北部的溫特圖爾出生,其父瓦爾特是一位地理學教授。Wirth小時候就喜歡動手動腦,他的最大愛好就是組裝飛機模型。


          1960年,在加拿大萊維大學深造的Wirth獲得了碩士學位。取得碩士學位的他并不滿足,隨后便進入加州大學伯克利分校,于1963年獲得博士學位。


          在斯坦福大學成功的開發(fā)出Algol W以及PL360后,愛國心極強的Nicklaus Wirth于1967年回到祖國瑞士,第二年在他的母校蘇黎世工學院,他創(chuàng)建與實現了Pascal語言——當時世界上最受歡迎的語言之一。


          Pascal語言算得上是一種經典的算法語言。而算法的主要目的在于為人們提供閱讀了解所執(zhí)行的工作流程與步驟。那么,什么樣的算法才算是“好”的算法?異步君在這里提煉了幾個性質:


          (1)正確性:正確性是指算法能夠滿足具體問題的需求,程序運行正常,無語法錯誤,能夠通過典型的軟件測試,達到預期的需求。


          (2)易讀性:算法遵循標識符命名規(guī)則,簡潔易懂,注釋語句恰當適量,方便自己和他人閱讀,便于后期調試和修改。


          (3)健壯性:算法對非法數據及操作有較好的反應和處理。例如,在學生信息管理系統(tǒng)中登記學生年齡時,若將21歲誤輸入為210歲,系統(tǒng)應該提示出錯。


          (4)高效性:高效性是指算法運行效率高,即算法運行所消耗的時間短。算法時間復雜度就是算法運行需要的時間。


          好的算法,可以讓我們開發(fā)程序達到事半功倍的效果。那么我們應該如何學好算法呢?


          3

          如何學好算法


          隨著科技的發(fā)展,算法已經逐漸滲透在各行業(yè)內,是一個有著優(yōu)秀前景的專業(yè)領域。


          怎樣學好算法?異步君在這里為大家準備了一些學習算法的入門路徑


          算法工程師必備技能


          1.至少懂一門語言:C/C++/java/python/R;


          2. 熟練運用各種常用算法和數據結構,有獨立的實現能力;


          3.熟悉數據挖掘算法;


          4.熟悉機器學習相關知識理論。


          加分項:具有較為豐富的項目實踐經驗。


          大家看到這里,肯定帶一個疑惑:是應該直接學習算法嗎?


          萬丈高樓平地起,任何高深的算法都要從基礎算法學起,不可能一口吃個胖子。


          所以,初入門的你學習算法還是要從基礎開始:


          算法的基礎學習步驟


          1.首先學習一門語言


          例如 C/C++/Java/python,初學者學 C++比較普遍。


          2.學數據結構


          數據結構書有很多,但是有些教材晦澀難懂,建議看圖解多,通俗易懂的書,推薦《趣學數據結構》。

          3.學算法


          不要直接看《算法導論》,大量證明會讓你崩潰。


          推薦《趣學算法》,有問題分析,完美圖解,偽碼詳解,實戰(zhàn)演練,適合初學者快速掌握經典算法。


          程序的靈魂是算法。軟件開發(fā)中,選擇算法可以更快更好地實現功能。因此,程序員唯有掌握算法,才能輕松地駕馭程序開發(fā)。


          也可以加一下老胡的微信
          圍觀朋友圈~~~


          推薦閱讀

          (點擊標題可跳轉閱讀)

          我愛線代,線代使我快樂

          麻省理工學院計算機課程【中文版】

          【清華大學王東老師】現代機器學習技術導論.pdf

          機器學習中令你事半功倍的pipeline處理機制

          機器學習避坑指南:訓練集/測試集分布一致性檢查

          機器學習深度研究:特征選擇中幾個重要的統(tǒng)計學概念

          老鐵,三連支持一下,好嗎?↓↓↓

          瀏覽 87
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中国黄色电影一级片 | 婷婷亚洲综合 | 亚洲无码在线视频观看 | 青娱乐在线观看 | 精品人伦一区二区三区蜜桃网站 |