Если большинство сегментов имеют разные размеры, где размер определяется в процентах от идентификаторов, то вам придется каким-то образом представлять это в памяти.В противном случае, как еще вы узнаете эти проценты?
Одно из возможных решений - это, скажем, 100 виртуальных сегментов, каждый из которых представляет 1% идентификаторов.Затем свяжите 90 виртуальных сегментов с сегментом №1/21.Затем вы можете выполнить мод 100 и, если он попадет в первые 90 виртуальных корзин, назначить идентификатор для корзины # 1.Вы можете получить оптимальное количество виртуальных сегментов, поделив процент каждого сегмента на GCD от всех процентов, что в вашем примере составляет 0,5 (GCD (90, 0,5)).
Из вашегоНапример, есть только один отдельный размер сегмента.Лучшее решение действительно зависит от того, какие у вас могут быть договоренности.