Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 二项式堆可以用于查找图中的连接组件吗?_Algorithm_Math_Graph_Connected Components_Binomial Heap - Fatal编程技术网

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

Algorithm 二项式堆可以用于查找图中的连接组件吗?,algorithm,math,graph,connected-components,binomial-heap,Algorithm,Math,Graph,Connected Components,Binomial Heap,二项式堆在查找图的连接组件时如何有用,它不能被使用,为什么?我从未见过以这种方式使用二项式堆,因为与图连接的组件通常使用深度优先搜索或广度优先搜索来查找,而且这两种算法都不要求使用任何优先级队列。当然,您可以通过将DFS或BFS的堆栈或队列替换为优先级队列来执行某种“优先级优先搜索”,以查找连接的组件,但没有什么理由这样做。这会将查找连接组件的成本降低到O(m+n logn),而不是普通BFS或DFS中的O(m+n) 有一种方法,你可以毫不犹豫地说,二项式堆可能是有用的,那就是在寻找连接组件的不

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

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

有一种方法,你可以毫不犹豫地说,二项式堆可能是有用的,那就是在寻找连接组件的不同策略中。或者,您可以使用来标识连接的零部件。从每个节点在其自己的分区中开始,然后为每个边调用union操作以将节点链接在一起。完成后,将得到一个树集合,每个树表示一个连接的组件

有许多策略可用于确定如何在不相交的集合林中链接树。其中之一是按大小联合,在这种方法中,每当您需要选择要更改的代表时,您都会选择较小的树,并将其指向较大的树。你可以证明,以这种方式形成的最小高度为k的树是秩为k的二叉树。这是通过将所有节点配对,然后取下代表并将其配对,等等形成的(自己尝试一下,这不是很酷吗?)

但对我来说,这更像是巧合。这不是关于二项式堆的问题,而是关于二项式树的问题,这种特殊的形状只有在你寻找一个病理病例时才会出现,而不是在执行算法的过程中自然而然地出现

所以我得到的最好的答案是“技术上你可以这样做,但你不应该这样做,技术上二叉树出现在与连接组件相关的其他上下文中,但这与使用二叉堆不同。”

希望这有帮助