Ваш вопрос для меня не имеет смысла. Использование алгоритма хэширования для хранения некоторых случайных чисел является излишним. Если в этом есть что-то большее, выбор структуры данных будет зависеть от того, что это больше (что вы не говорите).
Если эти числа действительно являются случайными или псевдослучайными, то все, что вам нужно, это стек или круговой буфер - возможность добавления (push) нового случайного числа в структуру данных и возможность удаления (поп) существующего случайного числа от структуры. Если вы хотите получить их по порядку, используйте круговой буфер. Хеширующая функция хуже во всех отношениях, чем простой стек (или круговой буфер) для хранения списка случайных чисел - он более сложный, работает медленнее и использует больше памяти.
Большинство языков/сред предоставляют хеш-функции, которые могут использоваться (или предоставляются как) «словарные» классы, и в них приводятся рекомендации относительно эффективности. Как правило, вы можете быстрее создавать словарные классы, выделяя больше памяти - они замедляются при столкновении хеш-ключей. Таким образом, «плотность» фактических чисел среди всех возможных чисел имеет значение.
Итак, если вам нужно было удерживать 100 таких чисел, вы можете использовать хеш-функцию, которая смотрелась только на последние 12 бит. Это дает 2^12 = 4096 возможных хешей, поэтому столкновения будут происходить только 100/2048 времени, менее 5%. С другой стороны, вы используете в 20 раз больше памяти, чем должны. (Эта функция совпадает с тем, что принимает модуль числа до основания 2^12 и аналогична предложению Эппа.)
Написание класса хранения на основе хэш-функции, которая должным образом обрабатывает хеш-коллизии (как и должно быть), изящно обрабатывает дублированные данные, не будет урод, если вы выбьете его плохие данные (как и все числа одинаковые) и эффективны, это не тривиальная задача.
С другой стороны, реализация стека или кругового буфера чрезвычайно проста, очень эффективна и имеет вполне предсказуемое поведение.
Уверены ли вы, что вы не делаете это более сложным, чем это должно быть?
[This] (http://www.cse.yorku.ca/~oz/hash.html) должен быть в состоянии помочь вам ... Или вы можете попробовать их комбинации в зависимости от ваших требований ... – Recker
Прежде чем принять решение о хэш-функции, вы решили, какую * структуру данных * вы собираетесь использовать? – NPE
Если ваши большие числа действительно равномерно распределены, * любая хэш-функция, даже самая тривиальная будет делать. –