Algorithm 给定循环O(logn)或O(n)的时间复杂度
我们和我的朋友讨论了循环,我认为第一个循环是Ologn,第二个循环是On。然而,对于后者,他说它也不是开着的 你能解释一下吗?简短回答: 这两个循环都是logn,因为对于输入n,两个循环都将运行logn次 由于for循环中的i*=2,第一个循环运行logn次,而第二个循环运行logn次,因为for循环中的上限直接设置为该值 详细说明: Big-O表示函数的增长率。第二个循环是你感到困惑的一个,实际上是两个循环中比较简单的一个。您可以直接看到,对于任何输入n,函数始终只需要与Log n成比例的时间 因此,第二个循环的增长率与对数n成正比,换句话说,等于对数n。简单回答: 这两个循环都是logn,因为对于输入n,两个循环都将运行logn次 由于for循环中的i*=2,第一个循环运行logn次,而第二个循环运行logn次,因为for循环中的上限直接设置为该值 详细说明: Big-O表示函数的增长率。第二个循环是你感到困惑的一个,实际上是两个循环中比较简单的一个。您可以直接看到,对于任何输入n,函数始终只需要与Log n成比例的时间Algorithm 给定循环O(logn)或O(n)的时间复杂度,algorithm,time-complexity,big-o,complexity-theory,Algorithm,Time Complexity,Big O,Complexity Theory,我们和我的朋友讨论了循环,我认为第一个循环是Ologn,第二个循环是On。然而,对于后者,他说它也不是开着的 你能解释一下吗?简短回答: 这两个循环都是logn,因为对于输入n,两个循环都将运行logn次 由于for循环中的i*=2,第一个循环运行logn次,而第二个循环运行logn次,因为for循环中的上限直接设置为该值 详细说明: Big-O表示函数的增长率。第二个循环是你感到困惑的一个,实际上是两个循环中比较简单的一个。您可以直接看到,对于任何输入n,函数始终只需要与Log n成比例的时间
因此,第二个循环的增长率与对数n成正比,或者换句话说,等于对数n。如果有疑问,只需用一些值替换n值,然后干运行两个循环 以n=100为例 //回路1
对于int i=1;i如果有疑问,只需用一些值替换n的值,并对两个循环进行干运行 以n=100为例 //回路1
对于int i=1;i第一个循环将迭代到无穷大,因为i=0。你为什么认为后者是开的?@snr:除非logn是不与logn成比例的,否则这是一个线性循环,但logn是上界,所以logn迭代。但上限本身是logn…@WillemVanOnsem illimunating回答现在看到了吗,谢谢sir,第一个循环将迭代到无穷大,因为i=0。你为什么认为后者是开启的?@snr:除非logn不是与logn成比例的,否则这是一个线性循环,但以logn为上界,所以logn迭代。但上限本身是logn…@WillemVanOnsem illimunating回答现在看到了,谢谢先生
//loop1
for (int i = 1; i <= n; i*=2) { }
//loop2
for (int i = 1; i <= logn; i++) { }