《算法图解》第六章笔记

6.1 图简介

6.2 图是什么

图由节点组成,一个节点可能与众多节点直接相连,这些节点被称为邻居。

6.3 广度优先搜索

广度优先搜索(breadth-first search,BFS)可用于解决两类问题:

  1. 从节点A出发,有前往节点B的路径吗?
  2. 从节点A出发,前往节点B的哪条路径最短?

6.3.1 查找最短路径

实现广度优先搜索的数据结构,称为队列(queue)。

6.3.2 队列

队列是一种先进先出的数据结构,支持两种操作:入队和出队。而栈是一种先进后出的数据结构。

6.4 实现图

使用散列表来实现图。散列表是无序的,添加键-值对的顺序无关紧要。

graph = {}
graph["you"] = ["alice","bob","claire"]

6.5 实现算法

在Python中,可使用函数deque来创建一个双端队列

from collections import deque
search_queue = deque()          ##创建一个队列
search_queue += graph["you"]    ##入队

广度优先搜索的算法是:

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!")
			else:
				search_queue += graph[person]
				searched.append(person)
	return False

def person_is_seller(name):
	return name[-1] == 'm'

广度优先搜索的运行时间复杂度为 O ( V + E ) O(V+E) O(V+E),其中 V V V为顶点数, E E E为边数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值