Data structures 棋盘上所需的最小位
这是一个采访问题: 8x8棋盘上两个位置的最小位表示是多少 我找到了答案 但我无法理解作者试图表达的意思,她说: 可以用n位表示2^n个值。但是,您可以代表 2^n+2^(n-1)+2^(n-2)+。。。1=2^(n+1)-1个大气值n 位。因此,您可以使用以下公式表示2^11-1=2047个不同的值 10位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
电路板上有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;