Маленький - если вы говорите о вероятности столкновения двух произвольных неравных строк. (Конечно, это будет зависеть от того, насколько «произвольны» строки - разные контексты будут использовать разные строки.)
Large - если вы говорите о вероятности хотя бы одного столкновения в большом пуле произвольных строк. Небольшие индивидуальные вероятности не соответствуют проблеме дня рождения .
Это все, что тебе нужно знать. Определенно есть случаи, когда будут возникать коллизии, и имеет , которые можно указать, что существует только 2 32 возможных хеш-кодов и больше, чем столько строк - так что принцип pigeonhole доказывает, что по крайней мере один хэш-код должен иметь более одной строки, которая его генерирует. Тем не менее, вы должны верить, что хэш был разработан, чтобы быть достаточно разумным.
Вы можете полагаться на него как на довольно хороший способ сузить возможные совпадения для конкретной строки. Это был бы необычный набор встречающихся в природе строк, которые генерировали много коллизий - и даже когда есть несколько коллизий, очевидно, если вы можете сузить поиск кандидатов, установленный с 50K до менее чем 10 строк, это довольно большая победа. Но вы не должны полагаться на него как на уникальное значение для любой строки.
Обратите внимание, что алгоритм, используемый в .NET 4, отличается между x86 и x64, поэтому этот пример, вероятно, не действителен на обеих платформах.