Adams describe un algoritmo de divide y vencerás para encontrar la unión de dos conjuntos (representados como árboles de búsqueda binarios con equilibrio de peso). Luego describe un nuevo algoritmo de "unión de cobertura" que, según él, mejora con respecto al de dividir y conquistar. Sin embargo, no ofrece una prueba, ni siquiera una explicación real, de por qué debería ser, y mucho menos por qué debería ser más rápido que dividir y conquistar.
Blelloch, Ferizovic y Sun muestran que el algoritmo de divide y vencerás de Adams en realidad alcanza lo óptimo teóricamente dónde . Sin embargo, no abordan el algoritmo de unión de cobertura.
¿Es la unión de cobertura, de hecho, tan eficiente como dividir y conquistar? La parte menos obvia es la moldura interior. Parece, al menos superficialmente, duplicar el trabajo entre los subárboles izquierdo y derecho que la división completa comparte entre ellos. Quizás esto esté bien por alguna razón, pero no sé por qué.
Una investigación adicional: Haskell Data.Set
y Data.Map
utiliza variantes de intersección y diferencia de cobertura, así como la unión. No he encontrado ninguna discusión publicada de esos algoritmos en absoluto. Preguntas similares se aplican a estos también.
fuente
Data.Set
base a estas observaciones?