2010-09-20 22 views
7

Aquí hay una pregunta interesante: dado un conjunto de N intervalos ([inicio, final]), utilice un árbol de intervalos para encontrar el número máximo de intervalos superpuestos.Superposiciones máximas de intervalo usando un árbol de intervalos

A similar question en StackOverflow proporcionó una solución O (N), pero si podemos preprocesar los intervalos en un árbol de intervalos, quizás podamos encontrar la solución en tiempo logarítmico.

De hecho, un problema de ejercicio en el libro "Introducción a los algoritmos" de Cormen, et al. Sugiere que esto es posible mediante el aumento de un árbol de intervalos rojo-negro. ¿Alguna idea de cómo se puede hacer esto?

+0

¿Le interesan las operaciones como 'Agregar (x, y) - agregar un intervalo al árbol',' Consultar() - encontrar el número máximo de intervalos superpuestos'? ¿Desea también 'Del (x, y) - borrar el intervalo [x, y] del árbol'? – IVlad

+0

Si los intervalos están organizados en un árbol de intervalos balanceados como el proporcionado en el libro de Cormen, entonces ya sabemos que Agregar (intervalo) y Eliminar (intervalo) se ejecutan en O (lg N) tiempo. Entonces me gustaría saber cómo usar este árbol para encontrar el número máximo de intervalos superpuestos en preferiblemente el tiempo O (lg N). – stackoverflowuser2010

+0

¿Se puede definir la superposición? Es decir, ¿te refieres a un conjunto de intervalos con un punto en común o te refieres a un conjunto de intervalos tales que hay una ruta de superposición entre cualquier par? – Rafe

Respuesta

-1

Algunos ejemplos a look. Puede usar el árbol de intervalos para esto. CGAL le ofrece una implementación robusta para esto. Otro interesante example similar a su problema.

-1

puede encontrar un árbol de intervalos basado en un árbol de auto-equilibrado AVL aumentado aquí: http://code.google.com/p/intervaltree/. te muestra cómo se puede hacer. puedes hacer lo mismo con un árbol rojo-negro.

Cuestiones relacionadas