这是一个采访问题:
8x8棋盘上两个位置的最小位数是多少?
我找到了答案http://www.careercup.com/question?id=4981467352399872
但是当她说:
时,我无法理解作者试图传达的内容您可以用n位表示2 ^ n个值。但是,你可以代表 2 ^ n + 2 ^(n-1)+ 2 ^(n-2)+ ... 1 = 2 ^(n + 1) - 1个值 atmost n 位。因此,您可以使用just表示2 ^ 11 - 1 = 2047个不同的值 10位。
我不是在寻求作者在他的答案中提出的建议的解释,但我更感兴趣的是解决问题本身。据我所知,由于有64C2 = 2016
种方法在8x8
板上表示两个部分,所需的最小位数应为11.但有人建议只能使用10位代表董事会。怎么样?
答案 0 :(得分:2)
作者说您可以使用5,6,7,8,9和10位值表示位置。
在二进制2016中是11111100000(1024 + 512 + 256 + 128 + 64 + 32)
5 bits (00000 - 11111) represent 32 positions
6 bits (000000 - 111111) represent 64 positions
7 bits (0000000 - 1111111) represent 128 positions
8 bits (00000000 - 11111111) represent 256 positions
9 bits (000000000 - 111111111) represent 512 positions
10 bits (0000000000 - 1111111111) represent 1024 positions
总共2016年的职位。
这可以用具有比特集合的语言实现,例如C ++ bitset,它有一个大小函数来获取长度。
以下是2x2电路板的示例,希望能更好地解释这一点。
对于2x2板,有4C2(6)个位置
.x x. .. xx .x x.
.x x. xx .. x. .x
所以你可以使用3位000,001,010,011,100,101和110
但是6是二进制110(4 + 2)所以你可以使用1位(0-1)表示2个位置,2位(00,01,10,11)表示其余4位。所以位置是:
0,1,00,01,10,11。
答案 1 :(得分:0)
要回答问题并获得整数解,您必须评估以下等式:
bits = ceil(log2(combination(64,2)));
bits = ceil(log2(64!/(62!*2!)));
bits = ceil(log2(64*63/2));
bits = ceil(log2(32*63));
bits = ceil(log2(32)+log2(63));
bits = ceil(5+log2(63));
bits = ceil(5+5.97728);
bits = 11;
得出等式需要combinatorics的工作知识。
combination(64,2)
表示选择2
个64
个唯一空格的方式的数量。