Boyer-Moore Algoritması ve Analizi Kerem ERZURUMLU
Sunum Planı Temel Tanımlar Basit Bir Arama Algoritması Analizi Boyer-Moore Arama Algoritması Sonuç
Temel Tanımlar Metin arama algoritması üzerinde olarak anılacaktır 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
Boyer-Moore Algoritması - IV “Kerem ile Zerrin’i gördüm” Zerrin ‘ ’ ve ‘n’ ‘ ’ arananın bir parçası değil Zerrin ‘e’ ve ‘n’,‘e’ arananın 2 harfi Zerrin
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