我在数据结构课程的作业中有一个问题,我想到了两种算法来解决这个问题,其中一种是O(n ^ 2)时间,另一种是:
T(n)= 3 * n + 1 * 1 + 2 * 2 + 4 * 4 + 8 * 8 + 16 * 16 + ... + logn * logn
我不确定哪个更好。
我知道从1到logn的几何级数之和为O(logn),因为我可以为此使用几何级数公式。但是这里我有几何级数的平方,我不知道如何计算。
答案 0 :(得分:2)
您可以将其重写为:
log n * log n + ((log n) / 2) * ((log n) / 2) + ((log n) / 4) * ((log n) / 4) ... + 1
如果您将log^2 n
替换为x
(以便于理解),则会得到:
x + x/4 + x/16 + x/64 + ... + 1
您可以使用公式对序列求和,但是如果您不必形式化,那么基本逻辑就足够了。试想一下,如果您有1/4的馅饼,然后添加1/16的馅饼和1/64等,您可以清楚地看到,它将永远不会完整:
x + x/4 + x/16 + x/64 + ... + 1 < 2x
这意味着其O(x)
将x
换回log^2 n
:
T(n) = O(3*n + log^2 n) = O(n)