Cormen String соответствия Рабин-Карп - PullRequest
1 голос
/ 30 декабря 2011

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

www.cs.uml.edu / ~ kdaniels / курсы / 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. Вот что автор имеет в виду под приведенным выше утверждением?

1 Ответ

1 голос
/ 30 декабря 2011

Ваш второй вопрос, кажется, просто о модульной арифметике с -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 * d + y * d + z. Когда мы как раз собираемся избавиться от символа, у нас есть значение хеша x * d ^ (m-1) + ...., где .... зависит только от символов после x. Таким образом, мы можем устранить влияние x на значение хеша, вычитая x * d ^ (m-1) перед умножением на d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...