算法

算法是一種定義明確的過程,允許計算機解決問題。有很多算法。在這裏,我列出了計算機科學中一些廣泛使用的算法:排序,搜索,重複編程和動態編程。

排序:排序是一種算法,由一系列指令組成,這些指令將數組作爲輸入,對數組執行指定的操作,有時稱爲列表,並輸出排序的數組。簡單的排序算法是冒泡排序選擇排序插入排序

冒泡排序:這是最簡單的排序算法。我們從數組的開頭開始,如果第一個元素大於第二個元素,則交換前兩個元素。然後我們轉到下一對,依此類推,不斷掃描數組,直到它被排序。O(n 2)平均值和最差值。

1620


選擇排序:這是最直觀的,不一定有效。使用線性掃描找到最小元素並將其移動到前面(使用前面元素交換它)。然後找到第二個最小的並移動它,再次進行線性掃描。繼續這樣做,直到所有元素都到位。適合小文件。O(n 2)平均值和最差值。

1620


插入排序:它通過逐個移動元素對數組進行排序。每次迭代都會從輸入數據中刪除一個元素,並將其插入正在排序的列表中的正確位置。它對於較小的數據集是有效的,但對於較大的列表而言效率非常低。它比Selection Sort和Bubble Sort算法更好。O(n 2)平均值和最差值。

1620

image

搜索:搜索是基於密鑰查找內容。有線性搜索二進制搜索

線性搜索:線性搜索是一種在列表中查找目標值的方法。它按順序檢查列表中每個元素的目標值,直到找到匹配項或者直到搜索完所有元素爲止。

1620


二進制搜索:二進制搜索是一種有效的算法,用於從有序的項目列表中查找項目。它的工作原理是反覆將列表中可能包含該項目的部分分成兩半; 直到你將可能的位置縮小到一個。複雜性從O(n)減少到O(logn)。

1620


遞歸:遞歸是一種函數或算法自稱的計算機編程技術。它應包括具有終止條件的步驟。當條件滿足時,每個重複的其餘部分從最後一個被調用到第一個重複處理。通過遞歸解決的最着名的問題是因子數

階乘數:數n的階乘是所有小於或等於n的正非零數的乘積。n的階乘由n!表示。

1620


動態編程:動態編程是一種解決複雜問題的方法,可以將其分解爲更簡單的子問題集合,只需解決一次子問題,並存儲其解決方案。下次出現相同的子問題時,可以查找先前計算的解,從而節省計算時間,但代價是存儲空間的適度支出。着名的動態編程問題是Fibonacci數

斐波納契數:它們是一系列數字,其中每個數字(斐波納契數)是前兩個數字的總和。最簡單的是系列1,1,2,3,5,8等。

1620


劃分和征服:分而治之算法通過遞歸地將問題分解爲相同或相關類型的兩個或更多個子問題來工作,直到這些子問題變得足夠簡單直接解決。使用分而治之的着名問題是合併排序快速排序

合併排序:將數組分成兩半,對每一半進行排序,然後將它們合併在一起。這些半部分中的每一部分都應用了相同的排序算法。最終,它合併了兩個單元素數組。O(nlogn)平均值和最差值。

1620

image

快速排序:選取一個隨機元素並對數組進行分區,所有小於分區元素的數字都會出現在大於它的所有元素之前。如果我們在元素周圍重複分區數組,那麼數組最終將被排序。但由於分區元素不能保證爲中位數,因此我們的排序可能非常慢。O(nlogn)平均值,O(n 2)最差。

1620


貪婪:貪婪算法做出的選擇似乎是當時最好的選擇,即做出本地最優選擇,希望這種選擇能夠帶來全局最優解決方案。貪婪算法解決的着名問題是霍夫曼編碼

霍夫曼編碼:霍夫曼編碼是一種無損數據壓縮算法。其思想是爲輸入字符分配可變長度代碼,分配代碼的長度基於相應字符的頻率。

1620


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章