Генерация (приблизительно) однородного хэша для набора чисел с уклоном

#hash #partitioning

Вопрос:

Мне нужно поместить массив ключевых байтов k в n корзины (для разбиения на разделы по Кафке).

Обычно я бы просто взял наивный пробормотал хэш строки (используя встроенный алгоритм Кафки) и mod n дал мне ведра с равномерным распределением.

Однако, прежде чем я начну, я знаю, что мои входные строки (перед преобразованием в массив байтов) являются смещенными, как показано ниже:

  1. Длина входной строки всегда составляет 4 символа
  2. Символы 1, 3 и 4 всегда являются цифрами 0..9; символ 2-буквенно-цифровой.
  3. Символы 2..4 фактически случайны, насколько я знаю
  4. Символ 1 (первая цифра) следующего распределения:
первая цифра соотношение
1 490
2 1344
3 57
4 25
5 590
6 69
7 4
8 1
9 186
0 29

т. е. первая цифра, равная 0, в 29 раз более вероятна, чем первая цифра, равная 8.

Учитывая эти условия, как я могу сгенерировать хэш, который равномерно распределит ключи по n сегментам?