たとえば、次の0と1の文字列が与えられます:001011. This私のパターン、つまり文字列Aです。 次に、0と1の長い文字列B(例:010100010010010)が与えられました。私の仕事はBの文字列Aの最も適切な文字列を見つけることです。最も適切な文字列である必要はないため、最大20%の誤差がある可能性があります。私は1と0の特定の文字列を持っており、最大20%のエラーで他の文字列で最も適切な文字列を探したいとします。
たとえば、文字列Aの場合は01001、一致率が11001の場合は文字列の80% Bは最初のビットを除いて文字列Aと一致します。同じA文字列の場合、11101はそれの60%しか一致しません(最初と最後のビット11101のirdの位置は、Aの最初と3番目のビットと一致しません。これは欲望の解決策ではありません。
Nが文字列Aのビット数である場合は、BのN長シーケンスを一度にチェックすることを意味します(Bの評価ビットは連続した位置になければなりません。 B)。例: A-01011とB-010100100111とします。最初にシーケンス01010(非常に最初の位置から始まるBの最初の5ビット)、次に10100(Bの2番目のビットで始まる最初の5ビット)を評価します。この例では、01010では4ビットのみがAと一致し、01010は80%の一致であることを示しています。 10100に関して、ビットはAと一致しないので、0%の一致である。
Aが01001でBが01101の場合があります(Bの最初の2ビットはAの最初の2ビットと一致し、Bの最後の2ビットは最後の2ビットAと一致します)。したがって、それは80%のマッチです。 AがBよりも長い場合
は、その後、Aは、私は、この問題を攻撃するための戦略を、アルゴリズムを知っていただきたいと思い
B. で一致していません。私はこの問題を可能な限り明確にしたいと思っています。そうでない場合、私はあなたにさらなる説明を提供するよう修正します。私はこの問題が実際にパターンマッチングに関して実際のアプリケーションを持つかもしれないと仮定します。 私は解決策が必要であり、私は可能な限り説明を改善することを楽しみにしています。
私は文字列charを横断してcharから検索し、それらを私の検索文字列と比較することから始めます。たぶん、複数のオーバーランを行う場合があります。最初は完全一致を検索し、検索文字列のわずかな変更を検索した後です。これはブルートフォースアプローチですが、それはあなたを始めます。その後最適化が行われます。たぶん、正規表現と正規表現の実装方法も見てください。それはまた助けるかもしれません。 – jwsc
[Hamming distance](https://en.wikipedia.org/wiki/Hamming_distance)をご覧ください –
1と0の文字列を比較しています。これは、1と0の 'String'を比較していることを意味しますか?もしそうなら、あなたは2つの 'String'sに適用できる一般化されたアルゴリズムを探していますか、あるいは1と0だけを扱っていますか?あなたが1と0だけを気にしていれば、@ Gijsの回答は良い出発点です。さもなければ、私はあなたがブルートフォースの実装から始めなければならないことに同意し(それを行うのは簡単ではありません)、それを最適化する特定の方法を探します。 –