第五章作業和學習總結

2022-08-22 14:51:10 字數 1323 閱讀 6902

引論:回溯法是一種「萬金油」的解題方法,其原理在於系統地檢索乙個問題的所有解(具體形式是檢索一顆解空間樹的所有葉子節點),再根據相應的實際情況和與前面檢索結果對比來刪去不可選的解方案(於解空間樹中,就是使用剪枝函式來剪去不可選的葉子節點)。與分支限制法不同的是,回溯法對解空間樹的遍歷是深度優先遍歷,遇到葉子節點後返回上一級節點至根節點,這就是回溯法的「回溯」所在。

一、對回溯法的理解

回溯法是一種通用的解題方法,它可以有效地解決最優解問題,回溯法的關鍵在於找到乙個結果時,記錄下來,並返回上一級節點,尋找另外乙個結果。按照這種思想,我們可以將問題抽象為一棵解空間樹,把問題的若干個解情況抽象成葉子節點,然後通過遍歷解空間樹的葉子節點來尋找最優解。但如果不進行剪枝操作,那麼回溯法的時間複雜度往往是指數形式的。那麼,我們使用回溯法時就要關注尋找剪枝條件,使用剪枝函式來捨棄不符合我們要求的結,以此在得到最優解的情況下降低時間複雜度。

二、對「子集和」問題的解空間結構和約束函式的說明

對於問題的子集合,我們可以將其抽象為一棵解空間樹。如圖,我們假設這是一棵解空間樹,那麼我們可以將根節點a到b、c節點層視為乙個問題的選擇,而b、c節點層到d、e、f、g節點層又是乙個問題的選擇,同時d、e、f、g節點作為解空間樹的葉子節點,代表的是問題的解的情況,當我們遍歷至葉子節點時,也就得到了其中一種解情況,比如說我們遍歷至d節點了,我們得到了乙個解,這時我們要回溯至b節點為了遍歷到e節點,通過遍歷e節點得到另外乙個解與之前獲得的解做對比,來比較誰才是最優的情況。而約束函式是用來約束我們遍歷,因為單純走完所有分支會消耗大量的時間,造成演算法的時間複雜度極高,所以我們需要約束函式來減少我們走的分支的數目。比如說我們走到d節點所需要的條件不符合題目要求,那麼我們就要使用約束函式來排除這個節點,減少做不必要的遍歷。

三、本章學習過程中遇到的問題及結對程式設計的情況

在學習回溯法的時候,雖然感覺聽起來很容易理解,它的理論也感覺非常簡單。但實際上程式設計的時候使用起來卻是有難度的,即使老師給出了回溯法三種解空間樹的**模板,使用的時候是要根據題目要求、實際情況來填充模板,如果對回溯法三種解空間情況不熟悉,就會感覺迷茫,無法理解模板內容。因為回溯法往往要是用到遞迴,而本人的遞迴思想很差,有時候無法理解回溯法的核心遞迴演算法,這對於解題來說是很大的不利,因此往往需要跟著除錯一步一步理解情況並解決程式的bug。

由於回溯法使用起來不易,所以結對程式設計的時候我與搭檔的聯絡更加緊密了,我們一起討論題目是哪一種解空間情況,一起理解回溯中的遞迴演算法,一起設計剪枝函式爭取達成題目的時間要求。同時老師出的作業題也是有一定的難度的,所以在結對程式設計的同時,我們共同商討解題對策,希望能夠通過頭腦風暴來理解並使用好回溯演算法。

第五章作業及總結

回溯法本質上是深度優先搜尋,解集樹通常為n層二叉樹或n層m叉樹,哪種適合用哪種,因為使用了遞迴,所以總體上時間複雜度和空間複雜度較高,不如動態規劃高效,但簡單易解,比較容易想到解法。另外評價乙個回溯演算法的好壞可以通過剪枝函式來評判,好的多個剪枝函式,可以使回溯更高效,避免無效搜尋,好的回溯應該是到...

第五章學習總結

1.子類與父類 利用繼承,可以先定義乙個共有屬性的一般類。根據該一般類再定義具有特殊屬性的子類,子類繼承一般類的屬性和行為,並根據需要增加它自己新的屬性和行為。子類 extends 父類 2.object是所有類的祖先類。每個類有且僅有乙個父類。3.子類自然地繼承父類中不是private的成員變數和...

第五章作業

1.使用font屬性設定中英文又什麼要注意的 答案 中文要大些 2.在css中常用的背景有哪些,作用是什麼 答案 背景顏色,背景等 3.北大青鳥頁面 答案 title逆向課程設計 以企業需求決定課程設計內容,確保訓練內容及深度和企業需求一致 模擬學員學習路線 強調難點和複雜技能點的反覆訓練,力求學習...