《原神攻略》凱亞融化隊怎麼搭配?凱亞融化隊搭配心得
阿新 • • 發佈:2021-10-19
論搜尋的剪枝
我覺得搜尋是真的有趣(其實真的難)
搜尋的本質
其本質就是在一張圖上找出一條從起點到終點,滿足某些條件的路徑——夏季提高營搜尋EX
搜尋的模板
1.dfs
void dfs(int step)//可以加入其它有關狀態 { if(check())//如果滿足跳出條件 { ...//方案數加一或者輸出答案 return ; } ...//可行性剪枝和最優性剪枝的最佳插入地點 for(...) if(...)//這算一個劣質的剪枝 { oper(); dfs(step+1); re(); } }
2.bfs
queue< > q;//可以改為優先佇列進行優化
void bfs()
{
q.push(...);
while(q.empty()==0)
{
tmp=q.front();
q.pop();
if(...)
continue;//可行性剪枝和最優性剪枝的最佳插入地點
for(...)
if(...)
...;
q.push(...);
}
}
搜尋的剪枝
想要優化搜尋的複雜度,顯然最直接的方法,就是嘗試減少需要列舉的局面的數量,在一些特殊情況下,可能有一些特殊的優化的方法。
想要減少遍歷列舉的局面數量,最簡單的方法就是剪枝。——夏季提高營搜尋EX
一般的剪枝有兩種,即可行性剪枝和最優性剪枝。
可行性剪枝即是剪去那些不可能滿足題設條件的狀態,即在某種情況下不可能存在有效解,關鍵在於看得遠,較多用於方案型搜尋。
最優性剪枝即是剪去不可能成為最優解的狀態,關鍵在於準確估計最值代價,較多用於最優性搜尋。
預測越遠,效果越佳。——夏季提高營搜尋EX
搜尋的剪枝確實是有套路的,(那又如何我反正不會用)
我們來看看常見的深搜套路
- 改變搜尋方向 秋令營搜尋第一題
- 改變狀態減少搜尋樹子集 換個角度看問題
- 數學方法優化 (多用於數學題) 秋令營搜尋第三、四題
- 玄學轉換法 秋令營搜尋第九題
- 按升序搜尋 非常常見的操作
- 折半搜尋
(我不會啊)
那麼廣搜呢
- map判重減少空間和搜尋次數 'search'
(親測不剪30) - 迴圈陣列提高空間利用率
搜尋剪枝前:7601ms 128000kb
搜尋剪枝後:112ms 816kb
只加了三行程式碼,所以
剪枝真的很重要