Soru Belge fark algoritmaları nasıl çalışır?


Kelime belgesini farklı uygulamak istiyorum, hangi algoritmaları uygulamak gerekiyor?


25
2017-10-02 15:21


Menşei


Onu kullanıyor olacak mı göstermek farklılıklar veya mağaza Farklılıklar en iyi şekilde mi? - Lasse Vågsæther Karlsen


Cevaplar:


En çok optimize edilmiş lcs çözümü O (ND) Myer'in algoritması ve burada, 2007 belgelerinin farklı ofislerine uygulamak için kullandığım algoritmik bir yaklaşım. Algoritma kağıdı bağlantısı


3
2017-10-03 17:34



kağıt bağlantısı çalışmıyor .. - Masud Rahman
Bu benim için çalışıyor: xmailserver.org/diff2.pdf - Zamicol


Genel olarak konuşursak, diff'ing genellikle tarafından çözülür En uzun sık karşılaşılan sorun. Ayrıca bkz. "Algoritma" Wikipedia makalesinin bölümü diff:

Diff çalışması dayanmaktadır   En uzun ortak özeti çözme   sorun.

Bu problemde iki tane var.   öğelerin dizileri:

   a b c d f g h j q z

   a b c d e f g i j k r x y z

ve en uzununu bulmak istiyorsun   bulunan öğelerin sırası   her iki orijinal dizileri aynı   sipariş. Yani, yeni bulmak istiyorsun   elde edilebilen dizi   bazılarını silerek ilk sıra   öğelerini ve ikinci sıradan   diğer öğeleri silme. Sende istiyorsun   bu dizinin uzunluğu kadar   mümkün. Bu durumda

   a b c d f g j z

En uzun ortak diziden   almak için sadece küçük bir adım   diff benzeri çıktı:

   e   h i   q   k r x y 
   +   - +   -   + + + +

Bu, tüm bu metin tabanlı belgelerle iyi çalışır dedi. Word Belgeleri ikili bir biçimde etkili olduğundan ve çok sayıda biçimlendirme bilgisi ve veri içerdiğinden, bu çok daha karmaşık olacaktır. İdeal olarak, Word'ün kendisini otomatik olarak inceleyerek, burada ayrıntılı olarak açıklandığı gibi, belgeler arasında "farklılık" yeteneğine sahip olabilirsiniz:

Microsoft Word İpucu: Farklılıklar için iki belge nasıl karşılaştırılır


28
2017-10-02 15:30



Fark algoritması uygulamasının iki amacı vardır: Yalnızca sürümler arasındaki farklılıkları depolamak veya sürümler arasındaki farklılıkları göstermek için. Bunlar çok farklıdır (cezalandırılmamış). LCS genellikle sadece farklılıkları göstermek için kullanılabilir, ancak en iyi depolama için daha gelişmiş algoritmalara ihtiyaç vardır. Örneğin, belgenin bir bölümünün büyük bir bölümünü kesip başka bir bölüme yapıştırırsanız, iyi bir depolama algoritması bunu algılar ve "burada, burada yeni görünen birçok veri" olarak saklamaz. - Lasse Vågsæther Karlsen
@Lasse - Anlaştık. Asıl soru sözcüğü, Word belgeleri hakkında konuştuğundan beri, depolama tarafına göre farklılaşmanın “görsel” tarafına daha çok ilgi duyacaklarını düşündüm. Bununla birlikte, depolama alanı için doğru sizsiniz, Delta Encoding / Compression (en.wikipedia.org/wiki/Delta_encoding) vb. - CraigTP


Bir fark esasen sadece bir çözüm göre En uzun ortak alt sıra problemi.

En uygun çözüm, bilgi gerektirir dinamik program Bu yüzden çözmek için oldukça karmaşık bir sorundur.

Bununla birlikte, bir sonek-ağaç inşa edilerek de yapılabilir. Her iki algoritma da özetlenmiştir İşte.


15
2017-10-02 15:24



Bu genellikle belgenizin bir karakter veya bayt akışı olduğunu varsayar. Burada soru kelime belgesi ile ilgili. Böyle bir algoritmayı uygulamadan önce kendinize bir soru sormanız gerekir: mavi 8pt Verdana'daki 'Merhaba Dünya', kırmızı 10pt Arial'de 'Merhaba Dünya' ile aynıdır. - quosoo
Evet, belli ki, temel algoritmalar bu gibi farklılıklar için ayrıştırmak için ek mantık gerektirecektir, ancak algoritmanın çekirdeği hala aynı olacaktır. - Ben S


Görmek C # için bir O (ND) Fark Algoritması.


6
2017-10-02 15:24





Ben S'nin belirttiği gibi, farklı problem, genellikle en uzun ortak alt sıra problemini çözerek ele alınabilir. Daha spesifik olarak, The Hunt-McIlroy algoritması Soruna uygulanmış klasik algoritmalardan biridir (örn. Unix'in uygulanmasında). diff Yarar).


2
2017-10-02 15:28