Algorithm 了解算法复杂性
有人能解释一下为什么bellow算法的复杂性是O(logn)? 这是来自的问题之一,他们的解释/提示我不清楚(见下面的代码块)Algorithm 了解算法复杂性,algorithm,math,time-complexity,Algorithm,Math,Time Complexity,有人能解释一下为什么bellow算法的复杂性是O(logn)? 这是来自的问题之一,他们的解释/提示我不清楚(见下面的代码块) 1。请注意,在每次迭代中,我都会从一些任意大的数字开始,比如1028:D 然后重复除以,直到降到0 每次循环顶部的i值为: 1024 512 256 128 64 32 16 8 4 2 1 0 然后向后看:你可以从i=1开始,每次乘以2,直到达到1024 因此,这是需要乘以2得到n的次数,即log2(n)添加变量ni=floor(lg2(i))。在while语句的每个
1。请注意,在每次迭代中,我都会从一些任意大的数字开始,比如1028:D
然后重复除以,直到降到0
每次循环顶部的i
值为:
1024 512 256 128 64 32 16 8 4 2 1 0
然后向后看:你可以从i=1开始,每次乘以2,直到达到1024
因此,这是需要乘以2得到n的次数,即log2(n)添加变量ni=floor(lg2(i))
。在while
语句的每个循环中,变量i
从i
变为i'=i/2
,因此ni
变为ni'
,满足以下条件:
ni' = floor(lg2(i'))
= floor(lg2(i/2))
= floor(lg2(i) - lg2(2))
= floor(lg2(i) - 1)
= floor(lg2(i)) - 1
= ni - 1
这表明在每个循环中,ni
减少1
。由于ni
从floor(lg2(N))
开始,因此中必须有floor(lg2(N))
循环,而整数幂运算可以定义为重复乘法。因此,按定义,乘以1/2
,k
倍等于乘以(1/2)^k=1/2^k
。
ni' = floor(lg2(i'))
= floor(lg2(i/2))
= floor(lg2(i) - lg2(2))
= floor(lg2(i) - 1)
= floor(lg2(i)) - 1
= ni - 1