2009-05-29 20 views
7

DiffMerge gibi uygulamalar metin dosyalarındaki farklılıkları nasıl algılarlar ve bir satırın ne zaman yeni olduğunu belirlerler ve yalnızca kontrol edilen dosyadan farklı bir satırda değil nasıl belirlerler?Metin farklı uygulamalarda nasıl çalışır?

Uygulanması oldukça kolay olan bir şey mi? Bunu yapmak için zaten kütüphaneler var mı?

cevap

5

UNIX komut satırı aracı diff için temel olarak sunulan the paper burada.

4

Aslında oldukça basittir; DIFF programları çoğu zaman - bir grafik algoritması kullanılarak çözülebilen Longest Common Sequence'a dayanmaktadır.

This web page C# örnek uygulamaları sağlar.

4

Bu karmaşık bir sorudur. Bir farkın gerçekleştirilmesi, iki dosya arasındaki minimum düzenleme mesafesini bulmak anlamına gelir. Yani, bir dosyayı diğerine dönüştürmek için yapmanız gereken minimum değişiklik sayısı. Bu, iki dosya arasındaki en yaygın ortak alt diziyi bulmakla eşdeğerdir ve bu, çeşitli fark programlarının temelidir. En yaygın sık karşılaşılan sorun, iyi bilinir ve google'da dinamik programlama çözümünü bulabilmeniz gerekir.

dinamik programlama yaklaşımıyla sorun (n^2) O olmasıdır. Bu nedenle büyük dosyalarda çok yavaş ve büyük, ikili dizeler için kullanılamaz. Farklı bir program yazmanın zor kısmı, problem alanınızın algoritmasını optimize ederek, makul bir performans (ve makul sonuç) elde etmenizi sağlar. Hunt ve McIlroy'un "Farksal Dosya Karşılaştırması için Bir Algoritma" adlı makalesi, Unix diff yardımcı programının erken bir versiyonunun iyi bir tanımını vermektedir.

+0

Fark yaratacağım dosyalar çok küçük, 10 - 50 satır, yani algoritmanın hızı sorun değil. – scottm

+0

Ve Kristo zaten O (ND) 'ye indirgeyen bir kağıttan bahsetti. – beef2k