文字列のセットが与えられた場合、
ap***
ab*le
a****
ab***
問題は、文字列の数と許容される差異の数を考慮して、文字列のセットが一貫しているかどうかを見つけることです。
したがって、上記のセットでは、単一の矛盾する文字列(2番目の文字列)を許可する場合、答えは「はい」ですが、矛盾する文字列を許可しない場合は「いいえ」です。
最良のアルゴリズムは何ですか、そして複雑さは何ですか?
私が思いついたすべての解決策は、すべての組み合わせを調べる必要があるか、単に間違っています。たとえば、文字列を調べてセットに追加することはできません(「互換性がない」と区別することを定義します)。**、abadが渡されるためです。
実際の問題(から):問題M
2417年、考古学者は、歴史的に非常に重要な20世紀のテキスト文書の大規模なコレクションを発見しました。重複した文書がたくさんありましたが、テキストの多くを判読できなくする時間による損傷だけでなく、それらの間にもいくつかの不一致があることがすぐに明らかになりました。ただし、テキストのグループを一貫性のあるものにすることができることに気づきました。つまり、テキスト間の一貫性は、いくつかの(少数の)テキストを除外することによって達成できます。たとえば、テキスト:
ap***
ab*le
app*e
*p\**e
(*は判読できない文字を示します)2番目のテキストだけを削除することで一貫性を保つことができます。
入力は、一連のテキストで構成されます。各セットは、セット内のテキストの数と、削除できるテキストの最大数を指定する行で始まります。この後に、1行に1つずつ個別のテキストが続きます。各テキストは、小文字またはアスタリスクのいずれかで、少なくとも1文字から250文字以下で構成されます。セット内のすべてのテキストは同じ長さになり、セット内のテキストは10,000個以下になります。セットのシーケンスは、2つのゼロ(0 0)を含む行で終了します。
各セットの出力は、最大で指定された数のテキストを削除することでセットの一貫性を保つことができるかどうかに応じて、「はい」または「いいえ」のいずれかの単語を含む行で構成されます。
Sample input
4 1
ap***
ab*le
app*e
*pple
3 1
a
b
c
4 2
fred
ferd
derf
frd*
0 0
Sample output
Yes
No
No