文章插图
#生成示例数据graph = {}graph["A"] = ["B", "D", "F"]graph["B"] = ["C", "E"]graph["D"] = ["C"]graph["F"] = ["G", "H"]graph["C"] = []graph["E"] = []graph["G"] = []graph["H"] = []from collections import dequesearch_queue = deque()# 创建一个节点列表search_queue += graph["A"]# 表示将"A"的相邻节点都添加到节点列表中from collections import dequedef search(start_node):search_queue = deque()search_queue += graph[start_node]searched = []# 这个数组用于记录检查过的节点while search_queue:# 只要节点列表不为空node = search_queue.pop()#深度优先#node = search_queue.popleft()# 广度优先取出节点列表中最左边的节点print(node, end=' ')# 打印出当前节点if not node in searched:# 如果这个节点没检查过if node == 'G':# 检查这个节点是否为终点"G"print("nfind the destination!")return Trueelse:search_queue += graph[node]# 将此节点的相邻节点都添加到节点列表中searched.Append(node)# 将这个节点标记为检查过# 如果节点列表为空仍没找到终点,则返回Falsereturn Falseprint(search("A"))
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
数据结构:维护一个先进先出(FIFO)的容器(即队列),算法操作:移除/扩展容器中最浅的节点 。具体代码参考上面深度搜索算法,把“node = search_queue.pop() #深度优先”换成“node = search_queue.popleft() # 广度优先取出节点列表中最左边的节点”即可 。可以看出BFS和DFS差别就在于根据“先入”或“后入”的原则,从边界中选择下一个节点 。
文章插图
贪婪搜索(Greedy Search):
贪心算法的特点是考虑了从目标节点找到任意点的代价,而一般算法考虑的是从起始节点到任意点的代价 。即贪心算法考虑的是如何快速的找到目标节点,使得到达目标节点的时间成本最?。欢?话闼惴?悸堑氖悄勘杲诘愕酱锬勘杲诘愕幕ǚ汛?凼亲钚〉模??皇强焖僬业侥勘杲诘?。基于贪心策略试图向目标移动尽管这不是正确的路径 。由于它仅仅考虑到达目标的代价,而忽略了当前已花费的代价,于是尽管路径变得很长,它仍然继续走下去 。
贪婪算法中“行动的成本”可以用启发式函数h(n)来算从任意结点n到目标结点的最小代价评估值;启发函数决定了贪婪算法运算书读,所以选择一个好的启发函数很重要 。
- 实际的搜索问题中,从一个节点到其邻居有一个“C”的成本
- 可以作为启发函数计算代价的有:长度,时间,能量等
- 当所有权重都为1时,贪婪算法找到最优解
- 对于一般情况 , 如何尽快找到最小成本路径?
Dijkstra算法:
Dijkstra算法算是贪心思想实现的,其可以适用与拓扑图或者栅格图,具体实现方法是 , 首先把起点到所有点的距离存下来找个最短的 , 然后松弛一次再找出最短的,所谓的松弛操作就是,遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近,如果更近了就更新距离 , 这样把所有的点找遍之后就存下了起点到其他所有点的最短距离:
文章插图
- 策略:扩展/访问具有最低累积成本g(n)的节点
- g(n):从起始状态到节点“n”的累积成本的当前最佳估计
推荐阅读
- 张国立:别再将我儿子当“问题男人”,他41岁未婚谁之过?
- 600亿财产!朱玲玲不掺和罗家夺产之争,两嫁豪门分文不要!
- 中之源集团是什么公司,昆虫记毛虫的毒素之源在他的绒毛中
- 演技、台词都被吐槽,刘诗诗复出之作《一念关山》不如预期,或将掉出85花阵营
- 不只是减肥,运动还有这项超级能力,医学证明有效!
- 电脑怎么恢复误关的网页,电脑意外断电之后连不上网络怎么解决
- 民风民俗的故事之泼水节的来历是什么
- 怎样可以快速瘦腰,怎样运动能快速减肥?
- 电脑出厂设置在哪里,电脑出厂设置之后怎么开始用
- 直击曾之乔、辰亦儒林口吃饭!几乎“0互动全被拍”回家也分开走