Струна Cormen, соответствующая Рабину-Карпу

Я читаю алгоритм Рабина-Карпа по Введению в алгоритмы Кормена и т. Д.

www.cs.uml.edu/~kdaniels/courses/ALG_503_F08/503_lecture11 .ppt

Обратите внимание, здесь == используется как оператор мода

Примечания выше к слайду 13, т. е. к уравнению 34.2, которое прикреплено здесь в виде рисунка. В уравнении мы имеем h == (d)powerof((m-1) (mod q) - это значение цифры «1» в старшей позиции текстового окна с m цифрами.

Мой вопрос здесь, что автор подразумевает под «значением цифры «1» в старшей позиции текстового окна m-цифры»?

Как на слайде 14 автор получил (7-3.3).10 + 2 (мод. 13) как 8 (мод. 13)?

В анализе среднего случая упоминается, что мы можем основывать эвристический анализ на предположении, что уменьшение значений по модулю q действует как случайное отображение от сигмы * до Z. Вот что автор подразумевает под приведенным выше утверждением?


person venkysmarty    schedule 30.12.2011    source источник


Ответы (1)


Ваш второй вопрос, похоже, касается модульной арифметики с числами -ve. Один из способов представить это так: работая по модулю М, вы можете добавлять или вычитать М столько, сколько хотите, поскольку М эквивалентно 0 по модулю М. Таким образом, мы имеем (7-3.3).10 + 2 (мод 13) = -2,10 + 2 = -18 = 13 + 13 - 18 = 8 по модулю 13

Ваш первый вопрос менее ясен для меня, но позвольте мне рассмотреть его подробно. Когда символ впервые появляется в текстовом окне, он просто добавляется. Затем он перемещается по текстовому окну, и, наконец, мы хотим удалить всю память о нем, чтобы после выхода из текстового окна он не влиял на хэш-значение.

Сначала мы видим символ x, и прибавляем его к хэш-значению до сих пор, таким образом, мы получаем h.d + x. Когда мы видим следующий символ, мы умножаем его на d (и делаем другие вещи, которые я пытаюсь объяснить), а затем добавляем новый символ — скажем, y. Итак, мы получаем ... + x*d + y. Следующий шаг дает нам ... + x*d*d + y*d + z. Когда мы собираемся избавиться от символа, у нас есть хеш-значение x*d^(m-1) + ...., где .... зависит только от символов после x. Таким образом, мы можем удалить влияние x на хеш-значение, вычитая x*d^(m-1) перед умножением на d.

person mcdowella    schedule 30.12.2011
comment
Не могли бы вы рассказать, как мы получили 13 + 13-18, это 8 мод 13? Я довольно давно занимался математикой. А также что означает M эквивалентно 0 Mod M? - person venkysmarty; 30.12.2011
comment
Я предлагаю вам прочитать en.wikipedia.org/wiki/Modular_arithmetic и поработать с примерами. которые начинаются с -8 = 7 по модулю 5. - person mcdowella; 30.12.2011
comment
Что касается второго вопроса, чтобы получить разъяснения, автор упоминает, что h = d ^ (m-1) mod q является позицией старшего порядка для m-значного окна. Что здесь имеет в виду автор, не могли бы вы помочь здесь? что он имеет в виду под положением здесь - person venkysmarty; 30.12.2011
comment
На слайде 14 старая цифра старшего разряда — 3, которая является старшей (самой значимой) цифрой в 31415. Чтобы удалить 3 из 31415, поскольку 3 сдвигается за пределы окна, она вычитает 3 * 10^4 = 30000 , оставив 1415, прежде чем она перейдет на новую цифру 2, - person mcdowella; 30.12.2011