运行时分析:更正我的示例为什么这些循环具有O(log n)时间复杂度

时间:2016-07-06 09:11:02

标签: time-complexity

我正在对循环进行分析并得到以下循环:

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匹配。感谢

2 个答案:

答案 0 :(得分:1)

O符号总是近似值,或者更好的是最坏情况下的限制。例如O(logN)=O(logN+X),当X是常数时。 在您的示例中,for循环的精确迭代为logN+1,这意味着 它是O(logN+1)=O(logN)

答案 1 :(得分:1)

以下是学术参考的最佳答案:

enter image description here

来源:http://faculty.kfupm.edu.sa/ics/jauhar/ics202/Unit03_ComplexityAnalysis1.ppt