回溯法按深度優先策略搜尋問題的解空間樹。首先從根節點出發搜尋解空間樹,當演算法搜尋至解空間樹的某一節點時,先利用剪枝函式判斷該節點是否可行(即能得到問題的解)。
(2)用回溯演算法解決問題的一般步驟:
1、 針對所給問題,定義問題的解空間,它至少包含問題的乙個(最優)解。
2 、確定易於搜尋的解空間結構,使得能用回溯法方便地搜尋整個解空間 。
3 、以深度優先的方式搜尋解空間,並且在搜尋過程中用剪枝函式避免無效搜尋。
確定了解空間的組織結構後,回溯法就從開始結點(根結點)出發,以深度優先的方式搜尋整個解空間。這個開始結點就成為乙個活結點,同時也成為當前的擴充套件結點。
在當前的擴充套件結點處,搜尋向縱深方向移至乙個新結點。這個新結點就成為乙個新的活結點,並成為當前擴充套件結點。如果在當前的擴充套件結點處不能再向縱深方向移動,
則當前擴充套件結點就成為死結點。此時,應往回移動(回溯)至最近的乙個活結點處,並使這個活結點成為當前的擴充套件結點。回溯法即以這種工作方式遞迴地在解空間中
搜尋,直至找到所要求的解或解空間中已沒有活結點時為止。
2. 你學習《演算法分析與設計》課程的收穫
在學習了《演算法分析與設計》這門課後,我對常見的演算法有了乙個基本的了解。
第一章--演算法概述,演算法和程式的定義及組成,以及評價演算法優劣的標準--時間複雜度t(n)=o(f(n))和空間複雜度s(n)。
第二章--遞迴與分治策略。
第三章--動態規劃。
第四章--貪心演算法。
第五章--回溯法。
第六章--分支限界法。
通過對上述演算法的學習,這對以後問題求解有很大的幫助。
(1)做最大子列和的問題實驗的時候,一開始總想著低軌道最底層,導致不能理解演算法的思想,不過經過老師的解釋,基本清楚了。
(2)動態規劃填表是用一維陣列還是二維陣列,有時會很糾結,如果老師能確定哪一類題目用一維陣列,哪一類題目用二維陣列就好了。
4. 你對本門課程的教學有哪些建議。
課下成立互助小組,安排程式設計能力強的學生為組長,在小組訓練中不斷分享程式設計實踐心得,小組長協助程式設計能力弱的組員一步步從簡 單問題分析,到複雜問題建模,最終實現電腦程式設計。
演算法第五章作業及學期總結
發現有些演算法其實以前就已經在用了,但是用得沒有條理,沒法用到下一次相似的型別中去。學習了演算法後能看出題目可以用哪種演算法來解決,減少了思考的時間,可以用更便捷有效的模板做法來解決類似的問題,也知道了不同演算法的優缺點,可以選擇更合適要求的演算法。學習新演算法的時候會在實踐的一些細節中思想卡住,然...
演算法第五章作業及學期總結
回溯法所用到的核心思想就是遞迴法,雖然其過程邏輯很清楚,而且執行效率很高。但缺點也是與之對應的,邏輯清楚,必然其抽象性很高,所以有時看它的解題過程很容易看懂,但要是自己動手寫這個遞迴過程,很難下筆。回溯法解決問題較為直觀易懂,但是其時間和空間開銷都比較大,需要使用限界函式縮小遞迴範圍。該課程讓我學習...
演算法第五章作業及學期總結
回溯法按深度優先策略搜尋問題的解空間樹。1 基本思想 2 基本行為 回溯法的基本行為是搜尋,搜尋過程使用剪枝函式來為了避免無效的搜尋。3 剪枝函式包括兩類 1.使用約束函式,剪去不滿足約束條件的路徑。2.使用限界函式,剪去不能得到最優解的路徑。通過這門課程的學習能夠更系統地了解並且運用部分演算法,不...