Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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 在一个只有k条不同边代价的图上,有没有一种算法可以找到一棵时间为O(n logk)的最小生成树?_Algorithm - Fatal编程技术网

Algorithm 在一个只有k条不同边代价的图上,有没有一种算法可以找到一棵时间为O(n logk)的最小生成树?

Algorithm 在一个只有k条不同边代价的图上,有没有一种算法可以找到一棵时间为O(n logk)的最小生成树?,algorithm,Algorithm,在斯基纳的算法设计书中,这种算法作为一个练习留给读者,据说它只是普里姆算法的一个修改(练习6-11)。有人能设计这样的算法吗?具有简单优先级队列的Prim是O(m+n lg n),其中m是边的数量,n是顶点的数量。如果您使用具有相同优先级的bucket条目(例如,使用链表),您将自动获得O(m+n lg k) 好的,这种情况的最新技术是O(m),。是的,问题应该要求O(m+n log k)。很明显,ω(m)是一个下限,因为如果不检查所有的ω(m),我们甚至无法找到最低重量边 对于记录,约定是n表

在斯基纳的算法设计书中,这种算法作为一个练习留给读者,据说它只是普里姆算法的一个修改(练习6-11)。有人能设计这样的算法吗?

具有简单优先级队列的Prim是O(m+n lg n),其中m是边的数量,n是顶点的数量。如果您使用具有相同优先级的bucket条目(例如,使用链表),您将自动获得O(m+n lg k)


好的,这种情况的最新技术是O(m),。

是的,问题应该要求O(m+n log k)。很明显,ω(m)是一个下限,因为如果不检查所有的ω(m),我们甚至无法找到最低重量边

对于记录,约定是n表示顶点数,m表示边数

喜欢我的书:-)


史蒂文·斯基纳(Steven Skiena)

我要说清楚,我认为问题中的O(n lgk)是错误的。事实上,我在斯基纳的书中找不到这样的练习,我在问题中加入了练习的内容。我不明白如果你用相同的优先级来存储条目,你怎么能从O(m+nlogn)到O(m+nlogk),优先级队列最多有k个元素。例如,在Java中,您可以使用树形图。@cstheoryuser:问题在Skiena的书中:Q.6-11.n=| V |根据我的理解,如果我们使用有界高度优先级队列(第374页,常量时间插入和find min),我们可以将此算法减少到O(m)。