Очевидно, что качество вашей хэш-функции имеет значение, но некоторая легкая теория вероятностей, вероятно, поможет вам здесь.
Вопрос в том, что именно вы готовы принять, достаточно ли это, чтобы у вас был ожидаемыйколичество столкновений только на 1% данных?Или вы требуете, чтобы вероятность количества столкновений, проходящих через какую-то границу, была чем-то?Если это первое, то обратная сторона вычисления стиля конверта будет делать:
Ожидаемое количество пар, которые хешируют одно и то же из вашего набора, составляет (1 000 000 C 2) * P (любые два - пара),Предположим, что второе число равно 1 / d, где d - размер хеш-таблицы.(Примечание: ожидания являются линейными, поэтому я пока не слишком обманываю).Теперь вы говорите, что хотите 1% столкновений, то есть всего 10000.Ну, у вас есть (1 000 000 C 2) / d = 10 000, поэтому d = (1 000 000 C 2) / 10 000, что, по данным Google, составляет около 50 000 000.
Итак, вам нужно 50 миллионов возможных значений хеш-функции.Это меньше, чем 2 ^ 26, поэтому вы получите желаемую производительность где-то около 26 бит хеша (в зависимости от качества алгоритма хеширования).Я, наверное, где-то там в 2 раза ошибаюсь, так что вы знаете, это грубо.
Если это автономная задача, вы не можете быть с ограниченным пространством.