避不開的算法,如何吃透?

2021-01-11 騰訊網

作者 | Alekya Ragipally

譯者 | 彎月,責編 | 屠敏

頭圖 | CSDN 下載自東方 IC

出品 | CSDN(ID:CSDNnews)

以下為譯文:

當你使用搜尋引擎(例如Google Chrome、Mozilla Firefox等)的時候,後臺發生了什麼?當你詢問虛擬助手(例如Alexa、Google助手或Siri)的時候,後臺發生了什麼?它們怎麼會知道答案?為何它們會顯示正確答案?所有這些都要感謝算法。

每當你使用手機、計算機、筆記本電腦或計算器時,其實都在使用算法。

那麼,什麼是算法?

如果你想做數學運算,比如說兩個數字相乘(不使用任何電子設備),那麼你需要在紙上做乘法。你按照一定的規則獲得正確的答案。你也可以使用耗時更少的方法來做計算。這就是算法。

算法是為執行特定的任務而設計的一組指令。

有些算法很簡單,而有些則非常複雜,具體取決於你要實現的目標。

算法的歷史

了解歷史總是有好處,因為歷史可以幫助你更好地理解主題,並了解何時使用這些知識。

「算法」一詞源自九世紀波斯數學家Muhammad Ibn Musa Al-Khwarizmi(代數之父),拉丁語為Algoritmi。最初算法被稱為Algorismus。15世紀後期,改名為Algorithmus(源自希臘語Arithmetic)。現代英語中的Algorithm一詞是於19世紀引入的。

算法在中國古代文獻中稱為「術」,最早出現在《周髀算經》、《九章算術》。特別是《九章算術》,給出四則運算、最大公約數、最小公倍數、開平方根、開立方根、求素數的埃拉託斯特尼篩法,線性方程組求解的算法。三國時代的劉徽給出求圓周率的算法:劉徽割圓術。

1842年,Ada Lovelace首次編寫了計算引擎的算法,因此許多人常常稱她為世界上第一位電腦程式員。她為巴貝奇分析機(自動計算的機械計算機)編寫了求解伯努利微分方程的算法(巴貝奇分析機由計算機之父Charles Babbage開發)。

1936年,Alan Turing的圖靈機首次提出了第一個以現代形式表示的算法。

如何表達算法?

表達算法的方法多種多樣,例如自然語言、偽代碼、流程圖、程式語言、動態圖表、控制表等等。

使用自然語言表達算法不夠清晰,因此很少用於複雜或技術算法。偽代碼、流程圖、drakon圖和控制表是表達算法的結構化方法,因為與自然語言相比,它們可以避免許多歧義。程式語言旨在以可由計算機執行的形式表達算法。

在計算機系統中,算法是由軟體開發人員以他們選擇的任何程式語言編寫的邏輯。但是,在設計算法時,我們需要記住一些規則。其中包括:

輸入:算法至少需要一個或多個輸入值。如果沒有給出輸入,那麼算法將產生什麼輸出呢?

輸出:算法至少應產生一個輸出。如果沒有產生任何結果,則無需設計算法。

效率:算法應該保證高效利用計算和內存資源。產生的輸出應該又正確又快。

簡單性:算法不應過於複雜。

可擴展性:算法必須能夠在不更改核心邏輯的情況下進行擴展。

有限性:算法必須在有限步驟後終止。假設輸入錯誤的情況下,算法在第一步就終止,我們將永遠無法得知算法有什麼問題。而且,算法也不能陷入無限循環。

不依賴於程式語言:算法必須與語言無關,也就是說,它必須是可以用任何一種語言都可以實現的簡單指令,但是無論任何語言,輸出都應當相同。

下面,我們來構建一個簡單的算法:兩個數字的加法(且滿足上述要求)。

第1步:開始;

第2步:聲明變量num1,num2和sum;

第3步:讀取值num1和num2;

第4步:將num1和num2相加,然後將值賦給sum。

第5步:顯示和;

第6步:停止。

下面,為了測試這個算法,我們使用一種程式語言來實現它,我選擇用Java語言來實現,你可以任意選擇其他語言。

public class Addition

