我正在研究一些关于 Dijkstra 算法的 Leetcode 问题,但我不太了解它的空间复杂度。我在网上查找,但找到了各种答案,有些答案相当复杂,所以我想知道我是否理解正确。
# initialize maxheap
maxHeap = [(-1, start_node)]
heapq.heapify(maxHeap)
# dijkstras algorithm
visit = set()
res = 0
while maxHeap:
prob1,cur = heapq.heappop(maxHeap)
visit.add(cur)
# update result
if cur == end_node:
res = max(res, -1 * prob1)
# add the neighbors to the priority queue
for nei,prob2 in adj_list[cur]:
if nei not in visit: heapq.heappush(maxHeap, (prob1 * prob2, nei))
因为我使用一个visit
集合和一个priority queue
来跟踪节点,那么空间复杂度是否只是 O(V),其中 V 是图中的顶点数?如果我必须使用一个在 Python 中生成邻接列表,那么空间复杂度是否会是dict
O(E),其中 E 是边数?