Dans les systèmes de contrôle de version distribués (tels que Mercurial et Git ), il est nécessaire de comparer efficacement les graphiques acycliques dirigés (DAG). Je suis un développeur Mercurial, et nous serions très intéressés d'entendre des travaux théoriques qui discutent de la complexité temporelle et réseau de la comparaison de deux DAG.
Les DAG en question sont constitués par les révisions enregistrées. Les révisions sont identifiées de manière unique par une valeur de hachage. Chaque révision dépend de zéro (validation initiale), une (validation normale) ou plusieurs (validation de fusion) des révisions précédentes. Voici un exemple où les révisions a
à e
ont été faites l' une après l'autre:
a --- b --- c --- d --- e
La comparaison du graphique apparaît dans l'image lorsque quelqu'un n'a qu'une partie de l'historique et veut récupérer la partie manquante. Imaginez que je devais a
à c
et fait x
et y
basé sur c
:
a --- b --- c --- x --- y
Dans Mercurial, je ferais hg pull
et téléchargerais d
et e
:
a --- b --- c --- x --- y
\
d --- e
Le but est d'identifier d
et e
efficacement lorsque le graphe comporte de nombreux (disons, plus de 100 000) nœuds. L'efficacité concerne à la fois
- complexité du réseau: le nombre d'octets transférés et le nombre d'aller-retour réseau nécessaires
- complexité temporelle: quantité de calculs effectués par les deux serveurs qui échangent des changesets
Les graphiques typiques seront étroits avec quelques pistes parallèles comme ci-dessus. Il y aura également généralement seulement une poignée de nœuds foliaires (nous les appelons têtes dans Mercurial) comme e
et y
au - dessus. Enfin, lorsqu'un serveur central est utilisé, le client aura souvent quelques ensembles de modifications qui ne sont pas sur le serveur, tandis que le serveur peut avoir plus de 100 nouveaux ensembles de modifications pour les clients, en fonction de qui il y a longtemps, le client a été retiré du serveur pour la dernière fois. . Une solution asymétrique est privilégiée: un serveur centralisé devrait faire peu de calcul par rapport à ses clients.