數據結構

算法類型

算法類型

算法有很多種。它是指使用各種類型的過程來解決問題。

1.蠻力算法:這是最基本的算法類型。這是一種不使用任何邏輯方法來縮短算法的方法。這是看到問題時想到的第一個方法。在Brute force中,我們隻應用迭代過程來解決問題,沒有任何智能方法。在這方麵,我們嚐試了每一種可能性,而不使用任何技術來改進它。

的例子。想象你有一個裝滿財寶的盒子。它將通過輸入4位數字密碼打開,每個密碼從0到9。因為你一個數字都不認識,所以隻能用蠻力來打開盒子。

因此,您將所有數字都設置為0,然後逐個嚐試:0001、0002、0003,直到打開為止。在最壞的情況下,需要10年4,或者10000次嚐試找到你的組合。

計算機科學中的一個經典例子是旅行推銷員問題(TSP)。假設一個銷售人員需要訪問全國10個城市。如何確定訪問這些城市的順序,以使總旅行距離最小化?

暴力破解的方法就是計算每條可能路線的總距離,然後選擇最短的一條。這並不是特別有效,因為通過聰明的算法可以消除許多可能的路徑。

暴力破解的時間複雜度是O (mn),也可以寫成O (n *米).因此,如果我們要使用蠻力在“m”個字符的字符串中搜索“n”個字符的字符串,將花費我們n * m次嚐試。

  1. 遞歸算法遞歸是函數調用自身的過程。在遞歸中,問題被分解成許多子問題,然後通過反複調用self來逐個解決,直到在基本條件的幫助下解決問題。基本條件是用於解決所有子問題的最後一個條件。遞歸算法是一種將問題分解成具有相同性質的子問題的簡化方法。一次遞歸的結果是下一次遞歸的輸入。該算法使用較小的輸入值調用自身,並通過簡單地對這些較小的值執行操作來獲得結果。
的例子。一個數的階乘,斐波那契數列,河內塔等。一個數字的階乘:int fact(int n) {if (n < = 1) //基本情況返回1;返回n*fact(n-1);}

解釋:在上麵的例子中,fact()函數一次又一次地調用自己。當達到基本條件n=1時,它將返回給函數,所有子問題將得到解決。

3.回溯算法在回溯中,問題的解決方式是這樣的:為了解決問題,我們在一段時間內增量地構建解決方案,並刪除在任何時間點上不能滿足問題條件的解決方案。

例如:國際象棋問題,N皇後問題,數獨遊戲問題

N後問題

其思想是從最左邊的列開始,將q一個一個地放在不同的列中。當我們在一個列中放置一個皇後時,我們檢查是否與已經放置的皇後發生衝突。在當前列中,如果發現沒有衝突的行,則將該行和列標記為解決方案的一部分。如果由於衝突而沒有找到這樣的行,則返回false。

N皇後問題的算法:

1)從最左邊的一列開始

2)如果所有的皇後都被放置

還真

3)嚐試當前列中的所有行。

對每一行執行下麵的操作。

a)如果女王可以安全地坐在這一排

然後將此[行,列]標記為

解並遞歸檢查是否放置

皇後是解決方案。

b)如果將皇後放在[行,列]中導致

解返回true。

c)如果放置皇後不能解決問題,那麼

取消標記這個[行,列](回溯)並轉到

步驟(a)嚐試其他行。

3)如果所有行都試過了,但沒有任何效果,

返回false觸發回溯。

Baidu
map