回溯法小結及一些零碎知識點

2021-10-05 05:42:27 字數 1078 閱讀 6759

回溯演算法,大部分情況下,都是用來解決廣義的搜尋問題,即從一組可能的解中,選擇出乙個滿足要求的解。

(**注意:**該演算法非常適合使用遞迴,而剪枝是提高回溯效率的常用技巧!)

實際上,解決乙個回溯問題,就是乙個遍歷決策樹的過程,關鍵有三點:

路徑:已經做出的選擇

選擇列表:當前可以做的選擇

結束條件:即到達決策樹底層,無法再做選擇

回溯演算法的框架

def backtrack(路徑, 選擇列表):

if 滿足結束條件:

result.push_back(路徑);

return;

for 選擇 in 選擇列表:

做選擇; //遞迴前,做選擇

backtrack(路徑, 選擇列表);

撤銷選擇; //遞迴後,撤銷選擇

(可選)將該選擇再加入選擇列表 //eg.全排列問題

正因為回溯演算法,必須窮舉整棵決策樹,因此,時間複雜度一般較高,且 >= o(n)。

全排列(重複和不可重複)的兩個問題,可以多研究幾遍,有好處!

1.優先佇列

priority_queuep; 小頂堆

priority_queue p;預設大頂堆

2.滑動視窗最大值問題

為了解決c++的priority_queue不能刪除特定元素的問題,可以採用pair型別關聯該特定條件,妙!

vectormaxslidingwindow(vector& nums, int k) 

return result;

}

3.前後序遍歷

前序遍歷的**在進入某乙個節點之前的那個時間點執行,後序遍歷**在離開某個節點之後的那個時間點執行。

4.圖的相關鏈結

一些零碎的知識點

在html中的onclick和事件中,如果想要傳輸值需要 onclick wds deletebooknotes item.id 需要加個單引號 在標籤中如果有href而且還有onclick方法需要注意 href 不可以寫成href 要不然跳轉出錯,可以不寫href click 與live 當檢視沒...

零碎知識點

1.反斜槓也可拼接字串 window.nl ad function window.nl ad function 2.在console.log 中新增樣式 var a hello console.log c a,font size 400 background blue color white 3 通...

零碎知識點

比較數值時,不要integer,要int 1,elasticsearch查詢時不識別大寫,應全部轉為小寫.因此建立索引時盡量使用小寫 2.var param param.yanan1 yanan2 此處的用法 param 宣告了json格式的param,param.yanan1 yanan2定義了j...