简单算法的复杂性
complexity of simple algorithm
我有以下算法,但我不知道它的复杂性。有人可以帮我吗?输入大小为 n.
int x = n;
while (x > 0)
{
System.out.println("Value is" + x);
x = x/5;
}
非常感谢!
在每次迭代中,x 除以 5。
x 小于 1(因此小于 0)需要多少次迭代?
答案是log5(n)
(n的以5为底的对数),即O(log(n))
。
令 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(log in base 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).
我有以下算法,但我不知道它的复杂性。有人可以帮我吗?输入大小为 n.
int x = n;
while (x > 0)
{
System.out.println("Value is" + x);
x = x/5;
}
非常感谢!
在每次迭代中,x 除以 5。 x 小于 1(因此小于 0)需要多少次迭代?
答案是log5(n)
(n的以5为底的对数),即O(log(n))
。
令 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(log in base 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).