Алгори́тми по́шуку рядка́ (англ. string searching algorithms) — важливий клас рядкових алгоритмів, що намагаються знайти місце де один або декілька текстових рядків (зразків, англ. pattern) входять у довший рядок або текст.
Постановка задачі
Формальна постановка задачі пошуку рядка (англ. string-matching problem) така: Нехай текст задано у вигляді масиву довжини , а зразок — масиву довжини . Передбачається, що елементи масивів — символи із скінченного алфавіту . Наприклад, алфавіт може мати вигляд чи .
Зразок зустрічається у тексті зі зсувом (англ. occurs with shift s), якщо і (іншими словами ).
Якщо зразок зустрічається у тексті зі зсувом , то величину називають допустимим зсувом (англ. valid shift); інакше її називають недопустимим зсувом (англ. invalid shift)
Задача полягає в знаходженні всіх допустимих зсувів, з якими зразок зустрічається у тексті .
Термінологія
— множина всіх рядків скінченної довжини, утворенних за допомогою символів алфавіту . Порожній рядок також належить .
Довжина рядка позначається як . Конкатенація (об'єднання) двох рядків і записується як , її довжина відповідно дорівнює . Конкатенація складається з символів рядка після яких записані символи рядка .
Приклад:
Рядок називається префіксом рядка (позначається ), якщо . Якщо , то .
Аналогічно, рядок називається суфіксом рядка (позначається ), якщо .
Пустий рядок є одночастно префіксом і суфіксом будь-якого рядка.
Відношення і є транзитивними.
Лема про суфікси, що перекриваються
Припустимо, що , і — рядки, для яких виконується співвідношення і . Тоді, якщо , то ; якщо , то . Якщо , то .
Доведення: Всі три випадки розібрані на малюнку:
Позначимо k-символьний префікс зразка через . Таким чином, і . Аналогічно через позначимо k-символьний префікс тексту .
За допомогою цих позначень, задачу пошуку рядка можна сформулювати, як задачу виявлення всіх зсувів , таких що, .
Базова класифікація алгоритмів
Різноманітні алгоритми розв'язання цієї задачі можна класифікувати за кількістю зразків, що обробляються одночасно. Крім того, алгоритми мають різну складність роботи. Окремо розглядається складність передобробки (передобробка здійснюється або тільки для тексту і не залежить від зразків, або ж тільки для зразків і не залежить від тексту), і складність самого пошуку.
Алгоритми пошуку для одного зразка
Алгоритм | Складність передобробки | Складність пошуку |
---|---|---|
Примітивний алгоритм пошуку рядка | 0 (без передобробки) | Θ(n m) |
Алгоритм Рабіна-Карпа | Θ(m) | в середньому Θ(n+m), в найгіршому випадку Θ(n m) |
Пошук за допомогою скінченного автомата | Σ|) | Θ(n) |
Алгоритм Кнута-Моріса-Прата | Θ(m) | Θ(n) |
Алгоритм Бояра-Мура | Σ|) | Ω(n/m), O(n) |
Σ|) | Θ(n) |
Алгоритми пошуку скінченної множини зразків
Алгоритми пошуку необмеженої множини зразків
Для пошуку зразків, що утворюють нескінченну (або дуже велику) множину, користуються формальними граматиками і регулярними виразами.
Інші класифікації
Класифікація, що бере наявність переобробки, за основний критерій:
Текст не передобробляється | Текст передобробляється | |
---|---|---|
Зразки не передобробляються | Елементарні алгоритми (англ. Elementary algorithms) | Індексуючі методи (англ. Index methods) |
Зразки передобробляються | Конструктивні пошукові системи (англ. Constructed search engines) | Підписуючі методи (англ. Signature methods) |
Індексуючі методи
Швидкі алгоритми пошуку використовують передобробку тексту. Входження зразка може бути швидко знайдене, якщо для тексту побудувати індекс підрядків (наприклад, суфіксне дерево чи ). Так, суфіксне дерево можна побудувати за час Θ(n), а всі z входжень зразка можна знайти за час O(n + z) (якщо вважати, що розмір алфавіту — константа).
Інші варіанти
Деякі алгоритми пошуку, такі як , замість точного входження зразка, шукають частину тексту, що найбільш близька до зразка.
Література
- Thimas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein. Introduction to Algorithms (2nd ed.) The MIT Press.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algori tmi po shuku ryadka angl string searching algorithms vazhlivij klas ryadkovih algoritmiv sho namagayutsya znajti misce de odin abo dekilka tekstovih ryadkiv zrazkiv angl pattern vhodyat u dovshij ryadok abo tekst Postanovka zadachiFormalna postanovka zadachi poshuku ryadka angl string matching problem taka Nehaj tekst zadano u viglyadi masivu T 1 n displaystyle T 1 n dovzhini n displaystyle n a zrazok masivu P 1 m displaystyle P 1 m dovzhini m n displaystyle m leq n Peredbachayetsya sho elementi masiviv simvoli iz skinchennogo alfavitu S displaystyle Sigma Napriklad alfavit mozhe mati viglyad S 0 1 displaystyle Sigma 0 1 chi S a b z displaystyle Sigma a b dots z Zrazok P displaystyle P zustrichayetsya u teksti T displaystyle T zi zsuvom s displaystyle s angl occurs with shift s yaksho 0 s n m displaystyle 0 leq s leq n m i T s 1 s m P 1 m displaystyle T s 1 s m P 1 m inshimi slovami 1 j m T s j P j displaystyle 1 leq j leq m T s j P j Yaksho zrazok P displaystyle P zustrichayetsya u teksti T displaystyle T zi zsuvom s displaystyle s to velichinu s displaystyle s nazivayut dopustimim zsuvom angl valid shift inakshe yiyi nazivayut nedopustimim zsuvom angl invalid shift Zadacha polyagaye v znahodzhenni vsih dopustimih zsuviv z yakimi zrazok P displaystyle P zustrichayetsya u teksti T displaystyle T Terminologiya S displaystyle Sigma mnozhina vsih ryadkiv skinchennoyi dovzhini utvorennih za dopomogoyu simvoliv alfavitu S displaystyle Sigma Porozhnij ryadok e displaystyle varepsilon takozh nalezhit S displaystyle Sigma Dovzhina ryadka x displaystyle x poznachayetsya yak x displaystyle x Konkatenaciya ob yednannya dvoh ryadkiv x displaystyle x i y displaystyle y zapisuyetsya yak x y displaystyle xy yiyi dovzhina vidpovidno dorivnyuye x y displaystyle x y Konkatenaciya skladayetsya z simvoliv ryadka x displaystyle x pislya yakih zapisani simvoli ryadka y displaystyle y Priklad x a b c displaystyle x abc y d e f displaystyle y def x y a b c d e f displaystyle xy abcdef Ryadok w displaystyle omega nazivayetsya prefiksom ryadka x displaystyle x poznachayetsya w x displaystyle omega sqsubset x yaksho y S x w y displaystyle exists y in Sigma x omega y Yaksho w x displaystyle omega sqsubset x to w x displaystyle omega leq x Analogichno ryadok w displaystyle omega nazivayetsya sufiksom ryadka x displaystyle x poznachayetsya w x displaystyle omega sqsupset x yaksho y S x y w displaystyle exists y in Sigma x y omega Pustij ryadok ye odnochastno prefiksom i sufiksom bud yakogo ryadka Vidnoshennya displaystyle sqsubset i displaystyle sqsupset ye tranzitivnimi Lema pro sufiksi sho perekrivayutsya Pripustimo sho x displaystyle x y displaystyle y i z displaystyle z ryadki dlya yakih vikonuyetsya spivvidnoshennya x z displaystyle x sqsubset z i y z displaystyle y sqsubset z Todi yaksho x y displaystyle x leq y to x y displaystyle x sqsubset y yaksho x y displaystyle x geq y to y x displaystyle y sqsubset x Yaksho x y displaystyle x y to x y displaystyle x y Dovedennya Vsi tri vipadki rozibrani na malyunku Poznachimo k simvolnij prefiks P 1 k displaystyle P 1 k zrazka P 1 m displaystyle P 1 m cherez P k displaystyle P k Takim chinom P 0 e displaystyle P 0 varepsilon i P m P P 1 m displaystyle P m P P 1 m Analogichno cherez T k displaystyle T k poznachimo k simvolnij prefiks tekstu T displaystyle T Za dopomogoyu cih poznachen zadachu poshuku ryadka mozhna sformulyuvati yak zadachu viyavlennya vsih zsuviv 0 s n m displaystyle 0 leq s leq n m takih sho P T s m displaystyle P sqsupset T s m Bazova klasifikaciya algoritmivRiznomanitni algoritmi rozv yazannya ciyeyi zadachi mozhna klasifikuvati za kilkistyu zrazkiv sho obroblyayutsya odnochasno Krim togo algoritmi mayut riznu skladnist roboti Okremo rozglyadayetsya skladnist peredobrobki peredobrobka zdijsnyuyetsya abo tilki dlya tekstu i ne zalezhit vid zrazkiv abo zh tilki dlya zrazkiv i ne zalezhit vid tekstu i skladnist samogo poshuku Algoritmi poshuku dlya odnogo zrazka Algoritm Skladnist peredobrobki Skladnist poshuku Primitivnij algoritm poshuku ryadka 0 bez peredobrobki 8 n m Algoritm Rabina Karpa 8 m v serednomu 8 n m v najgirshomu vipadku 8 n m Poshuk za dopomogoyu skinchennogo avtomata S 8 n Algoritm Knuta Morisa Prata 8 m 8 n Algoritm Boyara Mura S W n m O n S 8 n Algoritmi poshuku skinchennoyi mnozhini zrazkiv Algoritm Aho Korasik Algoritm Komenc Valter Algoritm Rabina Karpa Algoritmi poshuku neobmezhenoyi mnozhini zrazkiv Dlya poshuku zrazkiv sho utvoryuyut neskinchennu abo duzhe veliku mnozhinu koristuyutsya formalnimi gramatikami i regulyarnimi virazami Inshi klasifikaciyiKlasifikaciya sho bere nayavnist pereobrobki za osnovnij kriterij Klasi algoritmiv poshuku ryadku Tekst ne peredobroblyayetsya Tekst peredobroblyayetsya Zrazki ne peredobroblyayutsya Elementarni algoritmi angl Elementary algorithms Indeksuyuchi metodi angl Index methods Zrazki peredobroblyayutsya Konstruktivni poshukovi sistemi angl Constructed search engines Pidpisuyuchi metodi angl Signature methods Indeksuyuchi metodi Shvidki algoritmi poshuku vikoristovuyut peredobrobku tekstu Vhodzhennya zrazka mozhe buti shvidko znajdene yaksho dlya tekstu pobuduvati indeks pidryadkiv napriklad sufiksne derevo chi Tak sufiksne derevo mozhna pobuduvati za chas 8 n a vsi z vhodzhen zrazka mozhna znajti za chas O n z yaksho vvazhati sho rozmir alfavitu konstanta Inshi varianti Deyaki algoritmi poshuku taki yak zamist tochnogo vhodzhennya zrazka shukayut chastinu tekstu sho najbilsh blizka do zrazka LiteraturaThimas H Cormen Charles E Leiserson Ronald L Rivest Clifford Stein Introduction to Algorithms 2nd ed The MIT Press ISBN 0 07 013151 1