Функция для равномерного распределения результатов в фиксированном количестве сегментов - PullRequest
0 голосов
/ 03 марта 2011

Я ищу изящное решение для следующей проблемы:

Я получил X число структур, которое идентифицируется уникальным 64-битным целым числом, которое может иметь любое значение.Я хотел бы равномерно распределить их по заранее определенному количеству сегментов, не зная всех значений min / max id при запуске, и не перемещая никаких значений.

На данный момент лучшее решение, которое я могу придумать, - это карта поиска, в которой идентификатор корзины - это ключ, а значение - это список номера структуры.

Просто хотел проверить, есть ли у кого-то лучшее решение этой проблемы (?)

1 Ответ

1 голос
/ 03 марта 2011

То, что вы постулируете карту поиска из идентификатора группы в список уникальных идентификаторов, представляющих отдельные структуры, означает, что вы не заинтересованы в поиске структур с использованием этих уникальных идентификаторов. Если это так, то, похоже, ваша проблема заключается в том, как получить правильное количество элементов в каждом сегменте ... вы можете сделать это, увеличив счетчик сегментов между сегментами, перенося их от последнего к первому, когда это необходимо, и назначив последовательные структуры. в соответствующее ведро.

Тем не менее, я подозреваю, что вы, вероятно, не выразили свои реальные потребности точно, и, возможно, вам нужно будет найти структуры, используя эти уникальные идентификаторы? Если это так, то решающий вопрос заключается в том, нужен ли вам статистически одинаково вероятный шанс того, что любая данная структура окажется связанной с каким-либо конкретным сегментом (например, структура-на-сегмент округляется и усредняется # структуры / # сегменты, но будет колебания), или вам это нужно точно. В первом случае хеш-карта звучит уместно. В противном случае, я не могу придумать особенно хорошего решения. Возможно, стоит упомянуть, что вы можете иметь указатели на значения и перемещать указатели вокруг, чтобы добиться некоторой балансировки нагрузки, избегая при этом перемещения реальных объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...