Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 给出二部图时基于fibonacci堆或二进制堆的prim算法的时间复杂度_Algorithm - Fatal编程技术网

Algorithm 给出二部图时基于fibonacci堆或二进制堆的prim算法的时间复杂度

Algorithm 给出二部图时基于fibonacci堆或二进制堆的prim算法的时间复杂度,algorithm,Algorithm,我想进一步了解prim时间复杂性的细节。基本上,prim的时间复杂度是O(V^2)。当使用二进制堆或斐波那契堆时,时间复杂度将提高到O(E+V log(V))或O(Elog(V)) 我的问题如下 为什么有些代码使用基本的prim算法,甚至其他版本的prim都给出了更好的解决方案?是否有特殊原因使用基本prim算法,该算法给出一个O(V^2)?。与advanced prim的版本相比,实现非常简单。否则,我假设使用基本prim算法没有特殊原因 当给出二部图时,我可以将fibonacci或二进制堆p

我想进一步了解prim时间复杂性的细节。基本上,prim的时间复杂度是
O(V^2)
。当使用二进制堆或斐波那契堆时,时间复杂度将提高到
O(E+V log(V))
O(Elog(V))

我的问题如下

  • 为什么有些代码使用基本的prim算法,甚至其他版本的prim都给出了更好的解决方案?是否有特殊原因使用基本prim算法,该算法给出一个
    O(V^2)
    ?。与advanced prim的版本相比,实现非常简单。否则,我假设使用基本prim算法没有特殊原因

  • 当给出二部图时,我可以将fibonacci或二进制堆prim版本应用于二部图而不是基本prim版本吗?我分析的现有代码在二部图中使用基本prim算法。我想做的是提高代码速度。因此,我想使用二进制或斐波那契堆更改prim的数据结构,以减少执行时间。对于二部图使用高级prim版本而不是普通图是否可以实现


  • 当您在现实生活中实现该算法时,渐近时间复杂性并不是最重要的:实际效率和简单性也很重要

    首先,虽然使用Fibonacci堆的Prim算法的理论复杂度比二进制堆(O(E log V)vs O(E+V log V))要好,但是Fibonacci堆在实践中非常慢,因此您的E值应该非常大,以便注意到差异。我还没有看到任何实际的例子。简单二进制(或k进制,k为4或8)非常非常快

    其次,有稠密图(其中E~V^2)和稀疏图(其中E~V)。(当然有中间类别,但一般来说,任何实用图都可以被视为稀疏图或稠密图)。对于稠密图,无论在理论上还是在实践上,具有O(V^2)运行时的标准Prim算法都是最好的。也许这就是使用更简单版本的原因。或者,性能在这一点上根本不重要,因为图表并没有那么大

    关于你的第二个问题:我没有听说过在二部图中找到MST的任何具体算法。当然,你可以应用任何版本的算法,但我怀疑是否存在任何特殊的技巧,为二分的情况

    对于稀疏图,考虑Kruskal算法。它是O(E log E),但唯一重要的部分是排序,这在今天也是非常快的