Поиск подстроки в строке с помощью хеш-функции
Теоретическая сущность метода поиска с помощью хеш-функции подстроки в строке. Характеристика способа ускорения работы алгоритма. Применение алфавита кодов и пример работы предлагаемого метода. Составление программы для поиска подстроки в строке.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | доклад |
Язык | русский |
Дата добавления | 19.01.2011 |
Размер файла | 5,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ПОИСК ПОДСТРОКИ В СТРОКЕ С ПОМОЩЬЮ ХЕШ-ФУНКЦИИ
Поиск подстроки в строке - часто возникающая на практике задача. Поиск подстроки в строке обычной подстановкой к каждой позиции строки всей подстроки - метод неэффективный и вообще грустный. Я рассмотрю метод поиска с помощью хеш-функции - достаточно простой и быстрый.
Каждый символ имеет свой уникальный код от 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.
СПИСОК ЛИТЕРАТУРЫ
1. Для подготовки данной работы были использованы материалы с сайта http://g6prog.narod.ru/.
Размещено на Allbest.ru
Подобные документы
Основные определения поиска подстроки в строке. Простейшие алгоритмы поиска подстроки в строке. Алгоритмы последовательного поиска и Рабина-Карпа, создание и описание программы, реализующей их. Порядок работы с приложением. Тестирование алгоритмов.
курсовая работа [2,7 M], добавлен 24.05.2012Теоретические сведения об алгоритмах поиска подстроки в строке. Глобализация информации в сети Internet. Интеллектуальный поиск. Алгоритм последовательного (прямого) поиска, Рабина и их применение. Анализ алгоритмов. Реализация программного кода.
курсовая работа [230,8 K], добавлен 12.02.2009Теоретические сведения. Основные понятия. Строка, её длина, подстрока. Понятие о сложности алгоритма. Алгоритмы основанные на методе последовательного поиска. Алгоритмы Рабина, Кнута - Морриса - Пратта, Бойера – Мура.
курсовая работа [138,3 K], добавлен 13.06.2007Организация возможности просмотра текстовых файлов и осуществления поиска нужных слов в тексте. Редактирование текста (шрифт, размер). Алгоритм поиска подстроки в строке (метод Кнута-Морриса-Пратта). Загрузка текста из файла (с расширением .txt).
курсовая работа [2,2 M], добавлен 29.05.2013Реализация комплекса программ поиска подстроки в тексте алгоритмом прямого поиска и алгоритмом Кнута-Морриса-Пратта. Сравнительный анализ теоретических и экспериментальных оценок эффективности алгоритмов. Разработка структуры программы, ее листинг.
курсовая работа [2,8 M], добавлен 22.01.2015Понятие алгоритма как набора инструкций, описывающего порядок действий. Поиск в ширину - метод обхода графа и поиска пути в нем. Пример работы алгоритма поиска в ширину, его неформальное и формальное описание. Реализация с помощью структуры "очередь".
курсовая работа [684,8 K], добавлен 05.04.2015Применение метода Гаусса для решения системы линейный алгебраических уравнений. Алгоритм нахождения максимального по модулю элемента в текущей строке и его перестановки на первое место при помощи матрицы перестановок. Блок-схема и код программы.
лабораторная работа [171,3 K], добавлен 02.10.2013Обоснование выбора средства программирования. Входная и выходная информация. Основные требования к программному и аппаратному обеспечению. Анализ метода поиска в строке по алгоритму Боуера-Мура. Глобальные переменные и константы в среде Visual Studio.
курсовая работа [489,0 K], добавлен 01.07.2015Методика разработки программной модели числового метода поиска экстремума функции двух переменных, конструирование ввода исходных данных и вывода с сохранением. Исследование ограничений на функцию, обусловленные методом поиска и средствами моделирования.
курсовая работа [195,4 K], добавлен 17.04.2010Организация поиска информации по заданной теме в сети Интернет. Поиск с помощью поисковых машин. Преимущества и недостатки метода поиска по ключевому слову (фразе). Поиск в каталогах информационных ресурсов. Преимущества и недостатки предметных каталогов.
курсовая работа [47,5 K], добавлен 03.11.2010