图的深度优先遍历和图的广度优先遍历算法的时间复杂度
时间: 2023-12-25 17:28:09 浏览: 135
图的深度优先遍历和广度优先遍历算法的时间复杂度分别为O(n+e)和O(n+e),其中n为图中节点的个数,e为图中边的个数。深度优先遍历算法使用递归的方法,时间复杂度为O(n²),而广度优先遍历算法使用标记数组的方法,时间复杂度为O(n+e)。综合对比两个遍历算法,各有优点,而且遍历所得的结果不同,在实际使用的时候要考虑问题的实现方法来综合考量两种算法。
以下是两种Python实现图的遍历算法的例子:
1. 图的深度优先遍历算法
```python
# 定义一个函数来实现深度优先遍历
def dfs(graph, start):
visited, stack = set(), [start]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.add(vertex)
stack.extend(graph[vertex] - visited)
return visited
# 定义一个图
graph = {'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E'])}
# 输出深度优先遍历的结果
print(dfs(graph, 'A')) # 输出:{'E', 'D', 'F', 'A', 'C', 'B'}
```
2. 图的广度优先遍历算法
```python
# 定义一个函数来实现广度优先遍历
def bfs(graph, start):
visited, queue = set(), [start]
while queue:
vertex = queue.pop(0)
if vertex not in visited:
visited.add(vertex)
queue.extend(graph[vertex] - visited)
return visited
# 定义一个图
graph = {'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E'])}
# 输出广度优先遍历的结果
print(bfs(graph, 'A')) # 输出:{'B', 'C', 'A', 'F', 'D', 'E'}
```
阅读全文