А не закодить ли 2-Way и 3-Way Diff для XML?

блог всячепуза
 
Реализация алгоритма O(ND) из работы 1986, Myers для 2-way merge не даёт конкурентного преимущества,
потому что O(ND)-алгоритм сравнивает файлы парами (A, O), (B, O), а не все три файла сразу.
Как реализовывать O(ND) сравнение на C#, есть статья 20060314, Hertel (http://www.mathertel.de/diff/).

Конкурентного преимущества он не даёт, потому что приводит к неоптимальным результатам,
как описано в работе 2007, Khanna

Поэтому имеет смысл реализовывать алгоритм SDiff3 (Similarity-Based State-Based Synchronizer) из работы 2015, Autexier

Всего нужно прочитать 94 страницы + 45 для tree diff, норматив скорости перевода для профессионалов - 10 страниц в день (*),
для понимания, возможно, потребуется читать что-то ещё, поэтому для оценки возьмем 5 страниц в день. 95 страниц = 19 дней на изучение области
( хотя есть оценка в 1 месяц - http://c2.com/cgi/wiki?DiffAlgorithm, если 21 рабочий день, то похоже )
объём кода будет ~5000 строк, 10 строк в день пишут в среднем, гениальные программисты в 10 раз быстрее обычных, итого +50 дней.

Общий вывод - похоже на работы по грантам РФФИ
http://www.math.spbu.ru/user/kromanovsky/docline/pdf/luciv.koznov.andreev.2012.sysprog.pdf

Литература для 3-way diff, 2-way diff и LCS

2015, Autexier S, Similarity-Based Diff, Three-Way Diff and Merge
http://ijsi.org/ch/reader/create_pdf.aspx?file_no=i217&year_id=2015&quarter_id=2&falg=1
19 страниц

2011-11, Ritcher Bill, Guiffy SureMerge - A Trustworthy 3-Way Merge, http://www.guiffy.com/SureMergeWP.html
14 страниц, читать, чтобы понять, что без использования алгоритмов tree diff хороших результатов для исходников не получится

2010-06-04, Johansen Martin Fagereng, Testing Eclipse Compare’s Algorithm for Three-way Merging
http://www.uio.no/studier/emner/matnat/ifi/INF4290/v11/undervisningsmateriale/report.pdf
19 страниц, читать нужно чтобы понять, как можно тестировать, как могут существовать ошибки в алгоритме сравнения, и какие

2007, Khanna S., Kunal K., Pierce B.C., A Formal Investigation of Diff3
http://www.seas.upenn.edu/~sanjeev/papers/fsttcs07_diff3.pdf
12 страниц

1986, Myers Eugene , "An O(ND) Difference Algorithm and its Variations" by , Algorithmica Vol. 1 No. 2, p 251.
http://xmailserver.org/diff2.pdf
15 страниц, изучить, потому что это один из алгоритмов git - http://git.661346.n2.nabble.com/diff-ing-files-td6446460.html

1977. Hunt, J.W. and Szymanski, T.G. "A Fast Algorithm for Computing Longest Common Subsequences.’’ Communications of ACM 20, 5 (1977), 350-353
http://www.cs.bgu.ac.il/~dpaa111/wiki.files/HuntSzymanski.pdf
4 страницы,
https://en.wikipedia.org/wiki/Hunt–McIlroy_algorithm
https://ru.wikipedia.org/wiki/Наибольшая_общая_подпоследовательность
https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
15 страниц, читать нужно, потому что LCS это база для O(ND)

Литература для tree diff

2007, Joe Tekli; Richard Chbeir; Kokou Yetongnon, Efficient XML Structural Similarity Detection using Sub-tree Commonalities
http://le2i.cnrs.fr/IMG/publications/Efficient XML Structural Similarity Detection using Sub-tree Commonalities.pdf
15 страниц
1989, Kaizhong Zhang and Dennis Shasha, Simple fast algorithms for the editing distance between trees and related problems
http://www.grantjenks.com/wiki/_media/ideas:simple_fast_algorithms_for_the_editing_distance_between_tree_and_related_problems.pdf
18 страниц
Tutorial: http://www.youtube.com/watch?v=hwiks-n7vso

1979, Kuo-Chung Tai, The Tree-to-Tree Correction Problem
http://www.grantjenks.com/wiki/_media/ideas/treetotreecorrect.pdf
12 страниц

Прочая литература

2003, Yuan Wang David J. DeWitt Jin-Yi Cai, X-Diff: An Effective Change Detection Algorithm for XML Documents, University of Wisconsin – Madison, WI, U.S.A.
http://www.inf.unibz.it/~nutt/Teaching/XMLDM1112/XMLDM1112Coursework/WangEtAl-ICDE2003.pdf
X-Diff: An Effective Change Detection Algorithm for XML Documents. Yuan Wang, David J. DeWitt, Jin-Yi Cai. ICDE 2003.
http://pages.cs.wisc.edu/~yuanwang/papers/xdiff.pdf
sources on Java and C:
http://pages.cs.wisc.edu/~yuanwang/xdiff.html
1995-01, David T. Barnard, Gwen Clarke, Nicholas Duncan, "Tree-to-tree Correction for Document Trees", Technical Report 95-372, Department of Computing and Information Science Queen's University, Kingston, Ontario K7L 3N6, Canada
http://research.cs.queensu.ca/TechReports/Reports/1995-372.pdf
"Our algorithm allows subtree operations but is otherwise similar to that of Zhang and Shasha."
A Semantical Change Detection Algorithm for XML
http://www.inf.ufpr.br/carmem/pub/seke07.pdf
Yan Chen, Sanjay Madria, Sourav Bhowmick, "DiffXML: Change Detection in XML Data"



https://lib.lesscomplex.org/cms/tag/diffxml
http://tomx.inf.elte.hu/twiki/pub/Tudas_Labor/2012Summer/XRel_Change_SQL.pdf
https://www.cise.ufl.edu/~helal/projects/ubidata/publications/sbbd-02-final.pdf