120 likes | 394 Views
Boyer-Moore Algoritması ve Analizi. Kerem ERZURUMLU. Sunum Planı. Temel Tanımlar Basit Bir Arama Algoritması Algoritma Analizi Boyer-Moore Arama Algoritması Algoritma Analizi Sonuç. Temel Tanımlar. Metin arama algoritması üzerinde Aranan : Aranmakta olan kelime
E N D
Boyer-Moore Algoritması ve Analizi Kerem ERZURUMLU
Sunum Planı • Temel Tanımlar • Basit Bir Arama Algoritması • Algoritma • Analizi • Boyer-Moore Arama Algoritması • Algoritma • Analizi • Sonuç
Temel Tanımlar • Metin arama algoritması üzerinde • Aranan: Aranmakta olan kelime • Metin: Aranan kelimenin arandığı katar olarak anılacaktır
Basit Bir Arama Algoritması - I • Düz mantık ile yaratılacak olan ilk algoritma; for(i=0;i<strlen(metin);i++) t=i match=0 for(j=0;(j<strlen(aranan))&&(match==0));j++) if(metin[t++]!=aranan[i]) match=1
Basit Bir Arama Algoritması - II • Algoritma metin içindeki her harf için en az 1 defa çağırılacaktır • En kötü durumu sürekli tekrar eden bir harf kümesi içindir • aaaaaaaaaaaa içerisinde aab aranması • En kötü durum için algotirma karmaşıklığı O(n*m) olacaktır • En iyi durum için (arananın ilk harfinin metin’de olmaması) karmaşıklığı O(n) olacaktır
Boyer-Moore Algoritması - I • Arama işleminin daha akıllı yapılmasına dayanır • Birinci amaç metin’in ilgili konumunun aranan’da hangi konum olabileceğini tahmin etmekdir • İkinci amaç metin’in bir an önce sonuna ulaşmaktır • Arama öncesi işlemler O(m) karmaşıklığındadır
Boyer-Moore Algoritması - II • Öncelikle aranan kelimedeki harflerin kaçıncı konumda oldukları bulunur • Aranan kelimenin uzunluğu kadar atlanır • Metin’deki mevcut konumdaki harf uyuyorsa • Bir önceki harfe bakılır • Uymuyorsa • Metin’den alınan harfin aranan’da kaçıncı harf olduğuna bakılarak aranan boyundan bu sayı eksiği kadar ileri atlanır.
Boyer-Moore Algoritması - III • Uymuyorsa? • Aranan: “Zerrin” • Metin: “Kerem ile Zerrin’i gördüm.” • İlk deneme; • “kerem ile Zerrin ...” • Zerrin Zerrin
Zerrin ‘ ’ ve ‘n’ ‘ ’ arananın bir parçası değil Zerrin ‘e’ ve ‘n’,‘e’ arananın 2 harfi Zerrin Boyer-Moore Algoritması - IV • “Kerem ile Zerrin’i gördüm”
Boyer-Moore Algoritması - V char *search(char *pat,char *text,int n) {int i, j, k, m, skip[MAXCHAR]; m = strlen(pat); if( m==0 ) return( text ); for( k=0; k<MAXCHAR; k++ ) skip[k] = m; for( k=0; k<m-1; k++ ) skip[pat[k]] = m-k-1; for( k=m-1; k < n; k += skip[text[k] & (MAXCHAR-1)] ) {for( j=m-1, i=k; j>=0 && text[i] == pat[j]; j-- ) i--; if( j == (-1) ) return( text+i+1 ); } return( NULL ); }
Boyer-Moore Algoritması - V • Arama öncesi işlem O(m) • En kötü durum • Metin: “aaaaaaaaabaa” • Aranan:“baa” • O(n*m) • En iyi durum O(n/m) • Ortalama durumda O()
Kaynakça • Introduction Algorithms • Thomas H. Cormen, Charles R. Leisersen, ronald L. Rivest, • http://www-igm.univ-mlv.fr/~lecroq/string/node14.html • http://www-lsi.upc.es/~rbaeza/handbook/algs/7/713b.srch.c.html • http://www.cee.hw.ac.uk/~alison/ds98/node78.html • http://www.cs.ucr.edu/~jiang/cs141/string.pdf