31^x
нечетно для всех x
, поэтому единственный бит, который может изменить нечетность / четность каждого слагаемого, - s[i]
.Таким образом, вам нужно знать s[i]
для каждого термина, так как изменение только одного из них с нечетного на четное изменит изменение нечетности / четности результата.Поэтому я думаю, что минимальный расчет будет:
s[0] + ... + s[n-1] // if odd, the hash will be odd, if even the hash will be even
edit просто перечитайте ваш вопрос и поймите, что вы запрашиваете вероятность.Вероятность составляет 50/50 (при условии, что 50% символов в наборе символов соответствуют четным целым числам).Никакая информация о строке не поможет вам получить лучшую вероятностную оценку, так как нечетность / четность слишком чувствительна к изменению отдельных терминов.