可分性3

时间:2014-06-15 11:45:43

标签: algorithm numbers

我正在阅读Writing an Efficient Method to Check if a Number is Multiple of 3上的一篇文章。

此处说明的方法是采用二进制表示中数字的oddsumevensum之间的差异。如果差异可被3整除,那么数字也是如此。我理解为什么我们这样做,但我无法理解为什么时间复杂度为O(log n)。

2 个答案:

答案 0 :(得分:1)

递归前的操作数以O(log n)为界,因为这是表示n所需的位数,以及随后将任何n转换为所需的移位操作数零。以下递归接收最多n的{​​{1}},因此其循环具有复杂度O(log(log n / 2))。由于该项小于初始循环复杂度(并且所有后续递归甚至更少),因此可以省略。确切地说,所有递归的 sum 必须小于要保持的初始循环,但我非常有信心(尽管我没有确切的证明),这就是这种情况。< / p>

答案 1 :(得分:0)

在递归之前的计数采用O(logN)并且它将输入减少到logn / 2,因此遵循定义以下的递归方程: -

  

T(n)= T(logn / 2)+ O(logn)

     

T(n)= logn + log(logn / 2)+ log(log(logn / 2)/ 2).....

     

忽视2

     

T(n)&lt; logn + log(logn)+ log(log(logn)).....

     log * n给出的迭代日志在实际上收敛得非常快   log * n&lt; 5

     

T(n)&lt; logn + log(logn)+ log2(n)+ log3(n)+ log4(n)&lt; 5 * LOGN

     

T(n)= O(logn)