/** * GitWand — Histogram diff * * Implémentation récursive inspirée de l'algorithme Histogram (Git, JGit) : * trouver une **ancre rare** (ligne dont la somme des fréquences `freqA + freqB` * est minimale, idéalement 1 + 1), splitter récursivement autour de l'ancre. * * Vs LCS pur : * - LCS aligne sur n'importe quelle ligne commune ; sur du code source, les * ancres faibles (`}`, `return;`, lignes vides) produisent des splits hostiles. * - Histogram s'ancre sur les lignes uniques d'abord, ce qui produit des diffs * plus stables et plus lisibles, et augmente le taux de succès de * `non_overlapping` / `insertion_at_boundary` qui dépendent de l'alignement. * * Référence : Nugroho et al., « How different are different diff algorithms in * Git? » Springer EMSE 2019. Histogram domine Myers et LCS sur le code source. * * @module */ /** Options pour `histogramDiff`. */ export interface HistogramOptions { /** Profondeur max de récursion (défaut 100, garde-fou stack overflow). */ maxDepth?: number; /** * Court-circuit DP plein si `(aEnd-aStart) * (bEnd-bStart) ≤ smallInputThreshold`. * L'overhead d'indexation Histogram domine sur les petits inputs ; le LCS * legacy DP est plus rapide. Défaut 200 (≈ 14×14 cellules). */ smallInputThreshold?: number; } /** * Calcule la Longest Common Subsequence entre deux tableaux de lignes via * l'algorithme **Histogram**. Retourne les indices des lignes communes dans * chaque tableau, en ordre strictement croissant. * * Contrat : `histogramDiff(a, b).length === lcsLegacy(a, b).length` sur tous * les inputs (les paires retournées peuvent différer sur les tie-breaks). * * @param a - premier tableau de lignes * @param b - second tableau de lignes * @param opts - options optionnelles * @returns paires `[i, j]` telles que `a[i] === b[j]`, ordre croissant */ export declare function histogramDiff(a: string[], b: string[], opts?: HistogramOptions): Array<[number, number]>; //# sourceMappingURL=histogram.d.ts.map