Проблема в целом: У меня большое 2-х точечное пространство, мало населенное точками. Подумайте об этом как о большом белом холсте, посыпанном черными точками. Я должен перебирать и искать через эти точки много. Холст (точечное пространство) может быть огромным, граничащим с ограничениями от int и его размер неизвестен перед установкой там точек.
Это привело меня к идее хэширования:
Ideal: Мне нужна хеш-функция, получающая двумерную точку, возвращающая уникальный uint32. Чтобы не происходило столкновений. Вы можете предположить, что количество Точки на холсте легко подсчитываются с помощью uint32.
ВАЖНО: Невозможно заранее узнать размер холста (он может даже измениться), поэтому такие вещи, как
canvaswidth * y + x
к сожалению, не может быть и речи.
Я также попробовал очень наивно
abs (x) + abs (y)
но это вызывает слишком много конфликтов.
Компромисс: Хеш-функция, которая обеспечивает ключи с очень низкой вероятностью столкновения.
Какие-нибудь идеи кто-нибудь? Спасибо за любую помощь.
С уважением, Андреас Т.
Изменить: Мне пришлось что-то изменить в тексте вопроса: Я изменил предположение, "способное подсчитать количество точек холста с uint32 "в" возможность подсчитывать точки на холсте (или количество пар координат для хранения) на uint32. Мой оригинальный вопрос не имел большого смысла, потому что у меня был бы размер sqlt (max (uint32)) xsqrt (max (uint32)), который однозначно представлен с помощью 16-битного сдвига и OR.
Я надеюсь, что это нормально, поскольку все ответы по-прежнему имеют смысл с обновленными предположениями
Извините за это.