我有以下算法,但我不知道它的'复杂。有人能帮助我吗?输入大小为n。
int x = n;
while (x > 0)
{
System.out.println("Value is" + x);
x = x/5;
}
非常感谢!
答案 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)。