通常会看到具有时间复杂度O(n), O(n*log n), O(2n)
等的算法。在实践中是否有任何算法具有时间复杂性,如O(n/log n), O(2^n/P(n))
(其中P(n)
是n的多项式)?如果是这样,有人可以举个例子吗?如果没有,为什么这些时间复杂性在实践中不常见?谢谢。
答案 0 :(得分:1)
在某些情况下,您确实会在实践中看到像O(n 2 / log n)这样的运行时。有一系列技术通常被称为“Method of Four Russians”,可用于加速某些类型的算法。通常情况下,四个俄罗斯人通过蛮力计算所有大小为Θ(log n)的输入问题的解决方案来加速算法,然后将大小为n或n 2 的原始输入重新编码为一组O(n / log n)或O(n 2 / log n)块,每个块是大小为Θ(log n)的子问题。这些算法的运行时间通常是某些多对数项的多项式,其中多对数加速来自原始问题大小已经被多对数因子缩小的事实。
例如,用于计算两个长度为n的字符串的编辑距离的标准DP算法在时间O(n 2 )中运行。使用四俄罗斯风格的加速,这可以改进到O(n2 / log2 n)。乘法布尔矩阵通常需要时间O(n 3 ),使用原始的四俄罗斯技巧可以将其改进为O(n 3 / log n)。
您可以想象类似的技巧可以为您提供像O(2 n / poly(n))这样的运行时 - 只需尝试在输入指数大的输入上使用上述算法。< / p>
希望这有帮助!