Metin içerisinde bir veya birden fazla deseni aramak için Kaba Kuvvet, Boyer-Moore varyantları, Durum Makinesi (FSM), NFA ve Düzenli İfade eşleştirmelerini kullanan yaklaşımlardır.
Metin arama algoritmaları bilgisayar bilimlerinin en temel alanlarından biridir. Basit Kaba Kuvvet (Brute-Force) araması her adımı tek tek denerken, Boyer-Moore ve onun uyuşmayan karakter (mismatched-character) varyantı sağdan sola eşleştirme yaparak gereksiz karşılaştırmaları atlar.
Durum Makinesi (Finite State Machine - FSM) ile desen arama, deseni bir DFA haline getirerek metindeki her karakter için O(1) geçiş süresi sunar. NFA (Nondeterministic Finite Automata) simülasyonu ve Düzenli İfade (Regular Expression) eşleştirme ise joker karakterler, gruplar ve tekrarlar barındıran daha karmaşık kurallı kalıpları kontrol etmeyi sağlar.
Çoklu String Aramaları (Aho-Corasick vb.) ise tek bir geçişte metin içerisinde yüzlerce farklı kelimeyi aynı anda aramak için bir arama ağacı (trie) ve hata geçişleri kullanır.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1function boyerMooreSearch(text: string, pattern: string): number[] {2 const n = text.length;3 const m = pattern.length;4 if (m === 0) return [];56 // Bad character tablosu oluştur7 const badChar: Record = {}; 8 for (let i = 0; i < m; i++) {9 badChar[pattern[i]] = i;10 }1112 const shifts: number[] = [];13 let s = 0;14 while (s <= n - m) {15 let j = m - 1;16 while (j >= 0 && pattern[j] === text[s + j]) {17 j--;18 }19 if (j < 0) {20 shifts.push(s);21 s += (s + m < n) ? m - (badChar[text[s + m]] ?? -1) : 1;22 } else {23 s += Math.max(1, j - (badChar[text[s + j]] ?? -1));24 }25 }26 return shifts;27}Modu, deseni ve metni noktalı virgülle ayırarak girin. Modlar: BF (Kaba Kuvvet), BM (Boyer-Moore), FSM (Durum Makinesi), REGEX (NFA/Regex). Örnek: BM; NEEDLE; FINDINNEEDLESTACK
Modu, deseni ve metni noktalı virgülle ayırarak girin. Modlar: BF (Kaba Kuvvet), BM (Boyer-Moore), FSM (Durum Makinesi), REGEX (NFA/Regex). Örnek: BM; NEEDLE; FINDINNEEDLESTACK
En İyi Durum: O(N / M) Boyer-Moore ile
Ortalama Durum: O(N + M)
En Kötü Durum: O(N * M) Kaba Kuvvet ile
O(M + Σ) bad-char tablosu veya FSM geçişleri için - Bu algoritmanın karmaşıklığı belirtilmemiş.
String Arama ve Eşleştirme (String Search & Matching) Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: