首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪种复杂性更好?

哪种复杂性更好?
EN

Stack Overflow用户
提问于 2014-05-16 00:01:25
回答 3查看 455关注 0票数 1

假设一个图有N个节点和M条边,总迭代次数为k。(k是一个常数整数,大于1,独立于NM)

D=M/N是图的平均度。

我有两个基于图的迭代搜索算法。

第一种算法的复杂度为O(D^{2k})时间。

第二种算法具有O(k*D*N)时间复杂度。

根据它们的大O时间复杂度,哪一个更好?

有些人告诉我,第一种方法更好,因为图中的节点数N通常比现实世界中的D多得多。

其他人说第二个更好,因为第一个的k是指数增加的,但是第二个是线性增加的。

EN

回答 3

Stack Overflow用户

发布于 2014-05-16 00:22:03

摘要

你的两个O都不能支配另一个,所以正确的方法是根据输入来选择算法

O支配地位

  1. D<1 (稀疏图)和相似的情况下更好。
  2. D相对较大的情况下

更好

算法选择

重要的参数不仅是O,而且是它前面的实际常量。例如,实际上是100000*nO(n)算法比当n<100000时仅为n^2O(n^2)算法更差。

因此,给定图和期望的迭代次数k,您需要估计每个算法的预期性能,并选择最佳算法。

票数 3
EN

Stack Overflow用户

发布于 2014-05-16 12:36:00

大O表示法描述了函数在其参数增长时是如何增长的。因此,如果你想估计算法时间消耗的增长,你应该首先估计D和N将如何增长。这需要来自您的域的一些附加信息。

如果我们假设N无论如何都会增长。对于D,您有几个选择:

  1. D保持不变-第一个算法肯定是better
  2. DN成比例增长-第二个算法是better

更一般的情况是:如果D的增长速度比N^(1/(2k-1))快,则应该选择第一种算法,否则选择第二种算法。

票数 2
EN

Stack Overflow用户

发布于 2015-04-24 21:53:05

对于每个固定的D,D^(2k)是一个常数,因此如果M足够大,第一个算法将击败第二个算法。然而,什么足够大取决于D。如果D不是常量或有限的,这两个复杂性是无法比较的。

在实践中,您将实现这两种算法,找到它们的实际速度的最佳近似值,并根据您的值选择速度更快的算法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23683327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档