Python 最小设置覆盖汉明距离1内的所有图案

Python 最小设置覆盖汉明距离1内的所有图案,python,combinations,Python,Combinations,你有两种字母{A,B} 字符串的长度是3 那么所有模式的数量是8: AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB 现在我想挑选其中一些来覆盖1个海明距离内的所有图案 例1) 集合(AAA,BBB)满足这一点 AAA、AAAB、ABA、BAA与AAA之间的海明距离为0或1 ABB、BAB、BBA、BBB与BBB之间的汉明距离为0或1 所以所有的模式都被集合覆盖(AAA,BBB) 例2) set(AAA,AAB)剂量不满足此要求 AAA、AAAB、ABA、BAA与AAA之间的海明距

你有两种字母{A,B}

字符串的长度是3

那么所有模式的数量是8: AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB

现在我想挑选其中一些来覆盖1个海明距离内的所有图案

例1)

集合(AAA,BBB)满足这一点

AAA、AAAB、ABA、BAA与AAA之间的海明距离为0或1

ABB、BAB、BBA、BBB与BBB之间的汉明距离为0或1

所以所有的模式都被集合覆盖(AAA,BBB)

例2)

set(AAA,AAB)剂量不满足此要求

AAA、AAAB、ABA、BAA与AAA之间的海明距离为0或1

ABB、BAB与AAB之间的汉明距离为0或1

BBA,BBB是到AAA或AAAB的2汉明距离

因此,它们不在set(AAA、AAB)范围内

如果字母是3种类型:{A,B,C}

长度是10。aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

如何获得一个组合来覆盖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

我正在使用python。itertools模块的产品和组合用于解决该问题。但是计算所有的组合花费了太多的时间。有没有解决这个问题的想法?这个问题只要求回答,没有显示代码,试图自己找到正确的解决方案。如果您编辑问题以显示您尝试了什么,并准确地解释您在尝试中面临的问题,则可以避免问题被关闭。在那之前,我想。你能不能补充一些解释,说明你的代码的输出与你想要的不同?我相信这段代码会生成我想要的模式。然而,由于订单太大,它实际上没有及时完成。