本章内容
- 学习数据结构图来建立网络模型
- 学习广度优先搜索(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")
.