此问题与Array of pairs of 3 bit elements
此数组有52对(约40字节),我想在指定的一对之前找到第一对,它的值不同于0(使用对)。 显而易见的解决方案是检查每对<而不是这个(从右到左扫描),但如果有很多未使用的对(设置为0),这看起来效率很低。查找阵列中指定索引之前最近使用过的索引(快速)
该图像可以更好地解释的情况:
双人0,1和51被使用。
我想在51之前找到第一个使用的对(这里是1)。
我尝试的技巧,比如
if(*((int *)&array[arrayPos]) == 0) {
arrayPos -= sizeof(int);
pairPos -= ???
}
这里的问题是,从pairPos减去并非如此简单,因为6位/对的,所以我有一个查找表结束基于之间的一些关系pairPos and arrayPos,所有这些使得解决方案的表现像微不足道。
有什么方法可以使查找速度更快?另一个问题是,只有1个未使用的字节...也许我可以为另外4个空间创建空间。如果至少有7个我可以使用该数组的位图,并且跳过未使用的对会快得多。
数据的格式是否必须如此。有时你可以通过改变数据的布局来使算法更有效率。 – Skizz 2009-07-21 08:17:18