2010-09-21 17 views
10

Poszukuję algorytmu diff, który da wyniki, takie jak strony edycji zmian SO. Po prostu zacząłem wyglądać i nie jestem przeciwny zrobieniu tego samemu, ale nie muszę wymyślać koła.Algorytm różnicowy C# dla tekstu

Będę używać C# 4.0. Zasadniczo mam dwa łańcuchy, stary i nowy. Chcę wiedzieć, co zmieniło się w nowym, podkreślając i przekreślając.

Odpowiedz

3

Zwykle implementowany z algorytmem longest common substring. This post będzie interesujące.

+4

Nie jest najdłuższy wspólny podciąg ** ** ale najdłuższy wspólny podciąg ** **. Podciąg jest zawsze ciągły, ale podciąg nie musi być. Zmiany wprowadzone w starym tekście, aby uzyskać nowy tekst, nie muszą być kolejnymi znakami. – codaddict

+0

Uzgodniono, że. Musisz sklasyfikować najdłuższy typowy problem podciągania w stosunku do najdłuższego wspólnego problemu z podciąganiami. – quantity

5

Jest oparty na algorytmie Longest common subsequence, popularnie zwanym LCS.

LCS starego tekstu i nowego tekstu daje część, która pozostała niezmieniona. Zatem części starego tekstu, które nie są częścią LCS, uległy zmianie.

Od strony wiki powyżej:

Jest to klasyczny problem informatyka, podstawą diff (program do porównywania plików, który wyświetla różnice między dwoma plikami) i ma zastosowanie w bioinformatyce.

4

Możesz obejrzeć Menees Diff dla przykładu napisanego w języku C#.

+0

Dead link, zrewidować. thx –

+1

Link został poprawiony. – cfeduke