算法具有理论时间复杂度O(n ^ 2)。然而,当它在一些特定或现实的情况下运行时,例如,在Facebook社交图中,每个人不能拥有超过200个亲密朋友(我知道这不是真的,但只是假设),那么它的复杂性只是线性O( n)由于输入的一些特殊特性,即使理论上它仍然是O(n ^ 2)。
我相信在实际案例中我已经看到了算法复杂性的正式名称,但却无法准确记住它是什么。它有点“真正的复杂性”或“现实的复杂性”等等。有谁知道它是否有特殊名称?或者我碰巧记得我的梦想中的一些东西:)。我在技术写作中需要它。感谢
答案 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,这会改变您的平均复杂度,即使最佳情况和最差情况 - 案件没有变化。