Graph 理解空间复杂性-BFS解决方案-绘制布尔矩阵

Graph 理解空间复杂性-BFS解决方案-绘制布尔矩阵,graph,breadth-first-search,space-complexity,Graph,Breadth First Search,Space Complexity,我试图理解BFS解决方案在“编程元素访谈”中描绘布尔矩阵问题的空间复杂性。这类似于Leetcode中的洪水填充问题(问题733) 解决办法是这样的。我可以将需要更改的当前元素添加到队列中。任何相邻(上/下/上/下)节点也需要更改。所以我将它们添加到队列中(如果它们满足要添加到队列中的条件。每当处理队列中的元素时,都会添加其相邻的元素。我们将进行处理,直到队列不为空为止 我认为空间复杂度(最坏情况)将是O(MN),因为所有元素也可以在队列中。但书中提到,最坏情况下的空间复杂度是O(M+N),因为最

我试图理解BFS解决方案在“编程元素访谈”中描绘布尔矩阵问题的空间复杂性。这类似于Leetcode中的洪水填充问题(问题733)

解决办法是这样的。我可以将需要更改的当前元素添加到队列中。任何相邻(上/下/上/下)节点也需要更改。所以我将它们添加到队列中(如果它们满足要添加到队列中的条件。每当处理队列中的元素时,都会添加其相邻的元素。我们将进行处理,直到队列不为空为止


我认为空间复杂度(最坏情况)将是O(MN),因为所有元素也可以在队列中。但书中提到,最坏情况下的空间复杂度是O(M+N),因为最多有O(M+N)从节点到给定距离的条目。我知道元素也会不断地从队列中移除。即使如此,我也很难想象它们是如何达到这种空间复杂性的。有人能帮我理解吗?

关键是BFS访问节点的顺序是它们与起始节点的距离。这是什么使BFS适合在未加权图中查找

在任何时间点,队列都不能包含两个节点
u
v
,使得
distance(start,u)
distance(start,v)
的差值大于1。为了论证起见,假设
u
与起始节点的距离为3,而
v
的距离为5:

  • 如果队列中
    v
    出现在
    u
    之前,那么我们在
    u
    之前访问它-这是一个矛盾,因为BFS在访问距离较远的节点之前访问距离较早的节点
  • 如果队列中
    u
    出现在
    v
    之前,那么当我们访问
    u
    时,我们会将
    u
    的邻居添加到队列中。这些邻居与起始节点的距离为4,但它们现在位于队列中
    v
    之后,因此,尽管距离大于4-另一个矛盾
因此,在任何时候,都存在一些距离
d
,使得队列只包含距离
d
或距离
d+1
的节点,而且距离
d
的所有节点都出现在队列中距离
d+1
的任何节点之前。这是BFS算法的一种


假设您在一个M-by-N网格上进行BFS,其中每个节点都连接到其所有正交邻居。然后,对于任何
d>0
,距离
d
开始处的节点数最多为
4*d
,因此队列的最大可能大小为
4*d+4*(d+1)
。另外,任意两个节点之间的最大距离为
M+N-1
。因此,O(M+N)在任何时候都是队列大小的渐近界

如果网格中的某些节点“缺失”(即被洪水淹没的区域的颜色错误),则最大距离为O(MN)而不是O(M+N);因此这种情况要困难得多。直觉是,如果图形的路径较长,那么它的“大开度”就较小路径分支的空间,从而产生更小的队列。在极端情况下,图可以是一条长路径,但在这种情况下,队列的大小为O(1)

然而,有些图的
4*d
界限被破坏,因此队列可能会更大。例如,可以用下面的形式构造图,其中图的大小是O(2k),但队列大小达到O(3k),因此BFS的空间复杂度在这个图族上是Θ((M+N)log23)。因此引用的O(M+N)空间复杂性在最坏的情况下不成立,但在一般情况下可能成立


此图像是由堆溢出(张贴在注释中)生成的;开始节点为黄色,红色节点将同时在队列中。

最大值
4*d
不清楚,
M+N-1
为最大值是错误的。您是否认为是“空的”grid?@HeapOverflow在图论a中包括所有正交边,a是一个网格的子图。我猜OP可能对洪水填充部分网格感兴趣(在这种情况下,证明更困难),但这在问题中并不明确。好吧,他们没有很好地陈述,但如果你看,你会发现它确实是部分的。好吧,我认为无论如何,它值得编辑以使其明确。
4*d
界限实际上不适用。看这个例子,我有36个红细胞,与黄细胞的距离为7:(考虑不可见的白细胞)。既然我们证明它是错的(见kaya3的更新答案),我想知道这本书是否真的错了,或者它的问题是否“相似”,但不是真正等价的,可能有更多的限制,所以O(m+N)在他们的情况下,实际上是正确的。你能再检查一次,也许再告诉一些书上说的话吗?@HeapOverflow你是正确的。你标记的leetcode问题是类似的。我仍然不知道为什么书中标记为O(m+n)。给出的推理是,最多有m+n个顶点与给定条目的距离相同。