考虑到类似于教科书添加的计算模型,其中每个操作花费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)
。
答案 0 :(得分: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 ,正如我们猜测的那样。
希望这有帮助!