1. 程式人生 > >【演算法作業】演算法作業第五章

【演算法作業】演算法作業第五章

  1. 對回溯演算法的理解(2分)

    1. 回溯法對任一解的生成,一般都採用逐步擴大解的方式。每前進一步,都試圖在當前部分解的基礎上擴大該部分解。它在問題的狀態空間樹中,從開始結點(根結點)出發,以深度優先搜尋整個狀態空間。這個開始結點成為活結點,同時也成為當前的擴充套件結點。在當前擴充套件結點處,搜尋向縱深方向移至一個新結點。這個新結點成為新的活結點,併成為當前擴充套件結點。如果在當前擴充套件結點處不能再向縱深方向移動,則當前擴充套件結點就成為死結點。此時,應往回移動(回溯)至最近的活結點處,並使這個活結點成為當前擴充套件結點。回溯法以這種工作方式遞迴地在狀態空間中搜索,直到找到所要求的解或解空間中已無活結點時為止。
    2. 運用回溯法解題的關鍵要素有以下三點: (1) 針對給定的問題,定義問題的解空間; (2) 確定易於搜尋的解空間結構; (3) 以深度優先方式搜尋解空間,並且在搜尋過程中用剪枝函式避免無效搜尋。
  2. 請說明“子集和”問題的解空間結構和約束函式(2分)

    1. 解空間結構是一棵二叉排序樹
    2.  sum + a[t] <= c  ,如果加上當前結點的值小於問題所要求的和,則向左子樹走,否則走向右子樹。

  3. 請說明在本章學習過程中遇到的問題及結對程式設計的情況(1分)

本章學習的過程中,感覺在理解回溯法的開始有點難,當自己在程式設計的過程中實踐後,才慢慢的體會到,感覺實踐還是相當重要的一個步驟,結對程式設計讓人感受到有隊友的愉快感覺,有不清楚的點可以討論,互相探討互相促進,讓人學習更加深刻,很開心。