Если набор возможных строк известен заранее, вы можете использовать идеальный генератор хеш-функций для этого. Но в противном случае то, что вы просите, невозможно.
Теперь возможно снизить вероятность коллизий, используя хорошую хэш-функцию и убедившись, что ваша таблица огромна. По сути, вам нужен достаточно большой стол, чтобы вероятность вызова Дня Рождения была достаточно низкой, чтобы удовлетворить вас. Тогда вы просто используете n битов вывода SHA-1, и 2 ^ n будет вашим размером таблицы.
Мне также интересно, возможно, вы могли бы использовать фильтр Блума и иметь действительный счетчик вместо битов. Сохраните список всех слов, которые вы вставили в фильтр Блума, и какие записи они увеличили (которые будут одинаковыми каждый раз), и у вас есть гигантская линейная функция, которую вы могли бы решить, чтобы получить все индивидуальный счет снова.