简单算法的复杂性

时间:2015-05-12 11:11:58

标签: java algorithm complexity-theory code-complexity

我有以下算法,但我不知道它的'复杂。有人能帮助我吗?输入大小为n。

int x = n;
while (x > 0)
{
    System.out.println("Value is" + x);
    x = x/5;
}

非常感谢!

2 个答案:

答案 0 :(得分:3)

在每次迭代中,x除以5。 x要小于1(因此为0)需要多少次迭代?

答案是log5(n)(n的基数为5的对数),即O(log(n))

答案 1 :(得分:0)

令T(n)为输入n的操作次数。

每次迭代执行O(1)操作。所以:

T(n) = O(1) + T(n/5)
     = O(1) + O(1) + T(n/25) = 2*O(1) + T(n/25)
     = 2*O(1) + O(1) + T(n/125) = 3*O(1) + T(n/125)

每次迭代都会将O(1)添加到复杂性中,然后运行直到n /(5 ^ a)< 1其中a是执行的迭代次数(因为您的输入是整数)。

条件何时举行?只需在不等式的两边取log5(登录基数为5),然后得到:

log5(n/(5^a)) < log5(1) = 0
log5(n) - log5(5^a) = 0
log5(n) = a*log5(5)       [because log(b^c) = c*log(b)]
log5(n) = a

因此,您将需要log5(n)次迭代,每次迭代都会添加O(1),因此您的复杂性为 log5(n)