Data structures 棋盘上所需的最小位

Data structures 棋盘上所需的最小位,data-structures,bit-manipulation,chess,Data Structures,Bit Manipulation,Chess,这是一个采访问题: 8x8棋盘上两个位置的最小位表示是多少 我找到了答案 但我无法理解作者试图表达的意思,她说: 可以用n位表示2^n个值。但是,您可以代表 2^n+2^(n-1)+2^(n-2)+。。。1=2^(n+1)-1个大气值n 位。因此,您可以使用以下公式表示2^11-1=2047个不同的值 10位 我不是在寻求对作者在回答中的建议的解释,但我更感兴趣的是解决问题本身。据我所知,由于在8x8电路板上有64C2=2016表示两个部件的方法,因此所需的最小位数应为11。但有人建议,可以用1

这是一个采访问题:

8x8棋盘上两个位置的最小位表示是多少

我找到了答案

但我无法理解作者试图表达的意思,她说:

可以用n位表示2^n个值。但是,您可以代表 2^n+2^(n-1)+2^(n-2)+。。。1=2^(n+1)-1个大气值n 位。因此,您可以使用以下公式表示2^11-1=2047个不同的值 10位


我不是在寻求对作者在回答中的建议的解释,但我更感兴趣的是解决问题本身。据我所知,由于在
8x8
电路板上有
64C2=2016
表示两个部件的方法,因此所需的最小位数应为11。但有人建议,可以用10位来代表电路板。如何?

作者说,可以使用5、6、7、8、9和10位值来表示位置

2016年的二进制数据为11111100000(1024+512+256+128+64+32)

共有2016个职位

这可以用具有位集合的语言实现,例如C++ BITSET,它具有一个长度函数。 这里有一个2x2板的例子,希望能更好地解释这一点

对于2x2板,有4C2(6)个位置

.x  x.  ..  xx  .x  x.
.x  x.  xx  ..  x.  .x
所以可以使用3位000001010011100101和110

但是6是二进制的110(4+2),所以你可以用1位(0-1)表示2个位置,用2位(00,01,10,11)表示剩下的4个位置。因此,这些立场是:


0,1,00,01,10,11。

要回答问题并获得整数解,必须计算以下等式:

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;
推导这个方程需要一个实用的数学知识


<代码>组合(64,2)< /代码>表示选择代码< >代码> 2 >代码> >代码64 >代码>可能的唯一空间。

只有当你认为前导零是重要的时,作者的陈述才是有意义的,即<代码> 0110 < /代码>与<代码> 110 < /代码>不同。你能详细说明它是如何工作的吗?我无法理解逻辑。谢谢当然,这是相当愚蠢的,因为你需要以某种方式编码长度,这需要比你节省的一位更多。是的,我认为这纯粹是一个练习。
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;