Кіріспе
Сызықтардағы үлгілерді іздеу Компьютер ғылымында, жолдарды іздеу алгоритмдері, кейде жолдарды салыстыру алгоритмдері деп аталады, бұл үлкен жол немесе мәтін ішінде бір немесе бірнеше жолдың (сондай-ақ үлгілер деп аталады) табылу орнын анықтауға тырысатын маңызды жол алгоритмдерінің класы. Жол іздеудің қарапайым мысалы – үлгі мен ізделіп жатқан мәтін, алфавит элементтерінің массиві (шекті жиынтық) Σ болып табылады. Σ адам тілінің алфавиті болуы мүмкін, мысалы, А-дан Z-ға дейінгі әріптер, ал басқа да қолданбалар бинарлық алфавитті (Σ = {0,1}) немесе биоинформатикада ДНК алфавитін (Σ = {A,C,G,T}) пайдалана алады. Іс жүзінде, қолданылатын жол іздеу алгоритмінің әдісі жолдың кодталуына байланысты болуы мүмкін. Атап айтқанда, егер өзгермелі ендік кодтау қолданылса, онда N-ші таңбаны табу баяу болуы мүмкін, бұл N-ге пропорционалды уақытты қажет етуі мүмкін. Бұл кейбір іздеу алгоритмдерін айтарлықтай баяулатуы мүмкін. Көптеген мүмкін шешімдердің бірі – код бірліктерінің тізбегін іздеу, бірақ егер кодтау осыған жол бермеу үшін арнайы жасалмаса, онда жалған сәйкестіктер пайда болуы мүмкін.
In computer science, string searching algorithms, sometimes called string matching algorithms, are an important class of string algorithms that try to find a place where one or several strings (also called patterns) are found within a larger string or text. A basic example of string searching is when the pattern and the searched text are arrays of elements of an alphabet (finite set) Σ. Σ may be a human language alphabet, for example, the letters A through Z and other applications may use a binary alphabet (Σ = {0,1}) or a DNA alphabet (Σ = {A,C,G,T}) in bioinformatics. In practice, the method of feasible string search algorithm may be affected by the string encoding. In particular, if a variable width encoding is in use, then it may be slower to find the Nth character, perhaps requiring time proportional to N. This may significantly slow some search algorithms. One of many possible solutions is to search for the sequence of code units instead, but doing so may produce false matches unless the encoding is specifically designed to avoid it.
Наивті тізбекті іздеу
Бір тізбектің екінші тізбектің ішінде қай жерде кездесетінін анықтаудың қарапайым, бірақ тиімсіз тәсілі – әрбір индексті бірінен кейін бірін тексеру. Біріншіден, сабанның бірінші таңбасынан басталатын иненің көшірмесі бар-жоғын қарастырамыз; егер жоқ болса, сабанның екінші таңбасынан басталатын иненің көшірмесін іздейміз, және т.с.с. Әдетте, қате орынды анықтау үшін әрбір қате орынға бір-екі таңбаны қарау жеткілікті, сондықтан орташа жағдайда бұл O(n + m) қадамды қажет етеді, мұнда n – сабанның ұзындығы, ал m – иненің ұзындығы; бірақ ең нашар жағдайда, мысалы, "aaaaaaaaab" тізбегінде "aaaab" тізбегін іздеу O(nm) қадамды қажет етеді.
Шекті күйдегі автоматты іздеу
Бұл тәсілде, сақталған іздеу тізбесін танитын детерминистік шекті автоматты (DFA) құрастыру арқылы кері жолға түсуден аулақ болады. Оларды құру қымбатқа түседі – олар көбінесе күштік жиын құрылымын (powerset construction) пайдаланып жасалады, бірақ пайдалану жылдамдығы өте жоғары. Мысалы, оң жақта көрсетілген DFA "MOMMY" сөзін таниды. Іс жүзінде бұл тәсіл жиі түрлі реттегі өрнектерді іздеу үшін қолданылады.
Құрамында
Кнут-Моррис-Пратт ізделетін тізбектің соңы ретінде танитын автоматты күйлер тізбегін (DFA) есептейді, ал Бойер-Мур іздеуді тізбектің соңынан бастайды, сондықтан әдетте әр қадамда тізбек ұзындығына тең қадам жасай алады. Беэза-Ятес іздеу тізбегінің префиксі болатын алдыңғы j символдарды қадағалайды, сондықтан бұл шамаланған тізбектерді іздеуге бейімделеді. Битап алгоритмі – Беэза-Ятес тәсілінің қолданылуы.
Индекс әдістері
Тез іздеу алгоритмдері мәтінді алдын ала өңдейді. Мысалы, суффикс ағашы немесе суффикс массиві сияқты тармақша индексін құрғаннан кейін, үлгінің кездесуін жылдам табуға болады. Мысалы, суффикс ағашын уақыт ішінде құруға болады, ал әліпбидің мөлшері тұрақты және суффикс ағашының барлық ішкі түйіндері астындағы жапырақтарды біледі деген болжаммен үлгінің барлық кездесуін уақыт ішінде табуға болады. Соңғысын суффикс ағашының түбірінен DFS алгоритмін іске қосу арқылы жүзеге асыруға болады.
Басқа нұсқалар
Кейбір іздеу әдістері, мысалы триграммалық іздеу, іздеу тізбегі мен мәтін арасында "сәйкестік/сәйкессіздік" емес, "жақындық" бағасын табуға бағытталған. Мұндай іздеулер кейде "шамалы айырмашылықты" іздеу деп аталады.
Бірнеше үлгі бойынша жіктеу
Әр түрлі алгоритмдерді қолданатын үлгілер саны бойынша жіктеуге болады.