这道题紫皮书上写的非常的不清楚,无奈只能看原文,然后发现原文也看不懂,就去看了下别人对这道题的理解,然后还是不是太懂,前前后后一共看了三个小时,才发现,紫皮书这个描述真的坑人。
题意:有两个i个元素的数组P和Q,P数据每个数据占Sp个字节,Q数据每个占Sq个字节,然后我们可以根据第i个元素在P中的位置(一个字节算一个位置),推出第i个元素在Q中的位置。这个公式可以表示为
Pi数据的位置/Sp=Qi数据的位置/Sq=i
比如说pi数据在第100个字节,一个p是占5个字节,那pi/p=20,也就是说是第20个元素,假设Q一个元素是占7个字节,那Q第20个元素的位置为20*7=140个字节。
要求:已知元素的个数n和Sq和Sp求储存Q数组所需要的最大的字节K,本来很简单的,
K=Sp*n/Sq
就好了,但是。题目说除法太慢了,要我们用另一个公式
K=(Sp*n+Sp*n<<A)>>B
注意这个公式与上一个公式不等价,就是两个算出来是不一样的(我那时候一直以为是一样的,导致我看了两个小时没看明白)
题目说Q数组储存的空间可以不连续,但不能叠加,也就