什麼是計算機算法,它們是如何工作的?

已發表: 2022-01-29

除非您對數學或編程感興趣,否則“算法”這個詞對您來說可能是希臘語,但它是您閱讀本文所使用的所有內容的組成部分之一。 這是對它們是什麼以及它們如何工作的快速解釋。

免責聲明:我不是數學或計算機科學老師,所以並非我使用的所有術語都是技術性的。 那是因為我試圖用簡單的英語來解釋所有對數學不太熟悉的人。 話雖如此,其中涉及一些數學,這是不可避免的。 數學極客,請隨時在評論中更正或更好地解釋,但請保持簡單,以便我們中間不喜歡數學。

圖像由伊恩 Ruotsala

什麼是算法?

“算法”這個詞的詞源類似於“代數”,只是它指的是阿拉伯數學家花剌子模本人(只是一個有趣的花絮)。 對於我們當中的非程序員來說,算法是一組指令,它們接受輸入 A 並提供輸出 B,以某種方式更改所涉及的數據。 算法有廣泛的應用。 在數學方面,它們可以幫助從數據集中的點計算函數,以及更高級的東西。 除了用於編程本身之外,它們還在文件壓縮和數據加密等方面發揮著重要作用。

一套基本指令

假設您的朋友在雜貨店與您見面,而您正在引導他走向您。 你會說“從右邊的門進來”、“從左邊的魚區經過”和“如果你看到奶製品,你就經過了我”。 算法就是這樣工作的。 我們可以使用流程圖來說明基於我們提前知道或在過程中發現的標準的說明。

(圖片標題為“破冰例程” 編輯:Trigger 和 Freewheel 提供)

廣告

從一開始,你就會沿著這條路走下去,根據發生的情況,你會按照“流程”到達最終結果。 流程圖是可視化工具,可以更容易理解地表示計算機使用的一組指令。 同樣,算法有助於對更多基於數學的模型做同樣的事情。

圖表

讓我們用一個圖表來說明我們可以給出方向的各種方式。

我們可以將此圖表示為所有點之間的連接。 為了重現這個圖像,我們可以給別人一組指令。

方法一

我們可以將其表示為一系列點,並且信息將遵循 graph = {(x1, y1), (x2, y2), ..., (xn, yn)} 的標準形式。

圖 = {(0,0), (3,0), (3,3), (5,5), (7,10), (8,7), (9,4), (10,1) }

一個接一個地繪製每個點並將它們連接到前一個點非常容易。 然而,想像一下一個包含一千個點或多個線段的圖形,它們都向各個方向發展。 那個列表會有很多數據,對吧? 然後必須一次一個地連接每個人,這可能會很痛苦。

方法二

我們可以做的另一件事是給出一個起點,它與下一個點之間的直線的斜率,並使用標準形式 graph={(starting point}, [m1, x1, h1) 指示下一個點的預期位置], ..., [mn, xn, hn]}. 這裡,變量 'm' 表示直線的斜率,'x' 表示計數的方向(無論是​​ x 還是 y),'h' 告訴你如何許多人可以在上述方向數數。您還可以記住在每次移動後繪製一個點。

圖 = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,1], [-3,x,1], [-3,x,1]}

廣告

你最終會得到相同的圖表。 你可以看到這個表達式中的最後三個術語是相同的,所以我們可以通過某種方式說“重複三遍”來減少它。 假設每當您看到變量“R”出現時,就意味著重複最後一件事。 我們做得到:

圖 = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,1], [R=2]}

如果單個點並不重要,只有圖形本身重要怎麼辦? 我們可以像這樣合併最後三個部分:

圖 = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,3]}

它比以前縮短了一點。

方法三

讓我們嘗試另一種方式。

y=0, 0≤x≤3
x=0, 0≤y≤3
y=x,3≤x≤5
y=2.5x-7.5, 5≤x≤7
y=-3x+29, 7≤x≤8
y=-3x+29, 8≤x≤9
y=-3x+29, 9≤x≤10

在這裡,我們用純代數術語來表示它。 再一次,如果點本身並不重要,而只有圖表重要,我們可以合併最後三個項目。

y=0, 0≤x≤3
x=0, 0≤y≤3
y=x,3≤x≤5
y=2.5x-7.5, 5≤x≤7
y=-3x+29, 7≤x≤10

現在,您選擇哪種方法取決於您的能力。 也許你很擅長數學和繪圖,所以你選擇了最後一個選項。 也許你擅長導航,所以你選擇了第二個選項。 然而,在計算機領域,您正在執行許多不同類型的任務,而計算機的能力並沒有真正改變。 因此,算法針對它們完成的任務進行了優化。

另一個需要注意的重點是每個方法都依賴於一個鍵。 除非您知道如何處理它們,否則每組指令都是無用的。 如果您不知道應該繪製每個點並連接這些點,那麼第一組點沒有任何意義。 除非您知道第二種方法中每個變量的含義,否則您將不知道如何應用它們,就像密碼的密鑰一樣。 該密鑰也是使用算法不可或缺的一部分,並且通常,該密鑰可以在社區中或通過“標準”找到。

文件壓縮

當您下載一個 .zip 文件時,您會提取其中的內容,以便您可以使用其中的任何內容。 如今,大多數操作系統都可以像普通文件夾一樣深入 .zip 文件,在後台執行所有操作。 十多年前,在我的 Windows 95 機器上,我必須手動提取所有內容,然後才能看到除了裡面的文件名之外的任何內容。 這是因為以 .zip 文件形式存儲在磁盤上的內容不可用。 想想拉出式沙發。 當你想把它用作床時,你必須把靠墊取下來展開,這樣會佔用更多的空間。 當你不需要它,或者你想運輸它時,你可以把它折疊起來。

廣告

壓縮算法專門針對它們所針對的文件類型進行調整和優化。 例如,每種音頻格式都使用不同的方式來存儲數據,這些數據在被音頻編解碼器解碼後,將提供與原始波形相似的聲音文件。 有關這些差異的更多信息,請查看我們之前的文章,所有這些音頻格式之間的差異是什麼? 無損音頻格式和 .zip 文件有一個共同點:在解壓縮過程之後,它們都以準確的形式生成原始數據。 有損音頻編解碼器使用其他方法來節省磁盤空間,例如修剪人耳無法聽到的頻率,並在部分中平滑波形以去除一些細節。 最後,雖然我們可能無法真正聽到 MP3 和 CD 曲目之間的區別,但前者肯定存在信息不足。

數據加密

在保護數據或通信線路時也使用算法。 它不是存儲數據以使用更少的磁盤空間,而是以其他程序無法檢測到的方式存儲。 如果有人竊取了您的硬盤並開始掃描它,即使您刪除文件,他們也可以獲取數據,因為數據本身仍然存在,即使轉發位置已經消失。 當數據被加密時,所存儲的任何東西看起來都不像它的樣子。 它通常看起來是隨機的,好像隨著時間的推移碎片化了。 您還可以存儲數據並使其顯示為另一種類型的文件。 圖像文件和音樂文件對此很有用,例如,它們可以很大而不會引起懷疑。 所有這些都是通過使用數學算法完成的,這些算法接受某種輸入並將其轉換為另一種非常特定類型的輸出。 有關加密如何工作的更多信息,請查看 HTG 說明:什麼是加密以及它是如何工作的?


算法是在計算機科學中提供多種用途的數學工具。 他們致力於以一致的方式提供起點和終點之間的路徑,並提供遵循它的說明。 比我們強調的更了解? 在評論中分享你的解釋!