Может есть алгоритм равномерного распределения на основе хэша SHA256? Есть массив [1... n] объектов. Кол-во элементов может увеличиваться, т.е. n постепенно растет. Мы получаем произвольный хэш SHA256. Хочется иметь какой-то алгоритм, который определяет для этого хэша номер объекта из массива, таким образом, чтобы при поступлении очередного хэша брался новый произвольный номер в массиве, но при этом соблюдались условия: 1. Распределение должно быть близким к равномерному 2. Метод должен быть воспроизводимым, т.е. при выпадении определенно хэша, должен выдавать ту же позицию в массиве каждый раз, когда выпадает этот хэш 3. Допустимо для разных хэшей соответствие одной и той же позиции в массиве, при соблюдении условия 1. 4. Хэшей будет больше чем n.
Для достижения равномерного распределения на основе хэша SHA256 можно воспользоваться методом, который используется в алгоритмах кеширования (например, consistent hashing). Для этого можно следовать следующему алгоритму:
Создать кольцевую структуру данных, на которой будут располагаться все объекты массива [1...n].Для каждого объекта вычислить его хэш SHA256.Построить отображение хэшей на кольцевую структуру (например, используя круговой массив или другую структуру данных, где каждый объект будет занимать определенный участок).При поступлении нового хэша вычислить его значение и найти ближайший объект на кольцевой структуре.Этому объекту и соответствует позиция в массиве [1...n].
Такой подход обеспечивает равномерное распределение хэшей по объектам массива и при этом гарантирует воспроизводимость результатов - одинаковый хэш будет каждый раз соответствовать одному и тому же объекту массива.
Для достижения равномерного распределения на основе хэша SHA256 можно воспользоваться методом, который используется в алгоритмах кеширования (например, consistent hashing).
Создать кольцевую структуру данных, на которой будут располагаться все объекты массива [1...n].Для каждого объекта вычислить его хэш SHA256.Построить отображение хэшей на кольцевую структуру (например, используя круговой массив или другую структуру данных, где каждый объект будет занимать определенный участок).При поступлении нового хэша вычислить его значение и найти ближайший объект на кольцевой структуре.Этому объекту и соответствует позиция в массиве [1...n].Для этого можно следовать следующему алгоритму:
Такой подход обеспечивает равномерное распределение хэшей по объектам массива и при этом гарантирует воспроизводимость результатов - одинаковый хэш будет каждый раз соответствовать одному и тому же объекту массива.