Szukałem jak szalony na wyjaśnienie algorytmu diff, który działa i jest wydajny.Diff Algorithm
Najbliżej mam to this link to RFC 3284 (od kilku Eric Sink blogi), który opisuje w kategoriach doskonale zrozumiałym formacie dane w których wyniki są przechowywane diff. Nie ma jednak żadnej wzmianki o tym, w jaki sposób program osiągnąłby te wyniki, robiąc różnicę.
Próbuję zbadać to z osobistej ciekawości, ponieważ jestem pewny, że muszą istnieć kompromisy przy wdrażaniu algorytmu diff, które są całkiem jasne, czasami gdy patrzysz na różnice i zastanawiasz się "dlaczego program diff wybrał to jako zmiana zamiast tego? "...
Czy ktoś wie, gdzie mogę znaleźć opis skutecznego algorytmu, który zakończyłby się wyprowadzaniem VCDIFF?
Nawiasem mówiąc, jeśli znajdziesz opis rzeczywistego algorytmu używanego przez DiffMerge SourceGear, będzie jeszcze lepiej.
UWAGA: najdłuższy wspólny podciąg nie wydaje się być algorytmem używanym przez VCDIFF, wygląda na to, że robią coś mądrzejszego, biorąc pod uwagę format danych, którego używają.
Dzięki!
Dokumenty RFC nie mają na celu opisywania algorytmów. Mają one opisywać interfejsy (/ protokoły). –
Może to pomoże: http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/ To na pewno jest niesamowite, a jest tak małe (tylko ** 29 linii łącznie **, ma 2 Funkcje). Jest podobny do rzeczy, którą można edytować w edytorze Stack Overflow. – Nathan
VCDIFF nie jest przeznaczony do odczytu czytelnego dla człowieka. Zatrudnia instrukcje dodawania, kopiowania i uruchamiania w przeciwieństwie do bardziej czytelnych dla człowieka instrukcji usuwania i wstawiania wysyłanych przez większość algorytmów różnicowania zwykłego tekstu. Dla VCDIFF potrzebujesz czegoś podobnego do xdelta algortihm opisanego tutaj http://www.xmailserver.org/xdfs.pdf – asgerhallas