首页 > 代码库 > 【ACM算法回顾】搜索
【ACM算法回顾】搜索
- 今天主要回顾一下几个搜索
- DFS ——Depth First Search
- BFS ——Breadth First Search
- A*
- 迭代优先搜索
今天DFS和BFS的实现就不细讲了
我们先直接看A*算法的实现(python风格为主...带一点伪代码)
1 def A_star_search 2 q = PriorityQueue() 3 #优先队列,顺便起到open表的作用 4 q.put(qnode) 5 came_from = {} 6 #came_from为记录拓展过程的链表 7 cost_so_far = {} 8 #cost_so_far[p]为起点到节点p目前已知花费 9 came_from[start_state] = None 10 cost_so_far[start_state] = 0 11 12 while not q.empty(): 13 cur_state = q.get() 14 if cur_state == goal_state: 15 break 16 #假设用邻接表存储,用边权矩阵原理类似 17 for nxt in G.neighbour(cur_state): 18 new_cost = cost_so_far[cur_state] + G.cost(cur_state, nxt) 19 if nxt not in cost_so_far or new_cost < cost_so_far[nxt] 20 cost_so_far[nxt] = new_cost 21 priority = new_cost + heuristic(goal_state, nxt) 22 q.put(qnode(....including "priority", "nxt")) 23 came_from[nxt] = cur_state 24 25 return came_from, cost_so_far
核心思想在已知代价g的基础上引入估价函数h,由f=g+h确定搜索的顺序
无论是DFS还是BFS还是启发式搜索,关键在于,搜索中扩展顺序的确定
DFS和BFS都不在乎边权,而都是以层次为划分进行搜索,DFS的搜索顺序是深层节点优先,BFS的搜索顺序是同层节点优先
而A*搜索主要考虑边权和代价,由已知代价评估出“最有可能成为答案”的节点进行拓展
【ACM算法回顾】搜索
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。