我在geeksforgeeks上读到BFS用例之一是垃圾收集:
7)在垃圾收集中:广度优先搜索用于复制 使用Cheney算法进行垃圾收集。请参阅此内容 细节。广度优先搜索优先于深度优先搜索 因为更好的参考地点
让我思考......这种优势实施依赖于什么?更具体地说,图表表示依赖?以下是我对BFS更好地方的理解:
# Assume that node.neighbors is an "ArrayList"
for neighbor in node.neighbors: # BFS
queue.append(neighbor)
# cache miss when reading the first element of the array
# cache hits when iterating the rest
for neighbor in node.neighbors: # DFS
dfs(neighbor)
# worst case, with enough depth, it's possible that cache is full
# when recursion returns (LRU), which means cache miss for every neighbor
但是,如果node.neighbors
是一个LinkedList (我发现很多邻接列表示例都是如此),那么BFS是否仍然拥有更好的局部性(我能想到的另一件事)是BFS使用queue
,但我不知道如何推断它对地方的贡献?