现实案例中复杂性的正式名称

时间:2013-11-06 09:05:13

标签: algorithm time-complexity

算法具有理论时间复杂度O(n ^ 2)。然而,当它在一些特定或现实的情况下运行时,例如,在Facebook社交图中,每个人不能拥有超过200个亲密朋友(我知道这不是真的,但只是假设),那么它的复杂性只是线性O( n)由于输入的一些特殊特性,即使理论上它仍然是O(n ^ 2)。

我相信在实际案例中我已经看到了算法复杂性的正式名称,但却无法准确记住它是什么。它有点“真正的复杂性”或“现实的复杂性”等等。有谁知道它是否有特殊名称?或者我碰巧记得我的梦想中的一些东西:)。我在技术写作中需要它。感谢

3 个答案:

答案 0 :(得分:2)

我不认为这种复杂性有一个特殊的名称,因为算法的性能很大程度上取决于数据分布。但是,您估算某些真实世界数据的运行时间的方法名称为Smoothed Analysis

答案 1 :(得分:1)

据我所知,还没有正式名称,但是" 真实世界平均/最佳/最差情况复杂性"可能是可以理解的。

仅为完整性:

最坏情况运行时间为O(n 2 )。

最佳案例运行时间为O(n)。

我们无法真正说明平均案例的运行时间来自给定的内容。

Insertion sort就是一个例子。当数据已经排序时,它在O(n)中运行,但在平均/最差情况下以O(n 2 )运行。

答案 2 :(得分:0)

我认为最好的答案是平均情况。您的平均值计算为输入概率的加权平均值,因此如果算法对输入a * n + b的复杂度I1和输入c * n^2 + d * n + e的{​​{1}},则其平均复杂度将是:

I2

AC = p * (a * n + b) + (1 - p) * (c * n^2 + d * n + e) 的输入概率为p。如果在实际情况下,输入几乎总是 I1(即I1)那么您的平均复杂度将为O(n)。学术证明倾向于假设输入的均匀分布(所有输入具有相同的发生概率,在我的例子中p = 1),但是为了研究“真实世界”中算法的复杂性,你必须估计输入的实际发生概率,这可能会改变算法的平均复杂度(尽管通常不会:在示例中,即使p = 1/2,平均复杂度仍然是O(n ^ 2) ),虽然因素会有所改变)。

如果假设没有人拥有超过200个朋友,则隐含地将p = 0.99999的概率设置为0,这会改变您的平均复杂度,即使最佳情况和最差情况 - 案件没有变化。

相关问题