Кіріспе

Сызықтардағы үлгілерді іздеу Компьютер ғылымында, жолдарды іздеу алгоритмдері, кейде жолдарды салыстыру алгоритмдері деп аталады, бұл үлкен жол немесе мәтін ішінде бір немесе бірнеше жолдың (сондай-ақ үлгілер деп аталады) табылу орнын анықтауға тырысатын маңызды жол алгоритмдерінің класы. Жол іздеудің қарапайым мысалы – үлгі мен ізделіп жатқан мәтін, алфавит элементтерінің массиві (шекті жиынтық) Σ болып табылады. Σ адам тілінің алфавиті болуы мүмкін, мысалы, А-дан Z-ға дейінгі әріптер, ал басқа да қолданбалар бинарлық алфавитті (Σ = {0,1}) немесе биоинформатикада ДНК алфавитін (Σ = {A,C,G,T}) пайдалана алады. Іс жүзінде, қолданылатын жол іздеу алгоритмінің әдісі жолдың кодталуына байланысты болуы мүмкін. Атап айтқанда, егер өзгермелі ендік кодтау қолданылса, онда N-ші таңбаны табу баяу болуы мүмкін, бұл N-ге пропорционалды уақытты қажет етуі мүмкін. Бұл кейбір іздеу алгоритмдерін айтарлықтай баяулатуы мүмкін. Көптеген мүмкін шешімдердің бірі – код бірліктерінің тізбегін іздеу, бірақ егер кодтау осыған жол бермеу үшін арнайы жасалмаса, онда жалған сәйкестіктер пайда болуы мүмкін.

Наивті тізбекті іздеу

Бір тізбектің екінші тізбектің ішінде қай жерде кездесетінін анықтаудың қарапайым, бірақ тиімсіз тәсілі – әрбір индексті бірінен кейін бірін тексеру. Біріншіден, сабанның бірінші таңбасынан басталатын иненің көшірмесі бар-жоғын қарастырамыз; егер жоқ болса, сабанның екінші таңбасынан басталатын иненің көшірмесін іздейміз, және т.с.с. Әдетте, қате орынды анықтау үшін әрбір қате орынға бір-екі таңбаны қарау жеткілікті, сондықтан орташа жағдайда бұл O(n + m) қадамды қажет етеді, мұнда n – сабанның ұзындығы, ал m – иненің ұзындығы; бірақ ең нашар жағдайда, мысалы, "aaaaaaaaab" тізбегінде "aaaab" тізбегін іздеу O(nm) қадамды қажет етеді.

Шекті күйдегі автоматты іздеу

Бұл тәсілде, сақталған іздеу тізбесін танитын детерминистік шекті автоматты (DFA) құрастыру арқылы кері жолға түсуден аулақ болады. Оларды құру қымбатқа түседі – олар көбінесе күштік жиын құрылымын (powerset construction) пайдаланып жасалады, бірақ пайдалану жылдамдығы өте жоғары. Мысалы, оң жақта көрсетілген DFA "MOMMY" сөзін таниды. Іс жүзінде бұл тәсіл жиі түрлі реттегі өрнектерді іздеу үшін қолданылады.

Құрамында

Кнут-Моррис-Пратт ізделетін тізбектің соңы ретінде танитын автоматты күйлер тізбегін (DFA) есептейді, ал Бойер-Мур іздеуді тізбектің соңынан бастайды, сондықтан әдетте әр қадамда тізбек ұзындығына тең қадам жасай алады. Беэза-Ятес іздеу тізбегінің префиксі болатын алдыңғы j символдарды қадағалайды, сондықтан бұл шамаланған тізбектерді іздеуге бейімделеді. Битап алгоритмі – Беэза-Ятес тәсілінің қолданылуы.

Индекс әдістері

Тез іздеу алгоритмдері мәтінді алдын ала өңдейді. Мысалы, суффикс ағашы немесе суффикс массиві сияқты тармақша индексін құрғаннан кейін, үлгінің кездесуін жылдам табуға болады. Мысалы, суффикс ағашын уақыт ішінде құруға болады, ал әліпбидің мөлшері тұрақты және суффикс ағашының барлық ішкі түйіндері астындағы жапырақтарды біледі деген болжаммен үлгінің барлық кездесуін уақыт ішінде табуға болады. Соңғысын суффикс ағашының түбірінен DFS алгоритмін іске қосу арқылы жүзеге асыруға болады.

Басқа нұсқалар

Кейбір іздеу әдістері, мысалы триграммалық іздеу, іздеу тізбегі мен мәтін арасында "сәйкестік/сәйкессіздік" емес, "жақындық" бағасын табуға бағытталған. Мұндай іздеулер кейде "шамалы айырмашылықты" іздеу деп аталады.

Бірнеше үлгі бойынша жіктеу

Әр түрлі алгоритмдерді қолданатын үлгілер саны бойынша жіктеуге болады.