Я сталкиваюсь с проблемой наличия нескольких целых чисел, и мне нужно сгенерировать их, используя их. Например.
Int 1: 14
Int 2: 4
Int 3: 8
Int 4: 4
Hash Sum: 43
У меня есть некоторые ограничения в значениях, максимальное значение, которое может иметь атрибут и - 30, сложение всех из них - всегда 30. И атрибуты всегда положительные.
Ключ в том, что я хочу сгенерировать ту же хеш-сумму для схожих целых чисел, например, если у меня есть целые числа 14, 4, 10, 2, тогда я хочу сгенерировать ту же хеш-сумму, в случае выше 43. Но, конечно, если целые числа очень разные (4, 4, 2, 20), тогда у меня должна быть другая хэш-сумма. Также это должно быть быстро.
В идеале мне бы хотелось, чтобы выходные данные хэш-суммы находились в диапазоне от 0 до 512, и они должны быть равномерно распределены. С моими ограничениями у меня может быть около 5K различных возможностей, так что я хотел бы иметь около 10 на ведро.
Я уверен, что есть много алгоритмов, которые делают это, но я не мог найти способ погуглить эту вещь. Может кто-нибудь, пожалуйста, опубликуйте алгоритм для этого?.
Дополнительная информация
С этим связано то, что эти целые числа являются атрибутами для функции. Я хочу сохранить значения функции в таблице, но у меня недостаточно памяти для хранения всех различных параметров. Вот почему я хочу обобщить сходные атрибуты.
Причина, по которой 10, 5, 15 полностью отличаются от 5, 10, 15, заключается в том, что если вы представляете это в 3d, то обе точки совершенно разные
Дополнительная информация 2
Некоторые ответы пытаются решить проблему с помощью хеширования. Но я не думаю, что это так сложно. Благодаря одному из комментариев я понял, что это проблема алгоритма кластеризации. Если у нас есть только 3 атрибута, и мы представляем проблему в 3d, мне просто нужно разделить пространство на блоки.
Фактически это можно решить с помощью правил такого типа
if (att[0] < 5 && att[1] < 5 && att[2] < 5 && att[3] < 5)
Block = 21
if ( (5 < att[0] < 10) && (5 < att[1] < 10) && (5 < att[2] < 10) && (5 < att[3] < 10))
Block = 45
Проблема в том, что мне нужен быстрый и общий способ генерации тех, если я не могу написать все возможности.