计数到N的位模型成本

时间:2014-01-22 19:08:51

标签: algorithm binary time-complexity addition counting

考虑到类似于教科书添加的计算模型,其中每个操作花费1个单位,用于计算到 n 的二进制加法的位模型成本是多少,其中 n 是两个人的力量?

MODEL

计算模型基于写有0和1的玩具积木。最初,零块位于表(免费)上。每个块操作(删除或添加块)的成本为1个单位。

目标是将表格上的(二进制)数字替换为1,2,3,...,n。这是通过模仿 add-with-carry 来完成的。

例如,我们从0开始。要计数到1,我们需要删除0(成本1)并添加1(成本1)。然后,要计数到2,我们需要添加1(成本1)。然后我们删除两个(成本2),替换为0(成本1)并在前面添加1(成本1)以使10(基数2)(成本1)。依此类推,直到 n

我认为当最低有效位为0时,成本为2(删除0,加1)。当lsb为1时,成本为5。

增加数字的费用

0000 ->  0           (0 time unit to go to 0 - block already there)
0001 ->  2           (2 operations to go to 2)
0010 ->  1*4 + 1     (1 carry)
0011 ->  2
0100 ->  2*4 + 1     (2 carries)
0101 ->  2
0110 ->  5
0111 ->  2
1000 ->  3*4 + 1     (3 carries)
1001 ->  2
1010 ->  5
1011 ->  2
1100 ->  2*4 + 1
1101 ->  2
1110 ->  5
1111 ->  2
10000 ->  4*4 + 1
10001 ->  2
10010 ->  5
...

我开始看到一种模式,但无法将其形式化。

看起来像T(n) = sum from k = 1 to log n of (4k +1) + 9 * 2^(log n - 2)

1 个答案:

答案 0 :(得分:1)

考虑这一点的一种方法是总结而不是。假设您计算最多2 k 。然后:

  • 在所有2个 k 操作中,1位将翻转。
  • 在这些操作的2 k / 2 = 2 k-1 中,2位将翻转。
  • 在这些操作的2 k / 4 = 2 k-2 中,4位将翻转。
  • 在这些操作的2 k / 8 = 2 k-3 中,8位将翻转。
  • ...
  • 在2 k / 2 k = 1次操作中,2 k 的位将翻转。

(在上面,我正在计算添加一个新的1位作为“翻转”而不是“添加”,因为您可以将其视为从0翻转到1或添加新的1位数到前。)

这意味着必须更改的总位数由

给出
  

2 k + 2 k-1 + 2 k-2 + ... + 1

     

= 2 k + 1 - 1

因此总会有2个 k + 1 - 1位被翻转。我们可以检查一下:从0到1计数,我们得到

0
1

因此我们预测会翻转一位(1 = 2 1 - 1)。当从0到2计数时,我们得到

00
01
10

这总共有三位翻转(0 - > 1 - > 0在1的位置,0 - > 1在2的位置),3 = 2 2 - 1 ,正如我们猜测的那样。

希望这有帮助!