【演算法作業】演算法作業第五章
阿新 • • 發佈:2018-12-24
-
對回溯演算法的理解(2分)
- 回溯法對任一解的生成,一般都採用逐步擴大解的方式。每前進一步,都試圖在當前部分解的基礎上擴大該部分解。它在問題的狀態空間樹中,從開始結點(根結點)出發,以深度優先搜尋整個狀態空間。這個開始結點成為活結點,同時也成為當前的擴充套件結點。在當前擴充套件結點處,搜尋向縱深方向移至一個新結點。這個新結點成為新的活結點,併成為當前擴充套件結點。如果在當前擴充套件結點處不能再向縱深方向移動,則當前擴充套件結點就成為死結點。此時,應往回移動(回溯)至最近的活結點處,並使這個活結點成為當前擴充套件結點。回溯法以這種工作方式遞迴地在狀態空間中搜索,直到找到所要求的解或解空間中已無活結點時為止。
- 運用回溯法解題的關鍵要素有以下三點: (1) 針對給定的問題,定義問題的解空間; (2) 確定易於搜尋的解空間結構; (3) 以深度優先方式搜尋解空間,並且在搜尋過程中用剪枝函式避免無效搜尋。
-
請說明“子集和”問題的解空間結構和約束函式(2分)
- 解空間結構是一棵二叉排序樹
-
sum + a[t] <= c ,如果加上當前結點的值小於問題所要求的和,則向左子樹走,否則走向右子樹。
-
請說明在本章學習過程中遇到的問題及結對程式設計的情況(1分)
本章學習的過程中,感覺在理解回溯法的開始有點難,當自己在程式設計的過程中實踐後,才慢慢的體會到,感覺實踐還是相當重要的一個步驟,結對程式設計讓人感受到有隊友的愉快感覺,有不清楚的點可以討論,互相探討互相促進,讓人學習更加深刻,很開心。