其他分享
首页 > 其他分享> > 搜索

搜索

作者:互联网

论搜索的剪枝

我觉得搜索是真的有趣(其实真的难

搜索的本质

其本质就是在一张图上找出一条从起点到终点,满足某些条件的路径——夏季提高营搜索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

搜索的剪枝确实是有套路的,(那又如何我反正不会用)

我们来看看常见的深搜套路

那么广搜呢

搜索剪枝前:7601ms 128000kb

搜索剪枝后:112ms 816kb

只加了三行代码,所以

剪枝真的很重要

标签:剪枝,秋令,最优性,搜索,EX,...
来源: https://www.cnblogs.com/3cloudsplayer/p/15465641.html