Tengo un conjunto masivo de eventos (~ 10) caracterizado por una hora de inicio y finalización. Con un tiempo, quiero encontrar cuántos en esos eventos estaban en curso en ese momento.Encontrar el número de eventos simultáneos dadas las horas de inicio y finalización
¿Qué tipo de estructura de datos sería útil en esta situación? Las operaciones que necesito para ser rápido son:
- Inserción de nuevos eventos, por ejemplo,
{start: 100000 milliseconds, end: 100010 milliseconds}
. - Consultando el número de eventos concurrentes en un momento dado.
Actualización: Alguien puso una bandera geometría computacional en esto, por lo que figura que debería reformular esto en términos de geometría computacional. Tengo un conjunto de intervalos de 1 dimensión y quiero calcular cuántos de esos intervalos se cruzan con un punto dado. La inserción de nuevos intervalos debe ser rápida.
No estoy haciendo esto una respuesta porque no estoy familiarizado con ellos, pero creo que es posible lograr esto usando alguna forma de árbol kd o cuádruple - piense en un árbol binario donde los niveles alternar entre ser una comparación en la hora de inicio y la hora de finalización. Luego, puede buscar en el árbol la cantidad de nodos que se superponen a su tiempo. El peor de los casos sería todavía O (n), pero en el caso promedio si los tiempos son bastante variados sería O (log n). – DarkOtter