Я реализую что-то вроде кеша, который работает так:
- Если новое значение для данного ключа поступает от какого-либо внешнего процесса, сохраните это значение и запомните время, когда это значение пришло.
- Если мы бездействуем, найдите в кеше самую старую запись, извлеките новое значение для ключа из внешнего источника и обновите кеш.
- Возвращает значение для данного ключа при запросе.
Мне нужна структура данных для хранения пар ключ-значение, которая позволила бы выполнять следующие операции как можно быстрее (в порядке приоритета скорости):
- Найдите ключ с самым низким (неизвестным) значением.
- Обновите значение для данного ключа или добавьте новую пару ключ-значение, если ключ не существует.
- Другие обычные операции с хеш-таблицами, такие как удаление ключа, проверка наличия ключа и т. Д.
Существуют ли структуры данных, которые позволяют это? Проблема здесь в том, что для быстрого выполнения первого запроса мне нужно что-то упорядоченное по значению, а для быстрого обновления значений для данного ключа мне нужно что-то упорядоченное по ключу. Лучшее решение, которое у меня есть, - это что-то вроде этого:
Сохраняет значения в обычной хеш-таблице и пары (значение, ключ) как упорядоченную по значению кучу. Поиск ключа для наименьшего значения выглядит следующим образом:
- Найдите ключ для наименьшего значения в куче.
- Найдите значение этого ключа из хеш-таблицы.
- Если значения не совпадают, выведите значение из кучи и повторите процедуру с шага 1.
Обновление значений происходит следующим образом:
- Сохраните значение в хеш-таблице.
- Переместите новую пару (значение, ключ) в кучу.
Удаление ключа более сложное и требует поиска значения в куче. Это дает что-то вроде производительности O (log n), но это решение кажется мне громоздким.
Существуют ли какие-либо структуры данных, которые объединяют свойства хеш-таблицы для ключей и кучи для связанных значений? Я программирую на Python, поэтому, если в Python есть существующие реализации, это большой плюс.