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

二项式堆如何在查找图的连接组件时有用,为什么不能使用它呢?

iCMS 回答:可以使用二项式堆来查找图中的连接组件吗?

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

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

有许多策略可以确定如何在不相交的森林中链接树木。其中之一是按大小划分的联盟,其中,每当您需要选择要更改的代表时,就选择较小大小的树并将其指向较大大小的树。您可以证明以这种方式形成的最小高度为k的树是秩为k的二叉树。这是通过配对所有节点,然后取代表并配对来完成的,等等。(亲自尝试-不错吗?)

但是,对我而言,这更像是一个巧合。这与二项式 heaps 无关,而与二项式 trees 有关,并且这种特殊形状仅在您正在寻找病理病例的情况下才会出现,而不是自然而然地出现。算法的执行。

因此,我的最佳答案是“从技术上讲,您可以这样做,但您不应该这样做,从技术上讲,在与连接的组件有关的其他上下文中会出现二项式树,但这与使用二项式堆不同。” / p>

希望这会有所帮助!

本文链接:https://www.f2er.com/2149983.html

大家都在问