• Как сделать устойчивее полиноминальное хеширование?

    @BogolyubskiyAlexey
    Во первых, модуль P должен быть простым.
    Объяснение: H mod P = a, если P - простое, то мы получаем полное количество вычетов - количество различных значений A будет равно P (0...P-1). Если P - составное, то будут коллизии. Это следует из теоремы Эйлера.
    В статье говорится как взламываются хэши с P = 2^64, которое явно не простое :)
    В вторых, чем больше P, тем лучше, т.к. больше значений хэшей. Обычно берут (10^9)+7
    В олимпиадном программировании этого хватает.

    В третьих (не для олимпиад), можно дублировать вычисления хэшей для нескольких модулей P1,P2,P3
    Вероятность что все три хэша дадут коллизию практически невероятна, но возможна.
    Ответ написан
    Комментировать