【发布时间】:2016-03-17 09:40:56
【问题描述】:
我遇到了一个问题,我可以通过不同地安排我的算法来规避,但这很有趣,也许你们中的一个人有一个好主意。
情况如下:我有两个无符号长整数列表,两个列表的大小相同,如果这有帮助,您可以假设这个大小是 2 的幂。这些列表的大小通常在数百个范围内。现在我想计算一个整数,该整数在第一个列表比第二个列表具有更多设置位的每个位置都有一个设置位。
速度就是一切。
Simplified example:
list1 list2
1010 0101
1111 0000
1100 0011
1010 0101
result: 1010
because of 4>0, 2<=2, 3>1, 1<=3
编辑:数据的替代排列将导致位向量包含现在在几个不同向量中某个位置的位。在那种情况下,我可以只使用 bit counting algorithm 然后进行比较,这将在两个列表中每 64 位少于 30 次操作。基本上我有一个位矩阵,我可以将位向量用于列或行。
附加结构:John Willemse 的评论让我意识到我可以计算第三个列表,以便这三个列表按位相互补充。虽然我不明白这会有什么帮助。
【问题讨论】:
-
查找表将数字映射到设置为 1 的位数怎么样?这可用于最多 16 位左右的数字,具体取决于规格限制等。请告诉我们更多有关该问题的信息。
-
我还没有实现,我还在研究如何构造数据,如果我以某种方式构造数据,就会出现这个问题,这样可以节省一部分时间算法,但似乎在这里浪费时间。
-
您的列表有多长,列表中的数字范围是多少?
-
我的列表长度在几百范围内。数字不是真正的数字,它们是位向量,一切皆有可能。
标签: c bit-manipulation