J'ai cherché comme un fou l'explication d'un algorithme de comparaison qui fonctionne et qui soit efficace.
Le plus proche que j'ai obtenu est ce lien vers le RFC 3284 (tiré de plusieurs articles du blog d'Eric Sink), qui décrit en termes parfaitement compréhensibles la format de données dans lequel les résultats de la comparaison sont stockés. Cependant, il n'y a aucune mention de la manière dont un programme pourrait atteindre ces résultats lors d'une comparaison.
J'essaie de faire des recherches sur ce sujet par curiosité personnelle, parce que je suis sûr qu'il doit y avoir des compromis lors de l'implémentation d'un algorithme de diff, qui sont assez clairs parfois quand on regarde les diffs et qu'on se demande "pourquoi le programme diff a choisi ceci comme changement au lieu de cela ?"...
Où puis-je trouver la description d'un algorithme efficace qui produirait VCDIFF ?
Au fait, si vous trouvez une description de l'algorithme réel utilisé par DiffMerge de SourceGear, ce serait encore mieux.
NOTE : la plus longue sous-séquence commune ne semble pas être l'algorithme utilisé par VCDIFF, il semble qu'ils fassent quelque chose de plus intelligent, étant donné le format de données qu'ils utilisent.
0 votes
Rien sur wikipedia ? Vous pouvez peut-être essayer de trouver une autre implémentation dans un langage de haut niveau comme Python, qui pourrait être plus facile à comprendre qu'une implémentation C. Python est réputé pour être facilement lisible ? Il y a un difflib en python. Voici l'url de la source. La source contient des tonnes de commentaires sur les algorithmes de comparaison. svn.python.org/view/python/trunk/Lib/
4 votes
Les RFC ne sont pas destinées à décrire des algorithmes. Elles sont destinées à décrire des interfaces (/protocoles).
2 votes
En fait, le cœur de l'algorithme diff, le problème de la plus longue sous-séquence commune, se trouve sur Wikipedia. Cette page donne un aperçu de l'algorithme et un exemple de code que j'ai trouvé utile lorsque j'ai eu besoin d'écrire un diff personnalisé : fr.wikipedia.org/wiki/Longest_common_subsequence_problem (problème de la plus longue sous-séquence commune)
3 votes
Peut-être que cela vous aidera : paulbutler.org/archives/a-simple-diff-algorithm-in-php C'est vraiment génial, et c'est si petit (seulement 1 000 euros). 29 lignes au total ; il a 2 fonctions). C'est similaire à la fonction de comparaison des révisions de Stack Overflow.
0 votes
VCDIFF n'est pas destiné aux différences lisibles par l'homme. Il utilise des instructions d'ajout, de copie et d'exécution, par opposition aux instructions de suppression et d'insertion, plus lisibles par l'homme, émises par la plupart des algorithmes de diff en texte brut. Pour VCDIFF vous avez besoin de quelque chose comme l'algorithme xdelta décrit ici. xmailserver.org/xdfs.pdf