資料結構刷題 剪枝

2021-10-08 10:56:53 字數 566 閱讀 4377

在刷題中會遇到,比如二叉樹問題中會遇到剪枝的問題,我們需要,研究一下什麼是剪枝

剪枝可謂是搜尋的靈魂所在,我們知道搜尋是個愣頭青小伙,一路撞到底可能都撞不到答案,他還可能要撞很多次。所以有什麼方法可以讓他撞的次數少一點呢?我們知道搜尋會形成乙個搜尋樹,這其中有很多的枝杈,但是他們中許多其實是無用或者重複的,我們就可以把他們都」剪「掉,或者我們可以使用別的方法去減少枝杈,這樣的過程稱為剪枝,我們之後的搜尋題目都可以有體現。

常見的套路剪枝方法有這幾種:

1、優化搜尋順序:有時候需要由大到小倒序.

2、排除重複情況:如果乙個狀態之前已經在之前被搜尋過,那麼我們沒必要再搜尋一次。

3、可行性剪枝:如果乙個狀態本來就無法達到最終狀態,那麼我們根本不需要再進行下去。形象的理解就是我們如果看到前面有一堵牆,那麼我們就不會再走這條路,因為這條路是不通的,而不是一直走到撞牆在回去。

4、最優性剪枝:如果當前花費的代價已經超過了當前的最優解,那麼也不需要再搜尋下去了。

5、記憶化:記錄每個狀態的搜尋結果,在重複遍歷乙個狀態時直接返回。相當於我們在對圖進行深搜的時候,標記乙個節點是否被訪問過。記憶化搜尋也可以用在動態規劃上。

資料結構刷題 陣列

給定乙個矩陣 a,返回 a 的轉置矩陣。先建立乙個與原始矩陣行列數互換的新矩陣 做兩個迴圈巢狀,內迴圈遍歷原始矩陣的行轉列,外矩陣遍歷原始矩陣的列 class solution return v 逐行的細緻解釋 vector 建立了二維陣列,兩個空格可以在c 11標準中可以剔除 a 0 size 獲...

Codeforces資料結構刷題

const int n 2e5 5 int n m ll a n struct node tr n 2 void push up int i void build int i int l int r int mid l r 1 build i 1,l,mid build i 1 1,mid 1,r ...

LeetCode刷題 C 資料結構

定義 definition for singly linked list.struct listnode listnode int x val x next nullptr listnode int x,listnode next val x next next listnode node list...