【发布时间】:2015-06-24 17:06:55
【问题描述】:
为了获得算法的时间复杂度,我必须简化以下公式:(n^2-n)/3。是否有任何适用的规则可以让我将这个表达式进一步简化为更“常见”的 Θ(n^2) 或类似的东西(我假设这就是结果,可能是错误的)。
我根本不知道如何处理这里的减法。通常,如果两个值相加,您只考虑最高的那个来分析算法的复杂性。在这种情况下我该怎么办?
【问题讨论】:
为了获得算法的时间复杂度,我必须简化以下公式:(n^2-n)/3。是否有任何适用的规则可以让我将这个表达式进一步简化为更“常见”的 Θ(n^2) 或类似的东西(我假设这就是结果,可能是错误的)。
我根本不知道如何处理这里的减法。通常,如果两个值相加,您只考虑最高的那个来分析算法的复杂性。在这种情况下我该怎么办?
【问题讨论】:
由于Θ 是一个紧界,因此没有更好的简化方法,如果某个函数f(n) 同时在Θ(h(n)) 和Θ(g(n)) 中,则意味着Θ(h(n)) = Θ(g(n)) ,因此对于您会发现的任何其他功能,在您的示例中超过 Θ(n^2) 的信息增益是没有的。
在处理n^k - n^m 的减法时,其中k>m,在分析大 Θ 符号时,您可以简单地“扔掉”n^m。
这是真的,因为:
n^k - n^m <= n^k
-> and thus it is in O(n^k)
另一方面:
对于每个m,k,都有一些值N,这样对于所有n>N:0.5n^k >= n^m,因此:
n^k - n^m >= n^k - 0.5n^k = 0.5n^k for n > N
-> it is also in Omega(n^k)
由于我们找到了上限和下限,我们可以得出结论n^k-n^m,当k>m 在Θ(n^k) 中。
(可以对不同 Θ 复杂度类中的一般 f(n),g(n) 进行类似的证明)。
【讨论】: