Я пытаюсь создать структуру данных для набора фиксированного размера, которые должны поддерживать следующие операции:Быстрого пространства эффективная структура данных для членства множества запросов на небольших наборах
- Запроса ли элемент в наборе (ложные срабатывания в порядке, ложноотрицательные нет)
- Заменить один элемент множества с другим элементом
в моем случае, размер набора, вероятно, будет очень мало (4-16 элементов), но поиск должен быть как можно быстрее и считаться как несколько бит как pos sible. Кроме того, он должен быть эффективным с точки зрения пространства. Замены (т. Е. Операция 2), вероятно, будут немногочисленными. Я посмотрел на следующие варианты:
- Блум Фильтры: Это стандартное решение. Тем не менее, трудно удалить элементы и, как таковые, трудно реализовать операцию. 2.
- Подсчет цветных фильтров: Требование к пространству становится намного выше (~ 3-4 раза) от стандартного фильтра Bloom без уменьшения ложных + ve ставок.
- Простое хранение списка хэшей всех элементов: Дает лучшие значения ложных + ve, чем подсчет фильтра цветения для аналогичных требований к пространству, но стоит дорого смотреть (в худшем случае все биты будут проверяться).
- Предыдущая идея с идеальным хешированием для местоположения: У меня нет идеи о быстрых совершенных хэшах для небольших наборов элементов.
Дополнительная информация:
- элементов являются 64-битными числами.
Любые идеи о том, как это решить?
Какие элементы в наборе? Небольшие номера? Большие цифры? Строки? Цирковые слоны? – rici
Это большие числа, каждая из которых равна 64 бит. –
Без тестирования сложно сказать наверняка, но, сохраняя их в массиве и просто выполняя двоичный поиск, вы получите «log (n)» производительность поиска и замены: «O (1)» – Wolph