你知道什麼是演算法嗎?

2021-10-03 10:24:33 字數 2065 閱讀 6273

對於演算法的解釋,全世界的定義是不唯一的。我們給出的演算法的定義是:一系列用來解決單個或多個問題,或有執行計算功能的命令的集合。再結合上輸入與輸出,演算法就是將輸入轉換為輸出的一系列計算步驟的集合。

聽起來很拗口,對不對?

沒關係,我們可以把乙個演算法比作是乙個菜譜。如圖1-1所示,原材料就是輸入,做出來的成品即為輸出,而演算法,就是做菜過程中的複雜步驟。

圖1-1 演算法和做菜步驟的對比

再換一種方式看演算法,演算法的本質其實是數學的理論與推導。在還沒有發明求和公式之前,如何求出? 逐個數求和雖能算出答案,但過於繁雜。但反觀求和公式,無論n取多大的值,計算的步驟和繁瑣程度基本不會增加。這就是演算法存在的意義。人類在解決複雜問題時所採用的一系列特定的方法,即為演算法。

明白了什麼是演算法,再來看演算法和程式的區別。通常來說,程式指一組計算機能識別和執行,並有一定功能的指令。

後者的定義似乎和演算法很相似,但演算法和程式之間最大的區別在於程式是以計算機能夠理解的各式各樣的程式語言編寫而成的,而演算法是可以通過程式語言、圖繪、口述等人能夠理解的方式來描述的,不一定侷限於程式語言的詮釋,如圖1-2 所示。

圖1-2 演算法和程式的關係

剛才曾提過,演算法是一種以數學為本質的計算方法。然而作為方法,則必有正確(可行)、不正確(不可行)和高效、低效之分。

若乙個演算法對於每乙個恰當的輸入都以正確的輸出終止程式,則可以稱這演算法是正確的,並正確的解決了給定的問題。若演算法以不正確的輸出而終止程式,或根本無法終止程式,則這個演算法是不正確的。

但顯而易見,不是所有的演算法都可以通過輸入和輸出被正確和不正確而簡單地分為兩大類。譬如人們要**未來特定事件發生概率,而這種問題無法用結果來檢驗解決方法是正確與否。因此,演算法的正確性的檢驗也可以回溯到其本質,就是數學的檢驗,也就是說用數學來證明演算法的正確性或可行性。

對於演算法至關重要的不只有其正確性,還有它的效率。人類至今的發展,提高最迅速的可以說是計算的效率了。從原始人的結繩計數,到現在的超級計算機太湖之光,計算能力的提公升不是區區幾個數量級能說明清楚的。

但很不幸,當今計算機的運算速度不是無限快,儲存器也不是免費的,如果是,那還研究演算法幹什麼呢?所以如何高效地利用好有限的時間和空間就是演算法存在的意義。有趣的是,求解相同問題而設計的不同演算法在效率方面通常有著顯著的差異,而這些演算法效率上的差異要比在硬體或者軟體效率上的差異大得多。

回到這個求和問題中。一定程度上說,逐個數相加也可以被看作一種解決求和問題的演算法,一種簡單,低效的演算法。相反,求和公式則是一種較複雜的,高效的演算法。但如何來評判乙個演算法是否高效?時間複雜度和空間複雜度就是很好的丈量工具。時間複雜度和空間複雜度將會在後面的章節中介紹。

演算法的應用無處不在,小到普通的排序問題,大到最近舉世矚目的神經網路和深度學習,都很容易尋覓到演算法的影子。列舉幾個赫赫有名的例子:

•機器學習:

神經網路和深度學習可謂當今最熱門的演算法,而如今這兩個演算法的應用範圍有目共睹——從影象識別到alpha go,再到語音識別和機器翻譯,人工智慧一次又一次地重新整理人們對資訊學的認識。深度學習的主旨在於強調神經網路模型的深度。其在神經網路模型的基礎上減少了引數的繁雜度,更加逼近人腦工作的機制。最著名的例子便是卷積神經網路 (cnn),其極大地加強了計算機的影象識別功能。

•搜尋引擎和網路爬蟲:

搜尋引擎的核心機制其實就是網路爬蟲。為了高效地為客戶提供搜尋結果,搜尋引擎往往會先收集網際網路中成千上萬的網頁,並根據網頁中的關鍵字建立資料索引庫。搜尋引擎和網路爬蟲收集網頁的過程都會以基礎的bfs(廣度優先搜尋),dfs(深度優先搜尋)為核心思想,並針對要抓取的網頁附加更有針對性的複雜演算法,如網頁過濾演算法等。隨著搜尋技術越來越成熟,其演算法的複雜程度也逐漸提高,但溯其本源仍是簡單的搜尋演算法。剛剛提到的廣度優先搜尋、深度優先搜尋等演算法都會在後面章節中詳細講解,希望讀者們能夠認真學習掌握。

本章詳細介紹了演算法的本質、意義和應用。演算法是程式設計的核心,就像一台計算機的cpu,演算法的好壞決定了乙個系統的效率高低。同時也是谷歌、阿里等大廠主要考察的內容。修煉好演算法這門「內功」,再輔以新技術這些「招式」,才能獨霸「武林」。

你知道什麼是語法糖嗎

在我之前的學習和開發中,是比較少的聽說語法糖這個概念的,我第一次是在學習python 時聽到的,但是感覺對功能 的理解沒有什麼影響就沒有再花心思去理解。今天我在看vue 官方文件,中間去看了es6中的類,文章描述 es6中類的定義可以看做是 es5 的 語法糖,我疑惑了,到底什麼是語法糖呢。語法糖 ...

你知道什麼是LED互動屏嗎?

伴隨著科技的發展,使用者需求增加,如今的led屏不再是單純的顯示,多 互動 技術的加入,讓死板的led屏增變得生動了起來。led互動屏有多種互動方式,例如 聲控 肢體動作 雷達感應 紅外線 重力感應等,螢幕也沒有固定的放置形式,它可以是led地磚屏 led沉浸體驗館 不一樣的互動方式,展示出的效果也...

攻防世界 你知道什麼是cookie嗎?

開啟題目鏈結,提示我們檢視cookie,cookie是http協議中的乙個重要引數,對http協議不是很熟悉的friends可以看看這個 http協議其實就是這麼簡單 檢視cookie的方法有很多,可以通過瀏覽器檢視,不過建議直接檢視http報頭,以加深對http協議的理解。此處使用burpsuit...