私は次の問題を解決するための高速で効率的な方法に取り組んできましたが、まだ、かなり遅いネストループ ソリューションを使用してしか解決できませんでした。とにかく、ここに説明があります:
長さ L の文字列があるとしましょう'BBBX'
。から始まる、長さ L のすべての可能な文字列を見つけたいと思います'BBBX'
。違いは最大で 2 桁、少なくとも 0 桁です。その上、新しい文字列を作成するときは、特定のアルファベットから新しい文字を選択する必要があります。
アルファベットのサイズは関係ないと思いますので、この場合のアルファベットは['B', 'G', 'C', 'X']
.
したがって、いくつかのサンプル出力は、、、、などになります'BGBG'
。'BGBC'
最大'BBGX'
2 つの置換を含む長さ 4 の文字列を使用したこの例では、私のアルゴリズムは 67 の可能な新しい文字列を見つけます。
この問題を解決するために使用しようとしていますがitertools
、解決策を見つけるのに少し苦労しています。私itertools.combinations(range(4), 2)
はすべての可能な位置を見つけるために使用しようとします。次に、すべての可能性を構築するためにproduct()
fromを使用することを考えitertools
ていますが、何らかの方法で の出力からのインデックスに接続できる方法があるかどうかはわかりませんcombinations()
。