【发布时间】:2010-11-12 13:30:22
【问题描述】:
这个问题与Array of pairs of 3 bit elements有关
这个数组有 52 对(大约 40 个字节),我想在指定的数组之前找到第一对,它的值不同于 0(使用的对)。
显而易见的解决方案是检查每一对
这张图片可以更好地解释这种情况:
使用了第 0、1 和 51 对。
我想在 51 之前找到第一个使用的对(这里是 1)。
我尝试了类似的技巧
if(*((int *)&array[arrayPos]) == 0) {
arrayPos -= sizeof(int);
pairPos -= ???
}
这里的问题是,从pairPos中减去并不是那么简单,因为6位/对,所以我以一个基于pairPos之间的一些关系的查找表结束> 和 arrayPos,所有这一切都使解决方案的性能变得微不足道。
有什么方法可以让这个查找更快?另一个问题是只有 1 个未使用的字节......也许我可以为另外 4 个腾出空间。如果至少有 7 个,我可以使用数组的位图,跳过未使用的对会更快。
【问题讨论】:
-
数据的格式一定要这样吗。有时您可以通过更改数据的布局来提高算法的效率。
标签: c++ optimization memory performance