最小设置覆盖汉明距离1内的所有模式

时间:2015-03-10 13:11:27

标签: python combinations

你有两种字母{A,B}。

字符串的长度为3。

然后所有模式的数量为8: AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB

现在我想拿起一些来覆盖1汉明距离内的所有模式。

EX1)

set(AAA,BBB)满足此要求。

AAA,AAB,ABA,BAA与AAA的汉明距离为0或1

ABB,BAB,BBA,BBB与BBB相距0或1汉明

因此所有模式都被集合(AAA,BBB)

所覆盖

EX2)

设定(AAA,AAB)剂量不满足。

AAA,AAB,ABA,BAA与AAA的汉明距离为0或1

ABB,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

0 个答案:

没有答案