【发布时间】:2012-07-31 08:01:01
【问题描述】:
我正在尝试找到一种快速算法来搜索多个位数组的最长前缀。在我的应用程序中,这些位数组可以无限长且长度可变。例如,如果我有那些位数组:
0b1011001
0b1001101
0b1001010
0b1010100
最长的前缀是 10。 我目前正在对位数组进行 ORing 和 NAND 运算,以找到它们共同的 0 和 1,并将结果一起 XOR。
OR
0b1011111
NAND
0b0111111
XOR
0b1100000
有更快的解决方案吗?
【问题讨论】:
-
对所有数组进行 ORing 似乎是一个非常昂贵的解决方案。当您发现第一个不匹配时,您可以从左到右停止扫描数组。这将是 O(kn),其中 n 是数组的数量,k 是公共前缀的长度。
-
@Haile ORing 和 NANDing 在我的情况下并不是那么昂贵,因为位数组在内部由整数表示。从左到右扫描乍一看似乎很幼稚......
-
您写道“这些位数组可以无限长并且长度可变”!而且,这并不幼稚。对于任意长数组,它比 ORing 整个数组要快得多。
标签: python algorithm binary bit-manipulation