У меня массивный (~ 10) набор событий, характеризующийся временем начала и окончания. Учитывая какое-то время, я хочу найти, сколько на этих событиях продолжалось в то время.Поиск количества параллельных событий с учетом времени начала и окончания
Какая структура данных будет полезна в этой ситуации? Операции, в которых я должен быть быстрым:
- Вставка новых событий, например,
{start: 100000 milliseconds, end: 100010 milliseconds}
. - Запрос количества одновременных событий за заданное время.
Обновление: Кто-то положили вычислительный флаг геометрии на это, так что я полагаю, что я должен перефразировать это с точкой зрения вычислительной геометрии. У меня есть набор одномерных интервалов, и я хочу рассчитать, сколько из этих интервалов пересекаются с данной точкой. Вставка новых интервалов должна быть быстрой.
Я не принимаю это решение, потому что я не знаком с ними, но я думаю, что вы могли бы это сделать, используя какую-либо форму дерева kd или quad tree - подумайте о двоичном дереве, где уровни чередовать сравнение между временем начала и временем окончания. Затем вы можете искать дерево для количества узлов, перекрывающих ваше время. В худшем случае все равно будет O (n), но в среднем случае, если времена довольно разнообразны, будет O (log n). – DarkOtter