У меня есть hashmap, содержащий около полумиллиона записей, ключ - это строка, значения которой представлены как комбинация из 5 разных входов. (конкатенация строк) область каждого входа мало, но комбинация из 5 входов дает эту огромную карту (500 тыс. элементов). Теперь я думаю об оптимизации этой структуры.Оптимизация реализации HashMap
Моей идеей является хэш-вход (комбинация из 5 входов) путем хэширования каждого отдельного входа и объединения этих 5 хэшей в один единственный хэш (int 32 или 64), а затем поиск этого хеша.
Мой вопрос: существует ли известная структура данных, которая может хорошо справиться с этой ситуацией? и стоит ли делать эту оптимизацию? Я хочу оптимизировать как память, так и время выполнения.
Я использую C++
и std::unordered_map
ключ - это комбинированная строка из 5 входов, а выход случайный. Я не нашел никакой связи между входами и выходами (случайными или последовательными).
125 458 699 sadsadasd 5 => 56.
125 458 699 sadsadasd 3 => 57.
125 458 699 sadsadasd 4 => 58.
125 458 699 sadsadasd 5 => 25.
125 458 699 gsdfsds 3 => 89.
домен каждого из входов мал (4-й вход имеет различные значения 2K в то время как другие входные сигналы могут иметь только о 20 различных значений).
Что вы подразумеваете под «структурой данных»? Вы ищете хорошую функцию для объединения нескольких значений хэша в один хэш? – Sneftel
Является ли хеширование конкатенации действительно тем, что отличается от хэширования 5 входов, а затем каким-то образом их объединяет? Что заставляет вас думать, что это будет более оптимальным? – David
@Sneftel, возможно, другая структура данных, такая как дерево или хеширующая функция, мой план состоит в том, чтобы использовать 5 хэш-карт для каждого входа, чтобы получить 5 хешей, а затем объединить 5 хэшей в один хэш. но есть ли другая структура данных? и стоит ли это делать? – mmohab