
- •Анотація
- •1. Теоретичні відомості про алгоритми пошуку підстрічки в стрічці
- •1.1. Основні поняття.
- •1.1.1 Стрічка, її довжина, підстрічка.
- •1.1.2. Поняття про складність алгоритму.
- •1.2. Алгоритми основані на методі послідовного пошуку.
- •1.2.1. Алгоритм послідовного (прямого) пошуку (The Brute Force Algorithm).
- •1.2.2. Алгоритм Рабіна.
- •1.3. Алгоритм Кнута - Моріса - Прата (кмп).
- •1.4. Алгоритм Бойера – Мура і деякі його модифікації.
- •1.4.1. Алгоритм Бойера – Мура.
- •1.4.2. Модификації бм. Швидкий пошук (Класифікація Thierry Lecroq ).
- •Турбо бм (Класифікація Thierry Lecroq ).
- •1.5. Пошук підстрічок з допомогою скінченного автомата.
- •1.5.1. Структура автомата.
- •1.5.2. Приклад побудови скінченного автомата
- •2. Експериментальний аналіз алгоритмів
- •2.1. Суть експерименту.
- •2.2. Результати і аналіз експерименту.
- •3. Програмна реалізація
- •Висновок.
- •Література.
2.2. Результати і аналіз експерименту.
Експеримент проводився для чотирьох. Так як всі алгоритми ставилися в однакові умови, то можна провести їх порівняльний аналіз. Зауважимо, що даний аналіз застосуємо тільки для цих параметрів пошуку, і при інших умовах може відрізнятися.
Результати експеримента занесемо в таблицю (Табл. 3).
Алгоритм |
Час виконання |
||
Довж. ≤10 |
Довж. ≤100 |
Довж. ≤250 |
|
Послідов. пошук |
15 |
93 |
234 |
Алгоритм Рабіна (Хеш – сума кодів) |
15 |
63 |
93 |
КМП |
5 |
30 |
50 |
БМ |
31 |
31 |
32 |
Як і передбачалося, алгоритм Бойера - Мура впорався з завданням швидше за інших. Слід, однак, помітити, що його ефективність зростає лише зі збільшенням довжини стрічки і, відповідно, довжини зразка. Так при довжині стрічки менше або рівне 10 символів, він показав себе гірше, ніж послідовний пошук. Аналогічні результати показує і алгоритм КМП, як для коротких, так і для довгих слів. Його можна використовувати як універсальний, коли невідомі довжини рядка і зразка
Алгоритм Рабіна, при його схожості з послідовним, працює швидше, а його простота і малі трудовитрати на реалізацію, роблять його привабливим для використання в неспеціальних програмах.
Найгірший результат показав алгоритм послідовного пошуку. Як передбачалося лише при невеликому збільшенні довжини рядка, він уже починає працювати повільніше інших алгоритмів.
В даний експеримент не включений алгоритм пошуку за допомогою кінцевого автомата, так як ми використовуємо алфавіт, що складається з 66 літер алфавіту кирилиці, і побудований автомат був би занадто громіздкий. Ефективність цього алгоритму зростає при малій кількості літер в алфавіті.
3. Програмна реалізація
Як раніше уже зазначалось, за допомогою середовища Borland Delphi Enterprise, version 6.0 (Build 6.163), розроблена програма з допомогою якої і велась основна порівняльна характеристика розглянутих даною роботою алгоритмів пошуку підстрічки в стрічці.
Інтерфейс програми складається із поля вводу тексту, в якому відбуватиметься пошук, а також комірка введеня шуканої підстрічки. Також в реалізовані додаткові можливості роботи із файлами, а саме зчитування тексту і збереження результатів.
Результат роботи того чи іншого алгоритму одержується шляхом виклику відповідної функції з пошукового модуля, з передачею конкретних параметрів.
Зокрема для використання методу послідовного пошук здійснюється виклик функції Search(); із переданими параметрами Text, SubString. Це здійснюється при обробці події оnClick для кнопки BitButton1.
Для застосування методу Рабіна використовується функція SearchRabin(), яка виконується при виконанні клацання миші по кнопці BitButton2. Функція SearchRabin(), в свою чергу використовує додаткову функцію Function hashCode() і Рocedure rehash(), для хешування даних.
Щоб скористатись алгоритмом Кнута-Моріса-Прата, необхідно викликати фунцію Function KMPSearch(), це реалізовано обробником на клацання клавіші BitBtn3Click і переданням стрічки і підстрічки як вхідних параметрів для функції пошуку.
Результат роботи алгоритму Бойера-Мура досягається завдяки виконанню функції BMSearch() з переданими даними для пошуку. Це реалізовано кнопкою BitBtn4.
Завдяки тому що всі алгоритми реалізовані окремими функціями, і у окремому модулі (Додаток №3), це дає можливість використовувати його у різного роду інших програмах, не затрачаючи час на розробку самих алгоритмів.
Кнопкою із піктограмою відкритої папки, здійснюється завантаження тексту у програму при допомозі діалогового вікна „Відкриття файлів”, а збереження результатів роботи здійснюється обробником кнопки із піктограмою дискети і діалогу „Збереження файлів”.
Програма на етапі виконання наведена у Додатку №1 рис1 та рис2, а код головного модуля проекту у Додатку №2