Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.12.2014, 21:02
boom) boom) вне форума
Прохожий
 
Регистрация: 08.12.2014
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Поиска слова по алгоритму Рабина - Карпа

Всем привет! Имеется программа поиска слова по алгоритму Рабина - Карпа

Код:
function Karp(s,x:string):longint;
var hs1,hs2:longint;
    i:integer;
begin
  crsn:=0;
  hs1:=Hash(x,1,length(x));
  for i:=1 to length(s)-length(x) do
    begin
      inc(crsn);
      hs2:=Hash(s,i,length(x)); // <- Вот тут
      if (x=copy(s,i,length(x))) and (hs1=hs2) then
        begin
          Karp:=i;           break;
        end;
    end;
    form1.Comp2.text:=inttostr(crsn);
end;



function Hash(st:string; nr,dl:integer):longint;
var i,h:integer;
begin
  h:=0;
  for i:=nr to nr+dl-1 do h:=(h*125+ord(st[i])) mod 1356;
  Hash:=h;
end;

Но мой преподаватель говорит, что мол хеш не меняется а должен все время пересчитываться. Отнимать старое и добавлять новое. Как то так он и сказал в месте где я пометила. Но я что то не понимаю(( Помогите пожалуйста
Ответить с цитированием
  #2  
Старый 08.12.2014, 21:08
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Видимо он хочет, чтобы хеш не каждый раз пересчитывался целиком, а применялась обратная операция для "вышедшего" из сравниваемого блока символа и потом применялся шаг хеширования к "добавившемуся".
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 09.12.2014, 00:03
boom) boom) вне форума
Прохожий
 
Регистрация: 08.12.2014
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Ну скорее всего так и есть..
Еще и формулу какую ту дал
Код:
 w:=d*(w-k*T[i-m])+T[i]; {вычисление нового значения w}
А что с ней делать...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter