搜索算法
1.广度搜索(bfs)
a. 从初始点开始,根据规则展开第一层节点,并检查目标节点是否在这些节点上,若没有,再将所有的第一层的节点逐一展 开得到第二层节点,如没有,则扩展下去,直到发现目标节点为止
b. 比较适合求最少步骤或最短解序列的题目
c.一般设置一个队列queue ,将起始节点放入队列中,然后从队列头取出一个节点,检查是否是目标节点,如不是则进行扩 展,将扩展出的所有节点放到队尾,然后再从队列头取出一个节点,直至找到目标节点。
2.深度搜索(dfs):
a.一般设置一个栈stack ,将起始节点放入栈中,然后从栈中弹出一个节点,检查是否是目标节点,如不是则进行扩展,
b.将扩展出的所有节点入栈,然后再从栈顶弹出一个节点,直到找到目标节点。深度优先搜索得到的第一个解,不一定是最 优解。
区别:两种算法每次都扩展一个节点的所有子节点,而不同的是,深度搜索下一次扩展的是本次扩展出来的子节点中的一个,而广度搜索 扩展的则是本次扩展的节点的兄弟节点。
3.二分搜索:
a.在有序集合里查找元素,每次将集合分为左右两部分判断解在哪个区域,并调整集合的上下界。
4.三分搜索:
a.当需要求某凸形或凹形函数的极值,通过函数本身表达式并不容易求解是,用三分算法不断逼近求解