{

public static void main(String[] args) {

int num1, num2, sum;

Scanner sc = new Scanner(System.in);

System.out.println(「Enter First Number: 「);

num1 = sc.nextInt();

System.out.println(「Enter Second Number: 「);

num2 = sc.nextInt();

sc.close();

sum = num1 + num2;

System.out.println(「Sum of two numbers: 「+sum);

}

}

輸出如下:

我們的算法運作良好,且滿足上述要求。

算法必須高效。算法的效率取決於時間和空間。一個好的算法佔用的時間更少,佔用的空間也更少,我們無法時刻兼顧兩者。如果減少時間,則則空間可能會增加,反之亦然。因此,我們必須妥協一方。算法的空間複雜度表示算法運行時佔用或需要的總空間。時間複雜度是指算法花完成任務所需的操作數。以最少操作數執行任務的算法就是最有效的算法。此外,算法花費的時間還取決於計算機的計算速度,但是在我們考慮算法的效率率時,通常不會考慮這些外部因素。衡量算法效率的一種方法是測量算法在不同輸入下找到答案所需的操作次數。

算法的種類

遞歸算法:通過重複將問題分解為同類的子問題而解決問題。

分治算法:把一個複雜的問題分成兩個或更多的相同或相似的子問題,直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。

動態規划算法(又名動態優化算法):記住過去的結果,以備將來使用。與分治算法相似,這種算法可以將複雜的問題分解相對簡單的子問題,然後將解決方案保存起來,以便下次需要同一個子問題解之時直接使用,而無需再次重新計算。

貪婪算法:在每一步選擇中都採取在當前狀態下最好或最優(即最有利)的選擇,從而希望得出結果是最好或最優的算法。該算法不能保證最終獲得最佳解決方案。

暴力算法:簡單明了,嘗試所有的可能性,直到找到滿意的解決方案為止。

回溯算法:嘗試分步地去解決一個問題。如果發現其中某一步的解決方案失敗,則後退一步或幾步,重新開始尋找解決方案。

如今,幾乎每個領域都使用算法,例如數據科學、機器學習、農業、科學、運輸等。算法是每個應用程式(Google Chrome與Mozilla Firefox、Uber與Ola)最大的不同之處,例如Google Chrome和Mozilla Firefox都是搜尋引擎應用程式,它們提供相同的結果,但是結果的順序有所不同,這是因為二者使用了不同的排序算法。Google的排序算法與Firefox不同。

算法無處不在,並將繼續傳播,算法讓我們的生活更加輕鬆,但我們還需要考慮一些問題,例如,

當有一天數據和預測模型統治世界,那麼我們就會喪失人性和判斷力。

隨著更智能、更高效的算法逐步取代許多的人類活動,失業人數將上升。

21世紀,算法就像魔術一樣,我們可以解釋其背後的原理以及如何創建網絡等,卻無法機械地解釋為什麼這些算法會產生特定的輸出。而這僅僅是個開始。

原文:https://medium.com/@alekya3/what-is-an-algorithm-everything-you-need-to-know-about-algorithms-79bb99cb0c11

本文為 CSDN 翻譯,轉載請註明來源出處。

更多精彩推薦

蘋果或在 WWDC 宣布放棄英特爾轉向自研 5nm ARM 晶片,這次時機成熟了?

國產資料庫技術全面破冰,金融核心系統打破國外巨頭壟斷指日可待

Linux 之父怒刪工程師提交的補丁,稱「太蠢了」網友:懟得好!

乾貨!3 個重要因素,帶你看透 AI 技術架構方案的可行性!

乾貨 | 大白話徹底搞懂 HBase RowKey 詳細設計

熱評 | 警惕新基建熱潮中的區塊鏈項目爛尾

你點的每個「在看」,我都認真當成了喜歡

