我有一组位串:({'0011', '1100', '1110'}一组中的所有位串都具有相同的长度)。
我想快速找到与集合最大相似度最小的相同长度的位串。最大相似度可以这样计算:
def max_similarity(bitstring, set):
max = 0
for item in set:
temp = 0
for i in range(len(bitstring)):
if bitstring[i] == item[i]:
temp += 1
if temp > max:
max = temp
return max
Run Code Online (Sandbox Code Playgroud)
我知道我可以遍历该长度的所有可能的位串,计算每个位的最大相似度,最后保留这些迭代中的最小者。但这解决了O(2 ^ n)中的问题。我想知道是否有人看到任何更快的选择。
我一直在玩Pythons XOR:
def int2bin(integer, digits):
if integer >= 0:
return bin(integer)[2:].zfill(digits)
else:
return bin(2**digits + integer)[2:]
def XOR(bitset):
intset = [int('{}'.format(bitstring), 2) for bitstring in bitset]
digits = len(bitset.pop())
if len(intset) == 1:
return int2bin(~intset.pop(), digits)
else:
curr …Run Code Online (Sandbox Code Playgroud)