我正在对循环进行分析并得到以下循环:
for (int i = 1; i <=n; i *= c) {
// some expressions
}
for (int i = n; i > 0; i /= c) {
// some expressions
}
据我所知,循环增长率是log n(基数c) 但是我在做一些测试例子时遇到困难,如下所示:
循环-1: 如果c = 2且n = 8那么
循环运行为i = 1,2,4,8(4次)但是log 8 = 3? [应为4]
回路2: 如果c = 2且n = 8那么
循环运行为i = 8,4,2,1(4次)但是log 8 = 3? [应为4]
我在哪里犯了错误。请帮助我将结果与Time rate Log n匹配。感谢
答案 0 :(得分:1)
O符号总是近似值,或者更好的是最坏情况下的限制。例如O(logN)=O(logN+X)
,当X是常数时。
在您的示例中,for循环的精确迭代为logN+1
,这意味着
它是O(logN+1)=O(logN)
。
答案 1 :(得分:1)