相關焦點

  • 【短訊】Dropbox、微軟OneDrive打不開,國內用戶該如何應對?
    繼Dropbox「無法登陸」引起軒然大波之後,微軟OneDrive雲存儲應用又由於DNS汙染遭遇服務屏蔽,再次引發各大媒體關於海外雲存儲服務提供商服務保障能力和數據安全承諾的激烈爭論,與此同時,正在使用上述國外第三方雲服務的國內用戶正面臨著一個避無可避的尷尬選題,即海外雲存儲軟體供應商頻出問題,國內用戶又該如何從容面對?
  • 一書吃透機器學習!《機器學習基礎》來了,教材PDF、PPT可下載
    銅靈 發自 凹非寺量子位 出品 | 公眾號 QbitAI不出家門,也能學習到國外高校的研究生機器學習課程了。全書是對機器學習的一般性知識介紹,也是不少大學的研究生教材,側重於算法的分析和理論。書中的內容基本上涵蓋了機器學習當前階段的熱門基礎概念,同時還附上了算法論證所需的理論基礎和工具。
  • 退休老教授:1~6年級口算訓練,孩子吃透,大腦堪比「計算器」!
    退休老教授:1~6年級口算訓練,孩子吃透,大腦堪比「計算器」!數學,考察的就是數字之間的學問,小學數學主要就是計算以及推理,從簡單的加減乘除到九九乘法表,包括一些課內外的簡便算法的口訣,都是為了給孩子的學習減輕壓力,中小學階段,計算是放在首位的。
  • FineBI:數據挖掘的車,開了
    下面兩個圖,紅線是一組數據,藍線是一組數據,如何用一條直線把兩組數據分開呢?(單層神經網絡只能畫出n-1維的超平面,所以二維數據只能劃出一條線)答案就是增加一層神經元,將這個二維的空間的數據,通過矩陣乘法,運動到三維線性空間,形成下圖所示的數據。
  • 「鬼才」地理老師:苦學3年地理,不如吃透這份順口溜,高分不愁
    「鬼才」地理老師:苦學3年地理,不如吃透這份順口溜,高分不愁!地理的知識點比較繁多冗雜,尤其是初中階段的地理,涉及到的面很廣,七大洲五大洋,地球的各個板塊運動,以及經緯度的學習和計算,都是需要建立在靈活的轉換能力之上的,就拿地圖來說,如何看懂地圖也是一個重難點。
  • 開根號算法的證明——逆運算
    求一個整數的平方根,即開根號的計算方法如下圖所示:       由於我們知道開根號是平方的逆運算,所以我們在探討開根號算法時需要從平方的角度考慮
  • 軟體工程專業工資「薪酬」如何?HR:月薪10K+,三年後翻倍上漲
    軟體工程專業工資「薪酬」如何?HR:月薪10K+,三年後翻倍上漲軟體工程專業畢業之後能拿到什麼樣的「薪酬」?這個問題很多人都問過內容匠人,畢竟內容匠人是大學讀的是軟體工程專業。不過軟體工程專業的薪酬到底怎麼樣,匠人不知道,畢竟現在從事了新媒體行業。
  • 數學單位換算,孩子在四年級不吃透,期末難上90
    為了幫助廣大家長們更好的理清小學數學的知識體系,掌握小學數學知識脈絡,小編老師特地整理了一份小學四年級數學單位換算專題訓練,建議家長為孩子列印出來全部都吃透。對於以後的學習也都是百利而無一害的!文中資料「完整版資料或word文檔」如何獲取呢?
  • 天官賜福:靈文提醒謝憐,遇花城能避則避,網友:大可不避
    本話被刷屏的「大可不避」是什麼意思?來一起回顧下這一話的內容吧。《天官賜福》「鬼新郎」一案終於了結,天界裴將軍和宣姬將軍倆人之間的恩怨情仇,造就了如今的與君山案,讓很多無辜的待嫁女孩都死於非命。但宣姬將軍死後化為的這隻鬼為什麼能夠這麼囂張跋扈,卻是因為她有給自己撐腰的鬼王在。這位就是「四害」之一的青鬼戚容。
  • 「大」九九乘法口訣表,孩子吃透,運算速度堪比計算機!
    「大」九九乘法口訣表,孩子吃透,運算速度堪比計算機!數學是一門十分注重基礎的學科,而小學階段正是孩子打好基礎的最佳時期!很多孩子數學成績不好,其實根本原因就在於沒有找到合適的學習方法,對數學學習的興趣不高。小學數學學習中,最需要孩子掌握的就是計算能力,很多孩子基本的概念和公式,都能學懂,但是運算能力總是會拖後腿。其實,只要掌握正確的學習方法,計算運用也是很簡單的。
  • 退休老教授整理:初中「物態變化」習題+答案,吃透中考輕鬆考95+
    退休老教授整理:初中「物態變化」習題+答案,吃透中考輕鬆考95+物理是初中階段非常重要的一門課程。所謂初一不分上下,初三天上地下。主要就是看初二這一年同學們是如何去學習的,如果沒有掌握一個適合自己的學習方法,初二開始成績就很容易下滑。
  • 如何用免費GPU學習AI算法?這篇算法資源大集錦別錯過
    如何獲得免費算力卡我之前寫過一篇文章關於如何薅百度AI Studio的GPU羊毛的文章, 詳細的大家可以參考一下。不過距離上次薅羊毛到現在也三個月過去了,百度的免費GPU算力政策發生了變動,而且是往更好的變動。之前是每日運行項目送12個小時算力,現在是每天送24小時!我的天,這意味著可以24/7的不間斷的跑,用之不竭啊!
  • 算法習得並強化了人類偏見嗎?如何測量、分析算法中的偏見
    雖然算法在提高決策準確性方面表現出了相當大的潛力,但在某些情況下,算法可能會對特定社會群體(如女性、黑人)施加不公平對待。例如隨著深度學習和神經網絡等一系列算法的出現,人們發現本應毫無偏見的計算機也習得了人類社會中的各種偏見。在計算機視覺領域,不同性別用戶發布的圖片內容不同,導致視覺語義標註中也存在性別偏見,如在廚房中的人物總是被識別為女性。
  • 都是常考題,吃透考試成績不下95!
    都是常考題,吃透考試成績不下95!很多人都問老師,物理要如何才能拿高分,今天老師就說說自己認為物理能拿高分的原因吧。上課認真聽講,課後複習鞏固知識點這些都是基本的學習任務。剩下的就是刷題,加深知識點印象。
  • 初中數學:經典公式定理(全歸納),掌握吃透,3年考試不慌張!
    初中數學:經典公式定理(全歸納),掌握吃透,3年考試不慌張!上了初中之後,數學這門學科也有了難度,要學習的知識點增加了,學科知識點的難度也增加了,如果同學們的學習方法不改變,或者還沒有把小學的學習思維轉變過來,那麼成績也是很難有所提升的。
  • 如何優雅地與HR談薪?隱私比較算法了解一下
    我現在有點糾結,因為我不太了解他們平時會給到多少,說得太多了害怕他們對我印象不好直接把我刷了,說得低了的話……我室友王二麻子平時不太上課都拿到了一份工資不低的Offer。如果公司真的按照我的想法給我工資的話,根據低工資給我發Offer也太不甘心了,現在很糾結該如何與HR談論薪資問題。不過,我憑藉著我海量的知識儲備找到了一個很好的辦法。
  • 20個常考題型,吃透一分不丟
    所以,吃透好高一到高三化學的實驗知識點是高中化學提高成績最大的關鍵!縱觀近三年高考化學的題型,其實最難得分的實驗題無非也就怎麼幾類!而且整個高中化學的實驗題並不多,也就20個常考題型!所以,吃透好基礎知識點,對於化學實驗的提分是最大的關鍵!
  • 2020年,這幾件詭異事,我們都避不開。「一年三大,神鬼都怕」!
    2020年,這幾件詭異事,我們都避不開。今年會有兩個春節,五個神奇的星期六。更神奇的是農村流傳的「一年三大,鬼神怕」的老話。在農村有一些古老的諺語,它們總是給人一種被神秘面紗覆蓋的感覺。簡而言之,我不知道它們是什麼意思。有些詞確實令人費解。
  • 三角函數專題:誘導公式專項技巧分析,讀懂吃透不給數學埋隱患!
    三角函數,作為標準的幾何函數,在歷年的高考試卷中,這一專題已經成為了每年高考的必考點,所以這也就意味著同學們是必須要掌握的內容,如果沒有吃透的話,同學們想要學習其它章節內容是非常吃力的,因為這一章節跟其它章節是有千絲萬縷的關係,可以說這一章節起到的是承上啟下的作用,由此同學們可以看出這一章節的重要性了
  • 如何實現算法中的公平性
    這樣的循環從本質上看形成了「自證預言」 (self-fulfilling prophecy)」,即:歷史不公正 → 訓練數據 → 實際應用中的算法偏差由此引發了一系列的棘手問題。我們是否應該刪除那些存在問題的變量?如何確定某個特徵會導致歧視性結果?是否需要設計一個能給出「歧視性」閾值的指標?