Adams décrit un algorithme de division et de conquête pour trouver l'union de deux ensembles (représentés sous forme d'arbres de recherche binaires pondérés). Il décrit ensuite un nouvel algorithme de "l'union de couverture" qui, selon lui, améliore celui de diviser pour mieux régner. Cependant, il n'offre pas de preuve, ni même de véritable explication, de la raison pour laquelle, et encore moins pourquoi il devrait être plus rapide que diviser pour mieux régner.
Blelloch, Ferizovic et Sun montrent que l'algorithme de division et de conquête d'Adams atteint en fait l'optimalité théorique où . Ils ne traitent cependant pas de l'algorithme de l'union de couverture.
L'union de couverture est-elle en fait aussi efficace que le diviser pour mieux régner? La partie la moins évidente est la garniture intérieure. Il semble, au moins superficiellement, dupliquer le travail entre les sous-arbres gauche et droit que le partage complet partage entre eux. C'est peut-être bien pour une raison quelconque, mais je ne sais pas pourquoi.
Une autre enquête: Haskell Data.Set
et Data.Map
utiliser des variantes de haies d'intersection et de différence, ainsi que l'union. Je n'ai trouvé aucune discussion publiée sur ces algorithmes. Des questions similaires s'appliquent également à celles-ci.
la source
Data.Set
fonction de ces observations?