Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursova2012_Algorytmy_poshuku.doc
Скачиваний:
7
Добавлен:
29.08.2019
Размер:
438.78 Кб
Скачать

1. Теоретичні відомості про алгоритми пошуку підстрічки в стрічці

1.1. Основні поняття.

1.1.1 Стрічка, її довжина, підстрічка.

Тут ми приводимо ряд визначень, які використовуватимемо у викладі матеріалу.

Означення 1. Стрічка (слово) - це послідовність знаків з деякої замкненої множини, яка називається алфавітом.

Означення 2. Довжина стрічки – кількість знаків в стрічці.

Слова позначатимемо буквами латинського алфавіту, напр. X=x[1]x[2]..x[n] – слово довжини n, де x[i] (i-та буква слова) належить алфавіту. Lentgh(X)= =n – позначення довжини стрічки.

Означення 3. Слово що не містить жодної букви називається порожнім.

Порожнє слово зазвичай позначають буквою L. Length(L)=0.

Означення 4. Слово X називається префіксом слова Y, якщо є таке слово Z, що Y=XZ. Причому само слово є префіксом для самого себе (оскільки знайдеться нульове слово L, що X=LX.

Приклад: слово ab є префіксом слова abcfa

Означення 5. Слово X називається суфіксом слова Y, якщо є таке слово Z, що Y=ZX. Аналогічно, слово є суфіксом самого себе

Приклад: слово bfg є суфіксом слова vsenfbfg.

Означення 6. Слово X називається підстрічкою стрічки Y, якщо знайдуться такі стрічки Z1 і Z2, що Y= Z1X Z2. При цьому Z1 називають лівим, а Z2 - правим крилом підстрічки. Підстрічкою може бути і саме слово. Інколи при цьому слово X називають входженням в слово Y. Серед всіх входжень слова X в слово Y, входження з найменшою довжиною свого лівого крила називають першим або головним входженням. Для позначення входження використовують позначення X Y.

Приклад: слова hrf и fhr є підстрічками слова abhrfhr, gf sfdgfro.

1.1.2. Поняття про складність алгоритму.

Метою нашої роботи є знайти ефективний алгоритм, проте нічого поки що не було сказано про метод оцінки алгоритмів.

Традиційно в програмуванні поняття складності алгоритму зв'язане з використанням ресурсів комп'ютера: наскільки багато процесорного часу вимагає програма для свого виконання, наскільки багато при цьому витрачається пам'яті машини? Облік пам'яті зазвичай ведеться за об'ємом даних і не береться до уваги пам'ять, що витрачається для запису команд програми. Час розраховується у відносних одиницях так, щоб ця оцінка, по можливості, була однаковою для машин з різною тактовою частотою.

У даній роботі будуть розглянуті дві характеристики складності алгоритмів - часова і об’ємна. Ми не обговорюватимемо логічну складність розробки алгоритму - скільки «людино-днів» потрібно витратити на створення програми, оскільки не представляється можливим дати об'єктивні кількісні характеристики.

Часову складність підраховуватимемо у виконуваних командах: кількість арифметичних операцій, кількість порівнянь, пересилок (залежно від алгоритму). Об’ємна складність визначатиметься кількістю змінних, елементів масивів, елементів записів або просто кількістю.

Ефективність алгоритму також оцінюватиметься за допомогою підрахунку часу виконання алгоритмом конкретно поставленого завдання, тобто за допомогою експерименту, детальніше про це в частині 2 даної роботи.

1.2. Алгоритми основані на методі послідовного пошуку.

1.2.1. Алгоритм послідовного (прямого) пошуку (The Brute Force Algorithm).

Самий очевидний алгоритм. Позначимо S - слово, в якому шукується зразок X. Нехай m і n - довжини слів S і X відповідно. Можна порівняти зі словом X всі підслова S, які починаються з позицій 1,2,...,m-n+1 в слові S; у випадку рівності виводиться відповідна позиція (Додаток №3, функція Search).

Дуже просто, але дуже неефективно. Адже максимальна кількість порівнянь буде рівна O((m-n+1)*n+1), хоча більшість з них насправді зайві. Наприклад, знайшовши стрічку aabc і виявивши невідповідність в четвертому символі (збіглося лише aab), алгоритм продовжуватиме порівнювати стрічку, починаючи з наступного символу, хоча це однозначно не приведе до результату.

Наступний метод працює набагато швидше простого, але, на жаль, накладає деякі обмеження на текст і шукану стрічку.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]