私はビットのN個の文字列(それぞれサイズM)X1 [0..M]、...、XN [0..M]を持っています。私は擬似コード/アルゴリズムが必要な最小の長さのサブシーケンス(必ずしも隣接している)を見つけるためには、それぞれの文字列で一意です。たとえば、一連の文字列を区別する最も短い一意のサブシーケンス
文字列が011011,011000,010010の場合、[2,4](11,10,01)の部分列は各文字列で異なります。または部分列[2,4,5](111,100,010)。または部分列[4,5](11,00,10)。
ただし、部分列[0,1,5](011,010,010)--->各文字列で一意ではありません。
編集:1 <= M <= 1000, 2 <= N <= 10
。
編集:現在のところ、私の解決策は次のとおりです。 サブシーケンスの最小長はceil(log2(N))
とN-1
の間です。 ので、擬似コードは次のようになります。
for i = ceil(log2(N)) to N-1 :
check all subsequence of size i
if any subsequence distinguish all N strings, return i
最初のステップは、すべての組み合わせmCiのを生成することによって行うことができます。 2番目のステップは、すべてのN個の文字列のサブシーケンスを抽出し、それらのすべてが別個であるかどうかをチェックすることによって実行できます。 しかし、このアルゴリズムは現在指数関数的に複雑です。より良いアルゴリズムが可能かどうかを知りたかったのです。
編集:いいえ、宿題ではありません。それはインタビューで尋ねられた。
このアプリケーションにはどのようなアプリケーションがありますか?宿題のように聞こえる。 – MrSmith42