Ваша проблема (близка к) неразрешима для многих функций расстояния между строками.
Большинство функций расстояния (например, редактирование расстояния ) позволяют преобразовать строку в другую строку с помощью последовательностииз преобразований на 1 расстояние:
"AAAA" -> "AAAB" -> "AAABC"
в соответствии с вашими требованиями, первая и вторая строки должны иметь одинаковое значение хеш-функции.Но так должно быть вторым и третьим, и так далее.Таким образом, все строки должны будут иметь одинаковый хеш, , если мы позволим паре с расстоянием = 1 иметь одинаковое значение хеш-функции.
Даже если мы установим более высокий порог для расстояния(возможно, относительно длины строки), мы получим грязный результат.
Лучший (IMO) подход - найти отношение эквивалентности на множестве строк, например,что каждая строка в каждом классе эквивалентности имеет одинаковый хэш.Возможность состоит в том, чтобы определить классы по их расстоянию до предварительно определенной строки (например, расстояние редактирования от «AAAAA»), и само расстояние будет значением хеш-функции.Вероятно, этот подход не будет лучшим в вашем случае, но, возможно, с некоторой дополнительной информацией по проблеме, мы можем придумать лучшее отношение эквивалентности.