#hash #partitioning
Вопрос:
Мне нужно поместить массив ключевых байтов k
в n
корзины (для разбиения на разделы по Кафке).
Обычно я бы просто взял наивный пробормотал хэш строки (используя встроенный алгоритм Кафки) и mod n
дал мне ведра с равномерным распределением.
Однако, прежде чем я начну, я знаю, что мои входные строки (перед преобразованием в массив байтов) являются смещенными, как показано ниже:
- Длина входной строки всегда составляет 4 символа
- Символы 1, 3 и 4 всегда являются цифрами 0..9; символ 2-буквенно-цифровой.
- Символы 2..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
сегментам?