ACM搜尋演算法總結

2021-06-21 10:34:59 字數 1386 閱讀 2674

一、回溯演算法

回溯演算法是所有搜尋演算法中最為基本的一種演算法,其採用了一種「走不通就掉頭」思想作為其控制結構,其相當於採用了先根遍歷的方法來構造解答樹,可用於找解或所有解以及最優解。

評價:回溯演算法對空間的消耗較少,當其與分枝定界法一起使用時,對於所求解在解答樹中層較深的問題 有較好的效果。但應避免在後繼節點可能與前繼節點相同的問題中使用,以免產生迴圈。

二、深度搜尋與廣度搜尋

深度搜尋與廣度搜尋的控制結構和產生系統很相似,唯一的區別在於對擴充套件節點擊取上。由於其保留了所有的前繼節點,所以在產生後繼節點時可以去掉一部分重複 的節點,從而提高了搜尋效率。這兩種演算法每次都擴充套件乙個節點的所有子節點,而不同的是,深度搜尋下一次擴充套件的是本次擴充套件出來的子節點中的乙個,而廣度搜尋 擴充套件的則是本次擴充套件的節點的兄弟節點。在具體實現上為了提高效率,所以採用了不同的資料結構.

評價:廣度搜尋是求解最優解的一種較好的方法,在後面將會對其進行進一步的優化。而深度搜尋多用於只要求解,並且解答樹中的重複節點較多並且重複較難判斷時使用,但往往可以用a*或回溯演算法代替。

第二部分 搜尋演算法的優化(一)

該部分將談到搜尋與其他演算法的結合。再看scu online judge的一道題目: 給定乙個8 * 8的西洋棋棋盤。給出棋盤上任意兩個位置的座標,問馬最少幾步可以從乙個位置跳到另外乙個位置。

該題目同樣是求最優解,如果用一般的深度優先搜尋是很容易超時的。如果用廣度優先搜尋,會消耗大量的記憶體,而且效率是很低的。這裡,我們將嘗試用深度優先搜尋加動態規劃的演算法解決該問題。

將該棋盤做為儲存狀態的矩陣。每個矩陣元素的值是該位置到初始位置最少需要的步數。初始位置的元素值為0。其他位置的元素初始化為乙個很大的正整數。首先 從初始位置開始深度優先搜尋,例如某次從(i1,j1)到達位置(i2,j2),如果(i2,j2)處的值大於(i1,j1)的值加1,則(i2,j2) 處的值更新為(i1,j1)+ 1,表示從(i1,j1) 跳到(i2,j2)比從其他地方跳到(i2,j2)更優,不斷的進行這個過程,直到不能進行下去位置,那麼最後的目標位置的值就是解。這就是乙個動態規劃 的思想,每個位置的最優解都是由其他能夠一次跳到這個位置的位置的值決定的,而且是它們中的最小值。同時,該動態規劃又借助深度優先搜尋這個工具,完成對 每個位置的值的重新整理,可以算是乙個比較經典的深度優先搜尋和動態規劃的結合。該問題還需要注意乙個剪枝的問題,從起始位置到目標位置的最大步數是多少?經 過計算,最大值是6。所以一旦某個位置的值是6了,就不必再將它去重新整理另外的位置,從而剪去了對很多不必要子樹的搜尋,大大提高了效率。

第四部分結語

本文的主要的篇幅講的都是理論,但是根本的目的還是指導實踐。搜尋,據我認為,是當今acm競賽中最常規、也最能體現解題者水平的一類解題方法。 「紙上得來終覺淺,絕知此事要躬行。」要想真正領悟、理解各種搜尋的思想,掌握搜尋的解題技巧,還需要在實踐中不斷地挖掘、探索。實踐得多了,也就能體會 到漸入佳境之妙了。演算法的優化是無窮盡的。

acm搜尋演算法總結

近期也是學習了搜尋演算法,搜尋被稱為通用解法 雖然啥題都可以解但是也有很大的弊端就是時間!概念 狀態對問題在某一時刻進展情況的數學描述或者是數學抽象。狀態轉移 每乙個狀態都是乙個可能的解,狀態的轉移就是問題從乙個狀態轉移到另乙個狀態,這樣就可以進行搜尋的一步步延伸直到找到需要的解。廣度優先搜尋 一層...

搜尋演算法總結

搜尋演算法,是一種在狀態空間中尋找特定的目標狀態及到達目標狀態的途徑的系統方法。常見的題目如 搜尋是計算機求解問題的最基本方法,適用面很廣,沒有向動態規劃那樣對狀態有最優化原理和無後效性的約束。而針對具體問題,特別是運用了某種智慧型化的優化手段,也許會帶來某些具體的約束。相關題目 poj 3278 ...

搜尋演算法總結

a 演算法,分支限界演算法。如有錯誤歡迎指正。為了便於描述,搜尋演算法適用解決在一張有權無向圖中,找到從原點到終點的最短路徑。wait arr陣列存放待擴充套件的節點。初始化 把初始節點root 加入到wait arr 陣列中 while wait arr陣列不為空 if 還存在子節點 子節點加入到...