演算法設計與分析學習 蠻力法

2021-06-22 18:52:08 字數 1615 閱讀 7470

參考 :  演算法設計與分析   第三章  蠻力法

接下來的每章中,我們專注於一種特定的演算法設計策略。

蠻力法是一種最簡單和直接的解決問題的辦法,往往是低效的,但我們不應該忽略它的地位,

1)它可以解決廣闊領域的各種問題

2)在規模允許時,多少可以產生一些實用的演算法

3)往往可以以蠻力法為準繩,來衡量高效的演算法,或者找不到其他演算法時,先設計蠻力演算法,再做改進

好了,很簡單,直接切入正題。

3.1   選擇排序和氣泡排序

雖然很簡單,也寫了很多次了,複習一下,提請想一想:

1) 它們是穩定的排序方法嗎嗎?不穩定,穩定

2)改進:如果對列表比較一遍後發現沒有交換元素的位置,那麼此時列表已經有序,可以退出了

3.2  順序查詢和蠻力字串匹配

順序查詢不用說吧

蠻力字串匹配更不用說吧,kmp都寫過了

3.3  最近點對和凸包問題的蠻力演算法

由於在第四章中我們將用分治演算法來解最近點對問題和凸包問題,這裡主要明確一些概念吧,知道什麼是最近點對,凸包問題。

最近點對就沒有什麼說的了,說說凸包:

蠻力解凸包問題就是一條條的線段判斷,若其他所有頂點都在這條線段的同一側,則這條線段的2個端點是凸包的頂點,怎麼判斷是乙個解析幾何的數學問題,不說了。

凸包就不寫了,蠻力的,沒有什麼技術含量,就寫了個最近點對。在分治演算法中再來詳細分析怎樣設計更加精妙的方法。蠻力法的最近點對**:

package

section3;

/*第三章蠻力法 3.3 最近點對(蠻力)

*/public

class

nearestpoint

public

static

point nearestpoint(point p)

}

return

nearestpoints;}//

點座標private

static

class

point}}

幾道習題的思考:

1)對實在線n個點的x1,x2,.....xn的最近點對問題,能設計乙個比蠻力好的算發嗎?    排序後來解決,時間複雜度nlogn

3.4  窮舉查詢

舉幾個例子,在後面都將用其他演算法技術來解決,這裡不去實現

1)旅行商問題:在圖中找到一條哈公尺爾頓路(每個頂點只經過一次),使其代價最小

列舉所有路徑,比較

2)揹包問題

著名的計算機問題,有一篇博文揹包九講,後面再說

3)分配問題

後面介紹匈牙利方法

總結:除了一些規模較小的問題,蠻力法一般來說是不適用的,這一章也就是舉了幾個例子來說明這種思想而已,

一些常見的類似於智力題的東西,例如上面說到的問題,在規模較小時都可以用列舉,暴力,蠻力的方法,將一切交給計算機。另外一些典型的類似於智力問題的,比如什麼整數劃分,魔方填數,算術謎底什麼的,都可以列舉,當然,對於這些問題,偉大的數學家和計算機科學家們都給出了更為美妙和高效的演算法。這是後面要說的。

從下一章開始,介紹一些高階的演算法設計技術。

演算法設計與分析之蠻力法

蠻力法是指採用遍歷 掃瞄 技術,即採用一定的策略將待求解問題的所有元素依次處理一次,從而找出問題的解。依次處理所有元素是蠻力法的關鍵,為了避免陷入重複試探,應保證處理過的元素不再被處理。1 蠻力法 列舉法 窮舉法 暴力法 要求設計者找出所有可能的情況,然後選擇其中一種情況,若該情況不可行 或不是最優...

演算法分析與設計 蠻力法0 1揹包

蠻力法是一種簡單直接解決問題的方法,常常直接基於問題的描述,所以蠻力法也是最容易應用的方法。蠻力法所依賴 的基本技術是遍歷,即採用一定的策略依次處理待求解問題的所有元素,從而找出問題的解。由於其需要依次窮舉待處理的元素,因此蠻力法是一種典型的指數級時間演算法。給定n個重量為 價值為的物品和乙個容量為...

演算法設計之蠻力法

1.蠻力法 也叫窮舉法 是一種直接解決問題的方法,常常直接基於問題的描述和所涉及的概念及定義。2.蠻力法優點 邏輯清晰,相對於高效的 巧妙的演算法,實現和構思簡單。同時蠻力法也是很多高效演算法的基礎。可以作為其他高效演算法的衡量標準。對於一些重要的問題,它可以產生一些合理的演算法。可以解決一些小規模...