Реферат по предмету "Программирование"


Поиск подстроки в строке с помощью хеш-функции

Поиск подстроки в строке с помощью хеш-функции

Поиск
подстроки в строке - часто возникающая на практике задача. Поиск подстроки в
строке обычной подстановкой к каждой позиции строки всей подстроки - метод
неэффективный и вообще грустный. Я рассмотрю метод поиска с помощью хеш-функции
- достаточно простой и быстрый.

Каждый
символ имеет свой уникальный код от 0 до 255. Суть метода заключается в том,
чтобы для подстроки подсчитать некоторую хэш-функцию (например сумму кодов всех
символов в строке), затем посчитать ту же самую хэш-функцию для части строки,
равной по длине подстроке, и, в случае совпадения хэш-функции, полностью
сравнить его. Ускорение работы алгоритма связано с тем, что мы каждый раз не
пересчитываем каждый раз хэш-функцию, а только отнимаем значение функции от
самого "старого" символа и добавляем значение функции от следующего
символа.

Пример:

Алфавит
кодов:

Q
= 1

W
= 2

E
= 3

R
= 4

T
= 5

Y
= 6

Подстрока:
QWERTY

Строка:
QWERYTEWEQWERTY

Считаем
хэш-функцию для подстроки: SS = 1+2+3+4+5+6+7 = 28

QWERYTEWEQWERTY

Считаем
хэш-функцию для первых 6 символов строки: FS = 1+2+3+4+5+7+6 = 28

Проводим
полное сравнение строк - строки не совпадают.

QWERYTEWEQWERTY

FS
= 28 - [Q] + [E] = 28 - 1 + 3 = 30 - код не совпадает, сравнение не проводим.

QWERYTEWEQWERTY

FS
= 30 - [W] + [W] = 30 - 2 + 2 = 30 - код не совпадает, сравнение не проводим.

QWERYTEWEQWERTY

FS
= 30 - [E] + [E] = 30 - 3 + 3 = 30 - код не совпадает, сравнение не проводим.

QWERYTEWEQWERTY

FS
= 30 - [R] + [Q] = 30 - 4 + 1 = 27 - код не совпадает, сравнение не проводим.

QWERYTEWEQWERTY

FS
= 27 - [Y] + [W] = 27 - 6 + 2 = 23 - код не совпадает, сравнение не проводим.

QWERYTEWEQWERTY

FS
= 23 - [T] + [E] = 23 - 5 + 3 = 21 - код не совпадает, сравнение не проводим.

QWERYTEWEQWERTY

FS
= 21 - [E] + [R] = 21 - 3 + 4 = 22 - код не совпадает, сравнение не проводим.

QWERYTEWEQWERTY

FS
= 22 - [W] + [T] = 22 - 2 + 5 = 25 - код не совпадает, сравнение не проводим.

QWERYTEWEQWERTY

FS
= 25 - [E] + [Y] = 25 - 3 + 6 = 28 - код совпадает, полное сравнение совпадает.
Ура!

Текст
программы:

Program
FSISHF; {поиск подстроки в строке}

Const

  NStr = 30000;

  NSub = 3000;

Var

 
FStr : array[1..NStr] of char;

 
FSub : array[1..NSub] of char; {substring}

 
FSum, NSum : longint; {Контрольная сумма}

  Spec, Work : word;

 
Flag : boolean;

Begin

 
FSum := 0;

 
NSum := 0;

 
FillChar(FStr, SizeOf(FStr), 0);

 
FillChar(FSub, SizeOf(FSub), 0);

 
For Spec := 1 to NSub do

   
FSum := FSum + Ord(FSub[Spec]);

 
For Spec := 1 to NSub do

   
NSum := NSum + Ord(FStr[Spec]);

 
For Spec := NSub to NStr do begin

   
If NSum = FSum then begin

     
Flag := true;

     
For Work := 1 to NSub do

        If FSub[Work] FStr[Spec - NSub
+ Work] then begin

          Flag := false;

          break;

        end;

     
If Flag = true then begin

        Writeln ('substring starts at position:
', Spec - NSub);

        Halt;

     
end;

   
end;

   
NSum := NSum + Ord(FStr[Spec + 1]) - Ord(FStr[Spec - NSub + 1]);

 
end;

 
Writeln('no such substring');

end.
Список литературы

Для
подготовки данной работы были использованы материалы с сайта http://g6prog.narod.ru/


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат East Timor Essay Research Paper The Indonesian
Реферат Коммуникационная кампания при выведении на рынок новых услуг и продуктов b-2-b
Реферат Меры обеспечения производства по делам об административных правонарушениях
Реферат Исследование профессиональной направленности личности студентов химического фaкультета на педагогическую и исследовательскую специальности
Реферат Деятельность Американской Администрации Помощи на Ставрополье во время голода 1921-1922 гг
Реферат Маркетинг: необходимость и проблема анализа конкурентного положения предприятия на рынке (российская специфика)
Реферат Математическое ожидание и дисперсия для интервальных и пропорциональных шкал. Доверительные интервалы
Реферат Emma Essay Research Paper Emma Austen Jane
Реферат Аналіз телевізійного рекламного слогана
Реферат Современные проблемы квантовой механики
Реферат Racisms Nature Essay Research Paper In our
Реферат Развитие предпринимательского сектора на примере ОАО "Льнозавод "Маслянинский"
Реферат "Дворцовые перевороты" и усиление позиций аристократии и гвардии: причины и последствия
Реферат Разработка системы автоматизации для малого коммерческого предприятия, работающего в сфере информационных услуг
Реферат Екологічні проблеми Високопільського району Херсонської області