Мне любопытно, как другие решили эту проблему, и какие проблемы могут скрываться за наивным решением:
У меня есть система, которая обрабатывает данные фондового рынка. Есть десятки тысяч символов с соответствующими ценами/размерами, втекающими в систему со скоростью несколько тысяч за миллисекунду.
Одна из основных операций, которые должны выполняться на каждом тике, - это сравнение строк, чтобы увидеть, соответствует ли входящий нам интересующий символ. На такой высокой частоте оптимизация этих сравнений строк может измерить разницу в производительности всей системы.
Я собираюсь создать хэш символьной строки и сохранить ее с записью. Для последующего сравнения система должна использовать этот хэш (будучи int или long, сравнение должно быть одной операцией, а не повторением каждого символа строки до тех пор, пока не будет обнаружено несоответствие).
Пусть игнорирует стоимость генерации самого хэша (что на самом деле может быть действительно запретительным). Единственная проблема, которую я вижу, заключается в том, что при большом количестве уникальных символов хеш-столкновение (два отдельных символа генерируют один и тот же хэш) было бы разрушительным. Существует ли алгоритм хэширования, который гарантирует, что строки, которые соответствуют определенным ограничениям (например, ограничение на количество символов), уникальны?
EDIT: Я напишу этот код на Java. Не уверен в качестве (collision) качества hashCode или скорости, с которой он рассчитывается.