Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
Boyer-Moore Algoritması ve Analizi
Kerem ERZURUMLU
2
Sunum Planı Temel Tanımlar Basit Bir Arama Algoritması
Analizi Boyer-Moore Arama Algoritması Sonuç
3
Temel Tanımlar Metin arama algoritması üzerinde olarak anılacaktır
Aranan: Aranmakta olan kelime Metin: Aranan kelimenin arandığı katar olarak anılacaktır
4
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
5
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
6
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
7
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.
8
Boyer-Moore Algoritması - III
Uymuyorsa? Aranan: “Zerrin” Metin: “Kerem ile Zerrin’i gördüm.” İlk deneme; “kerem ile Zerrin ...” Zerrin Zerrin
9
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
10
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 );
11
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()
12
Kaynakça Introduction Algorithms
Thomas H. Cormen, Charles R. Leisersen, ronald L. Rivest,
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.