您的位置:首页 > 其它

树的搜索策略

2016-03-16 14:46 134 查看

问题解空间的树表示

许多实际应用中的计算问题均是NP-完全问题,这些问题不存在多项式时间算法,除非NP=P。当NP-完全问题具有较小的输入规模时,可以穷举问题的解空间。而我们常常将问题的解空间表示成搜索树

广度优先搜索(BFS)

使用队列(Queue)

构造仅含树根节点的队列Q;

若队列Q的第一个节点x是目标节点,则输出节点x对应的解,算法结束

删除队列Q的第一个节点x,如果绑定删除B(x)判定以x为根的子树可能存在解,则将x的所有孩子节点加入队列Q的末尾;

如果队列Q为空,则问题无解,算法结束,否则,转到第2步;

深度优先搜索(DFS)

使用栈(Stack)

构造仅含树根节点的栈S;

如果栈顶元素x是目标节点,则输出节点x对应的解,算法结束;

弹出栈顶元素x,如果绑定函数B(x)判定以x为根的子树可能存在解,则将x的所有孩子一次压入栈

如果栈S为空,则问题无解,算法结束,否则,转到第2步;

爬山法

深搜+贪心

构造仅含树根节点的栈S;

如果栈顶元素x是目标节点,则输出节点x对应的解,算法结束

弹出栈顶元素x,如果绑定函数B(x)判定以x为根的子树可能存在解;则将x的所有孩子节点按隐式月数值P()从大到小依次压入栈

如果栈S为空,则问题无解,算法结束,否则,转到第2步-

最佳优先搜索(best-first-search)

结合了深度优先搜索和广度搜索的优点

使用堆

构造仅含树根节点的堆Q;

如果堆顶元素x是目标节点,则输出节点x对应的解,算法结束;

抽取堆顶元素x,如果绑定函数B(x)判定x以x为根的子树可能存在解,则将x的所有孩子节点插入堆

如果堆Q为空,则问题无解,算法结束,否则,转到第2步;

分支限界法

前面的集中搜索策略虽然可用于求解许多问题,但难以用于高效地求解优化问题。而分支限界搜索法,是求解优化问题的最有效的搜索策略。

用于求解最小化问题(最大化需要转为最小化问题),各种组合优化问题(如人员分配问题,旅行商问题)

爬山法得到问题的一个可行解

继续利用爬山法搜索,搜索时剪除不能取得优化解的分支
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: