1. 程式人生 > 遊戲攻略 >《原神攻略》凱亞融化隊怎麼搭配?凱亞融化隊搭配心得

《原神攻略》凱亞融化隊怎麼搭配?凱亞融化隊搭配心得

論搜尋的剪枝

我覺得搜尋是真的有趣(其實真的難

搜尋的本質

其本質就是在一張圖上找出一條從起點到終點,滿足某些條件的路徑——夏季提高營搜尋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

只加了三行程式碼,所以

剪枝真的很重要