图解算法 第6章 广度优先搜索

本章内容

  • 学习数据结构图来建立网络模型
  • 学习广度优先搜索(breadth-first search BFS),回答最短路径问题
  • 学习有向无向图
  • 学习拓扑排序:指出节点之间的依赖关系
  • 在所知的算法中,图算法应该是最有用的

情景导入

你家在杭州某地,你要去嘉兴参加活动。这个时候你会有n种选择到达嘉兴活动现场,这个时候你就要考虑时间长短以及换成的次数。这种问题称为最短路径问题(shortest-path problem),解决最短路径的算法叫做:广度优先搜索。确定如何从杭州到嘉兴需要两个步骤:

  • 使用图来建立问题模型
  • 使用广度优先搜索解决问题

图是什么

图由节点(node)和边(dege)构成。

图是模拟一组链接,模拟不同的东西是如何相连的,比如两个人打牌,我可以用图模拟欠钱关系 A -> B。

广度优先搜索

用于解决两类问题

  • 从节点A出发,有前往节点B的路径吗?
  • 从节点A出发,前往B的最短路径有哪些?

案例:关系网中查找一个做自媒体的----一:有这样的人吗 二:最短路径如何

队列

类似于栈,他是先进先出fifo,栈是后进先出lifo。他们都没有办法随机访问。

在Python中,使用函数deque()来创建队列。当包含相同朋友时很容易无限循环。

O(n)=O(n+v),排列入队所需时间为n,运行时间还要加上边数

def search(name):
	search_queue = degue()
	search_queue += graph[name]
	searched = []
#数组检查记录检查过的人
while search_queue:
	person = search_queue.popleft()
	if person not in searched:
		if person_is_seller(person):
			print(person+"is a mango seller!")
			return True
		else:
			search_queue += graph[person]
			searched.append(person)
			return Flash
search("you")

.

猜你喜欢

转载自blog.csdn.net/weixin_42199275/article/details/81096611