【算法】广度优先搜索
2021-07-13 22:04
标签:python 示例 运行 highlight 箭头 rom 包含 无限循环 需要 解决最短路径问题的算法被称为广度优先搜索。 (1) 使用图来建立问题模型。 (2) 使用广度优先搜索解决问题。 图模拟一组连接。 图由节点(node)和边(edge)组成。一个节点可能与众多节点直接相连,这些节点被称为邻居。图用于模拟不同的东西是如何相连的。 广度优先搜索是一种用于图的查找算法,可帮助回答两类问题。 在广度优先搜索的执行过程中,搜索范围从起点开始逐渐向外延伸,即先检查一度关系,再检查二度关系。 广度优先搜索不仅查找从A到B的路径,而且找到的是最短的路径。 需要按添加顺序进行检查。可以用队列来实现这种目的 队列类似于栈,不能随机地访问队列中的元素。 队列只支持两种操作:入队和出队。 队列是一种先进先出(First In First Out,FIFO)的数据结构,而栈是一种后进先出(Last InFirst Out,LIFO)的数据结构。 使用散列表将键映射到值,用来实现图 示例: 键—值对的添加顺序不重要,因为散列表是无序的。 其中的关系是单向的 没有箭头,直接相连的节点互为邻居 广度优先搜索的运行时间为O(V + E),其中V为顶点(vertice)数,E为边数。 解析: 在整个图中搜索元素,就意味着将沿每条边前行(记住,边是从一个人到另一个人的箭头或连接),因此运行时间至少为O(边数)。 还使用了一个队列,其中包含要检查的每个元素。将一元素添加到队列需要的时间是固定的, 即为O(1),因此对每个元素都这样做需要的总时间为O(元素个数)。 【算法】广度优先搜索 标签:python 示例 运行 highlight 箭头 rom 包含 无限循环 需要 原文地址:https://www.cnblogs.com/lilip/p/9541328.html广度优先搜索(breadth first search)
图
最短路径问题(shorterst-path problem)
最短路径问题解决步骤
图的定义
广度优先搜索
查找最短路径
队列
实现图
>>> graph={}
>>> graph[‘you‘]=[‘alice‘,‘bob‘,‘claire‘]
>>> graph
{‘you‘: [‘alice‘, ‘bob‘, ‘claire‘]}
>>> graph[‘bob‘]=[‘anuj‘,‘peggy‘]
>>> graph[‘alice‘]=[‘peggy‘]
>>> graph[‘claire‘]=[‘thom‘,‘jonny‘]
>>> graph[‘anuj‘]=[]
>>> graph[‘peggy‘]=[]
>>> graph[‘thom‘]=[]
>>> graph[‘jonny‘]=[]
>>> graph
{‘you‘: [‘alice‘, ‘bob‘, ‘claire‘], ‘bob‘: [‘anuj‘, ‘peggy‘], ‘alice‘: [‘peggy‘], ‘claire‘: [‘thom‘, ‘jonny‘], ‘anuj‘: [], ‘peggy‘: [], ‘thom‘: [], ‘jonny‘: []}
有向图(directed graph)
无向图(undirected graph)
实现算法
代码
from collections import deque #使用函数deque来创建一个双端队列
graph={‘you‘: [‘alice‘, ‘bob‘, ‘claire‘], ‘bob‘: [‘anuj‘, ‘peggy‘], ‘alice‘: [‘peggy‘], ‘claire‘: [‘thom‘, ‘jonny‘], ‘anuj‘: [], ‘peggy‘: [], ‘thom‘: [], ‘jonny‘: []}
def search(name):
search_queue=deque()
search_queue+=graph[name]
searched=[] #这个列表用于记录检查过的元素
while search_queue:
person=search_queue.popleft()
if not person in searched:
if person_is_seller(person):
print(person,‘is a mango seller!‘)
return True
else:
search_queue+=graph[person]
searched.append(person)
return False
def person_is_seller(name):
return name[-1]==‘m‘
search(‘you‘)
原理
停止条件(满足其一):
运行时间
扩展
小结
上一篇:Python爬虫【解析库之beautifulsoup】
下一篇:java优化