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

1.4.2. Модификації бм. Швидкий пошук (Класифікація Thierry Lecroq ).

Зсув поганого символу, який використовується в алгоритмі Бойера - Мура, не дуже ефективний для маленького алфавіту, але, коли розмір алфавіту великий порівняно з довжиною зразка, як це часто буває у випадку з таблицею ASCII і при звичайному пошуку в текстовому редакторі, він стає надзвичайно корисний. Використання в алгоритмів тільки його одного може бути досить ефективним.

Після спроби співставлення x і y [i, i+m-1], довжина зсуву - не менше 1. Таким чином, символ y[i+m] обов'язково буде залучений в наступну спробу, а отже, може бути використаний у поточній спробі для зсуву «поганого» символу. Модифікуємо функцію «поганого» символу, щоб прийняти до уваги останній символ х:

bc[ a ] = min { j | 0 j m і x[ m - 1 - j ] = a }, якщо a зустрічається в x,

bc[ a ] = m в протилежному випадку.

Порівняння тексту і зразка можуть здійснюватися в будь-якому порядку.

Турбо бм (Класифікація Thierry Lecroq ).

Турбо БМ також є поліпшенням алгоритму Бойера - Мура. Ми будемо запам'ятовувати сегмент тексту, який зійшовся з суфіксом зразка під час минулої спроби (і тільки тоді, коли стався зсув «гарного» суфікса).

Це дасть нам дві переваги:

1. Можливість перескочити через цей сегмент

2. Можливість застосування «турбо – зсуву»

«Турбо – зсув» може статися, якщо ми виявимо, що суфікс зразка, який збігається з текстом, коротше, ніж той, який був запам’ятований раніше.

Нехай u - запам’ятовуваний сегмент, а v - cуффікс, який співпав під час поточної спроби, такий що uzv - суфікс x. Тоді av - суфікс x, два символи а i b зустрічаються на відстані p в тексті, і суфікс x довжини |uzv| має період довжиною p, а отже, не може перекрити обидва символи а i b в тексті. Найменший можливий зсув має довжину |u| - |v| (його ми і називаємо «турбо - зсувом»).

1.5. Пошук підстрічок з допомогою скінченного автомата.

1.5.1. Структура автомата.

За визначенням, скінченний автомат являє собою п'ятірку М=(Q, q0, A, , ), де:

Q — скінченна множина станів;

q0 Q — початковий стан;

А Q — скінченна множина заключних станів;

— скінченний вхідний алфавіт;

— функція Q х Q, є функцієй переходів автомата.

На початку роботи скінченний автомат знаходится в стані q0. Потім він по черзі читає символи із вхідної стрічки. Знаходячись в стані q і зчитуючи символ а, автомат переходить в стан (q,a). Якщо автомат знаходиться в стані q A говорять, що він допускає прочитану частину вхідної стрічки. Якщо ж q А, то прочитана частина стрічки і зразок для пошуку не співпадають.

Із заключним станом М зв’язана функція , що називається функцією заключного стану, котра визначається наступним чином: є стан, в котрий прийде автомат (з початкового стану), прочитавши стрічку w. Автомат допускає стрічку w тоді і тільки тоді, коли А

Для кожного зразка Р можна побудувати кінцевий автомат, який шукає цей зразок у тексті. Першим кроком у побудові автомата, що відповідає стрічці-зразку Р[1 .. m], є побудова за Р допоміжної суфікс-функції (як в алгоритмі КМП). Тепер визначимо кінцевий автомат, що відповідає зразку Р[1 .. m], наступним чином:

  • Його множина станів Q = {0,1,..., m}. Початковий стан q0 = 0.

  • Функція переходів опреділена відношенням (q — стан, — символ): (q,a) = (Pqa). (1)

Пояснимо це відношення. Треба сконструювати автомат таким чином, щоб при його дії на стрічку Т відношення

i) = (Тi)

було інваріантом (тоді рівність (Тi) = m буде рівносильна тому, що Р входить в Т із зсувом i — m, і автомат тим самим знайде всі допустимі зсуви). Однак у цьому випадку обчислення переходу по формулі (1) необхідно для підтримки істинності інваріанти, що випливає з теорем, наведених нижче.

Теорема. Нехай q = (х), де х — стрічка. Тоді для будь-якого символа а має місце рівність (ха) = (Pqa).

Теорема. Нехай — функція заключного стану для пошуку підстрічки Р[1.. m]. Якщо Т[1.. n] — довільний текст, то (Тi) = (Тi) для i=0,1,..., n.

З вищенаведеного випливає, що завдання пошуку підстрічки складається з двох частин:

побудова автомата за зразком (визначення функції переходів для заданого зразка);

застосування цього автомата для пошуку вхідного зразка в заданому тексті.

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