は、私は、各コレクション内のオブジェクトが一意である、関連するビジネスの問題を解決するために非常にうまく動作しますが、両方のコレクションに存在する多くの非ユニークなオブジェクトがあるとき、奇妙な結果を与える傾向があるサブシーケンスを増やす最長に基づくアルゴリズムを持っています。忍耐差 - 一意でない行の最後の段階では正確に何が行われますか?
忍耐強さアルゴリズム(最長増加サブシーケンスにも基づいている)を使用するアプローチは、一意でないオブジェクトが存在するときに必要な結果を提供するように見えます。しかし、Patience Diffが適切かどうかを知るには、適切であればそれを私の問題に適用するために、アルゴリズムの理解を深める必要があります。
私は手順1〜3で何が起こるかを理解し、私は1〜3の後のステップ4で何が起こるかについては明らかではないよ、今は可能な一致を持たないユニークなライン、および非ユニークなラインのブロックが残っています。次に何が起こるか - 文書の残りの最初/最後の行との一致がないと仮定しますが、確かに(それ以上の固有の行がないので)すでに終了していませんか?あるいは、ある文書内の非固有ブロックと他の文書内のすべての非一意ブロックとを比較して、何らかの形で最良の一致を選択しますか?
http://bramcohen.livejournal.com/73318.html
- マッチ両方それらが同じなら、2番目に一致し、第三、等の最初の行のペアが一致しなくなるまで。
- 両者の最後の行が一致する場合は一致させ、次に一致する場合は最後に一致させ、次に一致するまで一致させるなどします。
- 両側で一度だけ発生するすべての線を見つけ、それらの線上で最も長い共通部分列を行い、それらを一致させます。
- Doがマッチしたラインあなたは別のアライメントアルゴリズムにフォールバックする必要があるユニークなラインを使い果たしたら
ソースコードを見ると、非ユニークな行全体でLCSを実行するのと同じくらい簡単ではないようです。彼らはいくつかの行をグループ化し、いくつかのLCSを行い、次に戻って別のことをして、LCSに再び来る。とにかく、私が扱っている特定の問題については、処理される特定の種類のデータに対して、はるかに単純で(おそらく)より効率的なヒューリスティックをまとめることになりました。 – Gigatron
@Gigatron:一度にすべての非一意の行にLCSを実行しません。 Patience Diffはユニークなラインのアラインメントを行い、そのアライメント内のユニークでないラインの各レンジでLCSを行います。 –
LCSの範囲を選択することは、一意でない行でどのように実行されますか?ドキュメント1に4つの範囲があり、ドキュメント2に5つの範囲がある場合は、他の5つのすべてに対して4つのLCSを実行します(それによって20のLCS実行)。そして、サブシーケンス? – Gigatron