试图找出复杂时间

时间:2018-06-12 18:40:11

标签: algorithm time-complexity asymptotic-complexity

我想弄清楚以下时间的复杂性:

首先:

 j = 1
 while j < n:
    j += log(j + 5)

这会是 log n 吗?

其次,复发关系:

 T(n) = T(n/2) + T(n/4) + n

我知道你不能在这里应用大师定理,但我不知道如何找到复杂性。一个解决方案会很好,但是我猜想如何帮助我理解这一点会很好。

接下来,另一个递归关系:

 T(n) = T(n/2) + log(n)

我相当肯定,Master定理可以在这里应用。离开我们:

 a = 1, b = 2, f(n) = log(n)

这意味着我们会比较

 n^(log_2(1)) to log(n) ==> n^0 to log(n)

使它成为Theta(log(n))

最后

 j=1
 while(j<n):
    k=j
    while k<n:
       k += sqrt(k)
    j += 0.25*j

我可以告诉外循环将运行4次。然而,我不清楚内循环。是 log ^ 2 n log log n 还是我完全不在思考。

我正在学习考试,并且发现我所掌握的材料严重不足。

1 个答案:

答案 0 :(得分:0)

第一个是O(n)我们知道,每次至少1添加到上一个结果中。

如果你开始使用递归方程,第二个是:

T(n) = 2T(n/4) + T(n/8) + n + n/2 < 3T(n/4) + 3n/2

我们可以从主定理中说T(n) = \Theta(n)

第三个是真的,它是\Theta(log(n))。 第四个循环中的外循环是T(n+1) = 5T(n)/4。这意味着外循环运行log_{1.25}n。在最坏的情况下,我们可以说内部循环在O(n)中运行。因此,它将是O(nlog(n))。如果你想要更严格的复杂性分析,你应该仔细检查,。