你有两种字母{A,B}。
字符串的长度为3。
然后所有模式的数量为8: AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB
现在我想拿起一些来覆盖1汉明距离内的所有模式。
EX1)
set(AAA,BBB)满足此要求。
AAA,AAB,ABA,BAA与AAA的汉明距离为0或1ABB,BAB,BBA,BBB与BBB相距0或1汉明
因此所有模式都被集合(AAA,BBB)
所覆盖EX2)
设定(AAA,AAB)剂量不满足。
AAA,AAB,ABA,BAA与AAA的汉明距离为0或1ABB,BAB,与AAB相距0或1个汉明
BBA,BBB与AAA或AAB相距2汉明
因此它们不受集合(AAA,AAB)
的覆盖如果字母是3种类型:{A,B,C}
长度为10. AAAAAAAAAA,AAAAAAAAAB,...,CCCCCCCCCC
如何组合以涵盖1个汉明距离内的所有模式?
from itertools import product, combinations
all_patterns = set(product('ABC', repeat=10))
def hamming(patterns1, patterns2):
for pattern2 in patterns2:
if min(sum(a!=b for a, b in zip(pattern1, pattern2)) for pattern1 in patterns1) > 1:
return False
return True
def calc_minimum_patterns():
for i in range(1, len(all_patterns)):
for patterns in combinations(all_patterns, i):
if hamming(patterns, all_patterns):
return patterns