Un diff minimal n’est pas toujours unique. Avec des lignes répétées, l’algorithme peut faire correspondre une copie précoce ou tardive tout en conservant le même maximum. Les deux séquences exigent autant d’ajouts et retraits. Un outil déterministe doit toujours choisir une voie, annoncer la règle et ne pas présenter l’alignement comme la connaissance d’un déplacement ou d’une modification de l’auteur.
Les chemins égaux exigent un choix
Avec l’origine `A, B` et la révision `B, A`, une seule ligne peut rester en ordre. Faire correspondre `A` donne un ajout et un retrait ; choisir `B` coûte autant. TextDiff consulte la table LCS et, si retrait et ajout laissent la même longueur, consomme d’abord le retrait d’origine. Il retire donc `A`, conserve `B` et ajoute `A`. Répéter les entrées donne les mêmes enregistrements sur chaque page.
Un diff par lignes ne prouve pas un déplacement
Une personne peut reconnaître un paragraphe déplacé, mais la première version ne détecte volontairement aucun bloc déplacé. Son langage atomique est conservé, retiré et ajouté. Relier un bloc retiré à un ajout similaire demanderait un seuil, un autre alignement et davantage de choix ambigus. TextDiff garde une promesse étroite. Des lignes rouges et vertes voisines peuvent se lire comme modification, mais le modèle reste ajouts et retraits pour conserver des compteurs exacts.
Utilisez le contexte quand l’alignement importe
Titres, accolades, lignes vides et formules répétées sont fréquents. Une séquence minimale peut aligner ces jetons loin de l’endroit attendu. Lisez les lignes inchangées autour du bloc, comparez les numéros des deux versions et utilisez de plus petites sections si le document répété devient difficile. Ne prenez pas l’alignement comme preuve d’auteur, copie, effet juridique ou équivalence sémantique. C’est un chemin syntaxique reproductible dans deux suites ordonnées.