1.首先得構造解空間樹:子集樹和排列樹;
2.以深度優先的方式搜尋解空間:遞迴或迭代;
3.設計剪枝函式避免無效搜尋:使用約束函式,剪去不滿足約束條件的路徑或使用限界函式,剪去不能得到最優解的路徑。
回溯法解問題的乙個顯著特徵是,解空間樹是虛擬的,在任何時候,只需儲存從根節點到當前擴充套件結點的路徑。
在回溯問題中,若要求問題的所有解,就要回溯到根。
子集樹:
當所給的問題是從n個元素的集合s中找出滿足某種性質的子集時,相應的解空間稱為子集樹。
排列樹:
當所給的問題是對n個元素的集合進行排列,找出最優排列問題時,相應的解空間為排列樹。
約束函式:
先把集合裡的數按遞增序列排序,若當前的和sum加上當前正在進行的ai如果小於要求的和c,就是可以繼續進行下一步k+1,若sum加上剩餘的排在最後面的子集的和大於要求的和,就不符合要求,就可以跳過,並回溯到上乙個步驟。
整個演算法課程主要學習了:
分治法、減治法、動態規劃法、貪心法、回溯法
其中經典的問題是0-1揹包,他的解法可以使用其中任一一種,所以可以通過0-1揹包問題來深入聯絡這些
困難的話就是動態規劃,我覺得動態規劃要列出表示式非常的難
演算法課程期末複習總結
八大排序演算法複雜度比較 求解遞迴式的複雜度 max sum 最大子段和 int len arr.length int dp newint len 1 dp 0 0 for int i 1 i len i int res integer.min value for int i 1 i dp.leng...
Git 期末總結
終於到了期末總結的時刻了!經過幾天的學習,相信你對git已經初步掌握。一開始,可能覺得git上手比較困難,尤其是已經熟悉svn的童鞋,沒關係,多操練幾次,就會越用越順手。git雖然極其強大,命令繁多,但常用的就那麼十來個,掌握好這十幾個常用命令,你已經可以得心應手地使用git了。友情附贈國外製作的g...
期末程式設計總結
臨近期末,最後一次的部落格,打算總結一下各個章節的知識點,到了最後,往往最基礎的東西最能起更大的作用。1.保留小數點的方法。2和 fixed setprecision 2 cout fixed setprecision 4 2.和 的區分。賦值,等於 3.復合的賦值運算子的使用和增一運算子的字首字尾...