単語の文書を違えて実装したいのですが、どのアルゴリズムを実装する必要がありますか?ドキュメント差分アルゴリズムはどのように機能しますか?
答えて
ほとんどの最適化ソリューションO(ND) Myer 's algorithmであり、ここではアルゴリズムのアプローチはこれである:ここに詳述のように、それは、文書間の「差分」する能力を持っているとして理想的には、Word自体を自動化するに見ることができます私はオフィス2007のドキュメントを比較するために実装していました。 Link to algorithm paper
ペーパーリンクが動作しません.. –
これは私のために働いています:http://www.xmailserver.org/diff2.pdf – Zamicol
diffは本質的にちょうどa solutionからlongest common sub-sequence problemです。
最適な解決策は、dynamic programmingという知識が必要です。解決するのはかなり複雑な問題です。
ただし、接尾辞ツリーを構築することによっても行うことができます。両方のアルゴリズムについては、hereを概説しています。
これは通常、文書が文字またはバイトのストリームであると想定しているときです。しかしここで問題は単語の文書です。そのようなアルゴリズムを実装する前に、青い8pt Verdanaの「Hello World」と赤い10pt Arialなどの「Hello World」と同じ質問をする必要があります。 – quosoo
もちろん、基本的なアルゴリズムでは、違いはありますが、アルゴリズムの核心は同じです。 –
An O(ND) Difference Algorithm for C#を参照してください。
ベンSが示すように、差分問題は、一般的に最も長い共通サブシーケンス問題を解決することによって対処することができます。より具体的には、The Hunt-McIlroy algorithmは、問題に適用された古典的なアルゴリズムの1つです(たとえば、Unixのdiffユーティリティの実装)。
一般に、diff
は、Longest common subsequence problemによって解決されます。またDiff上のWikipediaの記事の「Algorithm"セクションを参照してください。
は言った:この場合は、最長共通部分列 それは diffのような出力を得るためだけの小さな一歩だから差分の操作が最長共通部分列 問題を解決 に基づいています
この問題では、アイテムの2つの 配列を有し:
a b c d f g h j q z a b c d e f g i j k r x y z
、あなたが ボットに存在するアイテムの最長 シーケンスを見つけたいですhオリジナルの配列は、同じ オーダーにあります。つまり、新しい シーケンスを見つけるには、 から最初のシーケンスを取得します。 アイテムを削除し、2番目のシーケンスから を削除します。 このシーケンスを まで可能にすることもできます。このすべては、テキストベースで正常に動作し、
e h i q k r x y + - + - + + + +
a b c d f g j z
ですドキュメント。 Word文書は効果的にバイナリ形式であり、多数の書式設定情報とデータを含んでいるため、これはもっと複雑になります。 LCSの
Microsoft Word Tip: How to compare two documents for differences
差分アルゴリズムを実装するには、バージョン間の差分のみを格納するか、バージョン間の相違を表示するかの2つの目的があります。これらは大きく異なっています(意図しない言葉はありません)。 LCSは通常、違いを表示するためにのみ使用できますが、最適なストレージのために、より高度なアルゴリズムが必要です。たとえば、ドキュメントのあるセクションから大きな部分を切り取り、別のセクションに貼り付けると、適切な記憶アルゴリズムがその情報を検出し、それを "ここに新しいデータがたくさん登場しました"と記憶しません。 –
@Lasse - 同意。元の質問者がWord文書について話していたので、私は彼らが記憶面よりもむしろdiffingの "視覚的な"面にもっと興味があると思った。しかし、ストレージ側では、デルタエンコーディング/圧縮(http://en.wikipedia.org/wiki/Delta_encoding)などを調べることになります。 – CraigTP
- 1. テキスト差分アプリケーションはどのように機能しますか?
- 2. このアルゴリズムはどのように機能しますか?
- 3. Construct Rectangleアルゴリズムはどのように機能しますか?
- 4. MD5Sumアルゴリズムはどのように機能しますか?
- 5. 視差スクロールはどのように機能しますか?
- 6. 増分ローカリゼーションはどのように機能しますか?
- 7. 空()分離はどのように機能しますか?
- 8. ピーク検出アルゴリズムは正確にどのように機能しますか?
- 9. 20の質問AIアルゴリズムはどのように機能しますか?
- 10. この除算近似アルゴリズムはどのように機能しますか?
- 11. Javaの階層アルゴリズムはどのように機能しますか?
- 12. このGaussian Blur javascriptアルゴリズムはどのように機能しますか?
- 13. 自動推奨アルゴリズムは通常どのように機能しますか?
- 14. reduxドキュメントのこの例はどのように機能しますか?
- 15. UILocalizedIndexedCollationはどのように機能しますか? (ドキュメントのサンプルコード)
- 16. 固定ドキュメントの印刷はどのように機能しますか?
- 17. 分数変換アルゴリズムの小数点はどのように機能しますか?
- 18. ウェブサイトの「不正行為を報告する」機能のアルゴリズムはどのように機能しますか?
- 19. logstash kv {}機能はどのように機能しますか?
- 20. WatchKit:ディクテーション機能はどのように機能しますか?
- 21. 機能はどのように機能しますか?
- 22. data.frameに差分カラムまたは差分カラムをどのように動的に作成しますか?
- 23. ppc64leでは分岐レジスタはどのように機能しますか?
- 24. continue文の他の部分はどのように機能しますか?
- 25. 次の部分はどのように機能していますか?
- 26. 'BL'アームの命令分解はどのように機能しますか?
- 27. Google+フィードバックシステムのスクリーンショット部分はどのように機能しますか?
- 28. BitTorrent DHTの「分散トラッカー」コンセプトはどのように機能しますか?
- 29. Github旧式差分機能
- 30. iOSでページ分割はどのように機能しますか? (スウィフト)
違いを表示*する*、または違いを最適な方法で保存*しますか? –