Какая структура данных лучше всего с точки зрения вычислительной сложности реализовать словарь элементов (key, val), который должен поддерживать только следующие команды:
-
Insert(key)
- добавляет элемент (ключ, val) с val = 1 -
Increment(key)
- добавляет val of existed (key, val) -
Find(key)
- возвращает значение val (ключ, val) -
Select(part_of_key)
- возвращает список всех элементов (ключ, val), еслиstrstr(key,part_of_key)!=NULL
в виде нового словаря того же типа (без выделения новой памяти, если это возможно); например, если словарь есть {(красный, 3), (синий, 4), (зеленый, 1)}, затем выберите (re) = {(красный, 3), (зеленый, 1)} -
Max(i)
- возвращает элемент, который имеет i-е максимальное значение среди всех элементов; например, если словарь равен {(красный, 3), (синий, 4), (зеленый, 1)}, затем Макс (1) = синий, Макс (2) = красный, Макс (3) = зеленый
Ключи - это строки, а значения - положительные целые числа. Ожидается, что количество элементов в словаре будет очень большим.
Я думаю, что это должен быть синтез двух разных структур данных. Но должна ли быть хэш-таблица + двоичное дерево или отсортированный массив trie + или что-то еще?