単語の文書を違えて実装したいのですが、どのアルゴリズムを実装する必要がありますか?ドキュメント差分アルゴリズムはどのように機能しますか?
答えて
ほとんどの最適化ソリューション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. このアルゴリズムはどのように機能しますか?
- 4. MD5Sumアルゴリズムはどのように機能しますか?
- 5. 増分ローカリゼーションはどのように機能しますか?
- 6. 20の質問AIアルゴリズムはどのように機能しますか?
- 7. 自動推奨アルゴリズムは通常どのように機能しますか?
- 8. UILocalizedIndexedCollationはどのように機能しますか? (ドキュメントのサンプルコード)
- 9. 固定ドキュメントの印刷はどのように機能しますか?
- 10. ウェブサイトの「不正行為を報告する」機能のアルゴリズムはどのように機能しますか?
- 11. Google+フィードバックシステムのスクリーンショット部分はどのように機能しますか?
- 12. 'BL'アームの命令分解はどのように機能しますか?
- 13. BitTorrent DHTの「分散トラッカー」コンセプトはどのように機能しますか?
- 14. haddockとの差分ドキュメント
- 15. dropbox.comの複数のファイルアップロード機能はどのように機能しますか?
- 16. JQueryのdatepickerのポップアップ機能はどのように機能しますか?
- 17. Wolframアルファに区分機能をどのように入力しますか?
- 18. jqueryのshow/hide機能はどのように機能しますか?
- 19. 機能の削減はどのように機能しますか?
- 20. セッターテンプレートのライブライブテンプレート機能はどのように機能しますか?
- 21. Facebookのリンク機能はどのように機能しますか?
- 22. Pythonの "all"機能はどのように機能しますか?
- 23. 豚の置換機能はどのように機能しますか?
- 24. JavaScriptのパワー機能はどのように機能しますか?
- 25. Readerモナドの「質問」機能はどのように機能しますか?
- 26. この機能割り当てはどのように機能しますか?
- 27. Safariのリーダー機能はどのように機能しますか?
- 28. AddImplicitRequiredAttributeForValueTypesが実際にどのように機能し、どのように機能していますか?ここ
- 29. Node.jsでは、イベントループはどのように機能しますか?
- 30. reduceLeftで型推論機能はどのように機能しますか?
違いを表示*する*、または違いを最適な方法で保存*しますか? –