я просто когда смотрел вот на список гогродов, телефонов, стран, смотрю, вот а реально, ведь где-то ж можно взять символ просто 1, 2ой, 3ий — и получить однозначное преобразование туда-сюда, а сам ид кодировать в виде числа-смещения (ну к примеру, по 3м символам от 'а' до 'я' можно в 32 символа уложиться, исключив букву ё или ъ из множества, ну или заменив ее ближайшей), т.е. 5 бит, в итоге на сам хеш получаем 5*3 = 15 бит, что для смещения в массиве вполне норм будет. и если мы можем взять 3 таких символа, чтобы они давали уникальное смещение, то ведь это же быстрее будет, чем полный хеш считать, и с ним еще вероятность коллизий не исключается полностью.
и я вот задумался, а нельзя ли это сделать как-то оптимальнее, была мысль сделать самому какую-то либу, которая находит минимальный набор символов, дающий уникальное смещение. но что-то меня сильно испугала сложность алга в общем виде. а потом погуглил — ну как обычно, все сделано уже было до меня)