0

У меня есть класс, который представляет событие. , поэтому мы можем создать событие, создав объект этого класса. конструктор принимает description, start time, end time, list of invites, location и возвращает идентификатор для однозначного определения этого объекта.лучшая структура данных, подходящая для применения календаря событий

Create events : (description, start time, end time, list of invites, location) -> id 

Теперь этот класс имеет другой метод, который принимает идентификатор и возвращает соответствующий объект события

Get event by id : id -> event object

аналогично мы можем обновить событие

Update event -> description, start time, end time

Сейчас 4-й операции мы хотим, чтобы мы отфильтровывали все события между временным диапазоном

get event : start time, end time

Теперь я должен использовать/создать структуру данных, которая может выполнять эти операции 4 эффективно. (Я имею в виду, что теперь нам разрешено использовать технологии хранения файлов или кеширования)

для первых трех операций Я думал, что могу использовать Имеет карту/таблицу, которая будет иметь id как ключ и объект в качестве значения. , но в этом случае я не смогу эффективно выполнять 4-ю операцию.

для этого снова я могу использовать trie структура данных.

Root Node-> 
     Month nodes (12 nodes) 
     each month node will be having 30(or 31/28) children nodes. 
     and then those children nodes will be having time stamp nodes. 

но в этом случае первые три операции становятся неэффективными.

Как объединить эти две структуры данных для решения этой проблемы и выполнить все 4 операции. или есть лучшая структура данных, которая может выполнять эту задачу. или мы должны создать собственную собственную структуру данных?

ответ

1

Как вы сказали, вы можете использовать hashmap для первых операций с деревом. Для 4-й операции вы можете сохранить отсортированный список (start_time_of_event,id). Теперь для поиска всех событий между (start,end) вы можете использовать два бинарных поиска на этом отсортированном массиве и найти все события между (start,end). Этот метод имеет небольшую нехватку места, потому что вам просто нужно сохранить копию id и start_date события.