二项式堆可以用于查找图中的连接组件吗?

Can binomial heap be used to find connected components in a graph?

二项式堆如何用于查找图的连通分量,但不能使用它,为什么?

我从未见过以这种方式使用二项式堆,因为图连通分量通常使用深度优先搜索或广度优先搜索找到,并且这两种算法都不需要您使用任何类型的优先级队列。当然,您可以通过用优先级队列替换 DFS 或 BFS 的堆栈或队列来执行某种 "priority-first search" 来查找连接的组件,但是没有理由这样做。这会将查找连接组件的成本降低到 O(m + n log n) 而不是你从普通 BFS 或 DFS 获得的 O(m + n)。

有一种方法可以让您勉强地说二项式堆可能有用,这是一种用于查找连通分量的不同策略。或者,您可以使用 disjoint-set forest 来标识连接的组件。您从每个节点在其自己的分区中开始,然后为每个边调用 union 操作以将 link 个节点组合在一起。完成后,您将得到一组树,每棵树代表一个连接的组件。

有许多策略可用于确定如何在不相交的森林中 link 树。其中之一是 union-by-size,其中每当您需要选择要更改的代表时,您选择较小尺寸的树并将其指向较大尺寸的树。你可以证明,这样可以形成的高度为 k 的最小树是秩为 k 的二叉树。这是通过将所有节点配对,然后取出代表并将它们配对等形成的。(自己尝试一下 - 是不是很酷?)

但是,对我来说,这更像是巧合。这与二项式 heaps 无关,而与二项式 trees 有关算法的执行是理所当然的事情。

所以我得到的最佳答案是 "technically you could do this, but you shouldn't, and technically binomial trees arise in this other context that's related to connected components, but that's not the same as using binomial heaps."

希望对您有所帮助!