2009-05-29 11 views

risposta

5

Ecco lo the paper che serviva da base per lo strumento da riga di comando UNIX diff.

4

In realtà è piuttosto semplice; I programmi DIFF - la maggior parte delle volte - sono basati sullo Longest Common Sequence, che può essere risolto utilizzando un algoritmo grafico.

This web page fornisce implementazioni di esempio in C#.

4

Questa è una domanda complessa. Eseguire una diff significa trovare la distanza minima di modifica tra i due file. Ovvero, il numero minimo di modifiche da apportare per trasformare un file nell'altro. Questo equivale a trovare la più lunga sottosequenza comune di linee tra i due file, e questa è la base per i vari programmi diff. Il più lungo problema di sottosuccessione è ben noto e dovresti riuscire a trovare la soluzione di programmazione dinamica su google.

Il problema con l'approccio di programmazione dinamica è che è O (n^2). È quindi molto lento su file di grandi dimensioni e inutilizzabile per stringhe di grandi dimensioni binarie. La parte difficile nella scrittura di un programma diff è l'ottimizzazione dell'algoritmo per il dominio del problema, in modo da ottenere prestazioni ragionevoli (e risultati ragionevoli). Il documento "Algoritmo per il confronto di file differenziali" di Hunt e McIlroy fornisce una buona descrizione di una versione precedente dell'utilità di distribuzione Unix.

+0

I file che verranno differenziati sono molto piccoli, 10-50 linee, quindi la velocità dell'algoritmo non è un problema. – scottm

+0

E Kristo ha già menzionato un documento che lo riduce a O (ND). – beef2k

Problemi correlati