instagram twitter linkedin github youtube

14.7.15

Knuth-Morris Prat arama algoritması

Knuth-Morris-Prat Bir kelimenin (yada Bir metin parçasının) Bir metin İÇERİSİNDE aranmasını sağlayan algoritmadır algoritması. Basitçe bu algoritmada Bir kelimenin aranan Metinde bakılması ziyaretinde bakıldığı yerde bulunamaması durumunda nerede olabilecegi Ile Ilgili Bir Bilginin Elde Edilmesi hedeflenir.
Algoritma aranan kelimenin, aranan Metinde bulunmaması durumunda, kelimenin içerisindeki harflerden yola çıkarak Birden Fazla ihtimali elemektedir.
Klasik Bir metin arama işleminde aranan kelime metindeki bütün, ihtimallerde denenir. (Örneğin Doğrusal arama (doğrusal arama)  bu sekılde Çalışır). KMP algoritmasında imkb aranan metindeki bütün, ihtimaller denenmez. Bu Durumu anlamak Click Bir örnek Üzerinden algoritmayı inceleyelim:
KMP algoritmasının çalışması.
Örneğin metin Olarak:
ŞABCDŞADEFABŞADI
Aranan kelime Olarak da:
Sadi
Click KMP algoritmasının nasıl çalıştığını inceleyelim.
Öncelikle aranan kelime aşağıdaki sekılde ilk harflerinden karşılaştırılmaya başlanır ziyaretinde metin:
ŞABCDŞADEFABŞADI
Sadi
ilk on iki Harfin tutmasına karsilik 3. 4. harfler tutmamaktadır ettik. Algoritma benzemeyen ilk harf Olan 3. harfi bulunca geri kalanını benzetmeye çalışmaktan vaz geçer. AYRICA bakmış Olduğu harflerden hiçbirisi Aradığı kelime olmadigi Click Metinde Aradığı kelime boyu Kadar kayarak yeniden arama yapar.
ŞABCDŞADEFABŞADI
    Sadi
Yukarıdaki sekılde 4 harf kayarak D harfinden itibaren ODALAR VE DETAY arama YAPMAYA baslar göster çünkü Bir Önceki aramada, ilk 4 harf Arasında aranan kelimenin ilk harfi Olan Ş harfinin bulunmadığını anlamis ziyaretinde artık bu harflere bakmak gerekmediği sonucuna varmıştır.
4. harf Olan D harfi ile Başlayan Metinde, aranan kelime Olan sadi karşılaştırılmış ziyaretinde görülmüştür ki metin uymmamaktadır. Ancak aranan Metnin Bir Parçası Olan Kısmı üzücü göster buradaki aranan harfler arasındadır. dolayısıyla algoritma bu sefer 1 harf kaydırarak Ş harflerini alt alta getirerek deneme yapar ettik.
ŞABCDŞADEFABŞADI
     Sadi
Karşılastırma İşlemi sonucunda ilk ziyaretinde Vardır 3 harf tutmasına karsilik oğul harfte sorun karşılaştırılan harflerden hiç birisi aradığımız kelimenin baş harfi Olan Ş ile başlamamaktadır. Bu DURUMDA 4 harf Daha hareket edilerek Bir Sonraki karşılastırma İşlemi Yapılır Metinde:
ŞABCDŞADEFABŞADI
         Sadi
Karşılaştırmada başarı olmamasına karsilik oğlu harf Ş harfidir ziyaretinde dolayısıyla bu harfi Yakalamak Click 3 harf Daha kaydırılır:
ŞABCDŞADEFABŞADI
            Sadi
Bu kez başarı Elde Edilmiş aranan kelime bulunmuştur ettik.
Yukarıdaki örnekte dikkat edilirse Toplam 5 karşılastırma İşlemi Yapılmıştır. Bu Işlem Doğrusal arama algoritması ile yapılsaydı 12 karşılastırma gerekcekti. Bu anlamda KMP algoritmasının Daha Başarılı Olduğu söylenebilir.  
Algoritmanın Performansı Olarak O (n) Değeri bulunabilir (n Metnin BOYUTU Olarak düşünülürse). Doğrusal arama ile Cardio sonucun Alındığı algoritma Performansı Click en kötü durum analizi Yapıldığı ziyaretinde en kötü DURUMDA Doğrusal arama ile Cardio olacağı unutulmamalıdır.

Arama algoritması Click pseudocode Açıklaması 

Yukarıdaki örnekte algoritmasının Tüm Unsurları içermektedir.  Şu an Click, bir "kısmi maç" tablosu varlığını varsayalım T tarif, aşağıda biz Şimdiki tek Bir uyumsuzluk biter durumunda Yeni Bir ​​maçın başlama Click bakmak Gerekir nereye Gösterir. Girdileri T biz Başlayan bir maç Varsa o kadar INSA Edilmiş [M] karşılaştırırken Başarısız S [M + i] Click [i] B , bir Sonraki want maç endeksi başlayacak T [- m + II] Olarak S (yani, T [i] biz uyumsuzluğu Sonra yapmanız Gereken "yararlar" miktarıdır ). Bu on iki Etkileri Vardır: birincisi, T [0] -1 = Eger belirten, W [0] Bir uyumsuzluk, biz sarfınazar edemez ziyaretinde Sadece Bir Sonraki karakteri Kontrol etmelidir; ikincisi ettik, bir Sonraki olasi maç Rağmen baslar endeksi de m + I - T [i] , yukarıdaki örnekte Olduğu gibi, göster Aslında hiçbir, Kontrol GEREKMEZ T [i] bundan Sonra karakter, o yüzden gelen arama devam B [T [i]] . Aşağıdaki örnek Bir sözde kod KMP arama algoritması uygulanması.                                   
algoritması  kmp_search :
      Giriş : 
        karakter dizisi, S (metin Arancak) 
        karakter dizisi, W (kelime Aradı) Çıktı : 
        Arasında Bir tamsayıdır ( sıfır Temelli W Bulunan edildiği S pozisyon)
    

    değişkenleri tanımlamak : 
        Bir tamsayı, m ← 0 (S geçerli maçın başında) 
        Bir tamsayı, ben 0 (W geçerli karakterin konumunu) ← 
        tamsayı dizisi, T (tablo Başka Bir yerde, hesaplanan)

    ISE 1 <uzunluk, (S) - m + ı mutlaka 
        Eger B [i] = S [M + i] Sonra 
            Eger i = uzunluk (W) - 1 Ardından 
                Dönüş m
              Izin i ← i + 1
          başka 
            Eger T [i]> -1 Sonra 
                Topçu Alay Komutanı m ← m + i - T [i] T ← [i]
              başka 
                Izin 0 ← m ← m + 1 i 
            
    (Burada Ulaşmak, biz Başarısız S Tüm arama var) DÖNMEK S uzunluğu

    

ARAMA algoritması verimliligi 

Tablo Önceden var oldugunu varsayarak, T , Knuth-Morris-Pratt algoritmasının Ara bölüme sahiptir karmaşıklığı O ( n ) , n, uzunluğu S ziyaretinde O Olduğu Büyük O gösterimi . Giren ziyaretinde çıkan fonksiyonu Click katlanılan sabit Yükü Dışında, tum Hesaplamaları yapılmaktadır Süre döngü. Bu döngünün yineleme Sayısı Bağlı etmek; Bu gözlemlemek T İnşa böylece Başlamış Olan bir maç Eger [M] karşılaştırarak yaparken Başarısız S [M + i] Click B [I] , bir Sonraki want maç başlayacak Gerekir S [M +: (i - Ti [i])] . Özellikle, bir Sonraki olasi maç Daha YÜKSEK endeks meydana gerektiğini m böylece, T [i] <i                                  
Bu durum döngüsü tr Fazla 2 yürütebilirsiniz ima n ona tekrarda bu döngü on iki kolundan biri yürütür beri kez. ilk dalı değişmez artar i değişmez ziyaretinde m İndeksi, böylece m + ı , şu anda incelenip karakter S artar. İkinci şube ekler [i] T - i ıcın m onu met, gördüğümüz Gibi ettik, zaman pozitif Bir sayıdır. Böylece Konum m MEVCUT Potansiyel maçın başında artar. Ayni ZAMANDA, ikinci Bir ​​dal Yaprakları M + l Click değişmemiş m Alir I - T [i] buna ilave etmek, Edildi ziyaretinde hemen Sonra T [i] Yeni Bir ​​Değer Olarak atanmaktadır ziyaretinde i , dolayısıyla T [old_i] + T [old_i] = old_m + old_i - new_m + new_i = old_m + old_i . , döngü sona ererse şimdi M + = N ; Bu nedenle, döngünün ulaşılabilir tr onun dal n sırasıyla ya beri, zaman artırmak + i m ya da m ziyaretinde m ≤ m + i Eger: m = n , sonra kesinlikle m + in , o göster çünkü böylece En birim artışlarla artar, biz olmalıydı i + m = n Bir is on a distinguished bu nedenle ziyaretinde Geçmişte onu on iki DURUMDA da biz bitmiş OLACAKTIR.                                                          
Böylece döngü En Fazla 2 çalıştırır n arama algoritması zaman karmaşıklığı oldugunu gösteren, Sureleri O ( n ).      
İşte çalışma zamanı Düşünmek Click Başka Bir yoludur: Bize maç BAŞLAR diyelim B ziyaretinde S pozisyonunda i ziyaretinde s . Eger B Bir alt dize Olarak var S s, sonra [0..m] W = S [p..p + m] . Başarı Üzerine, bu kelime POZİSYONLARDA Eşleşen metin (Olduğu ziyaretinde [i] = S [p + i] W ), biz artırmak i metin de uymuyor Pozisyonları (ve kelime, yani başarısızlık Üzerine 1 ile W [i] ≠ S [p i + ] ) kelimesi işaretçi beligbli Bir ​​miktar geri alınır imkb, metin işaretçisi, hala Tutulur ( i = T [i] , burada T atlama tablo), A.Ş. Biz maç girişiminde W [T [i]] ile S [p + i] . rulo -arka Sayısı i Tarafından sınırlanan i , O, söylemek biz başarısızlık Kadar ilerlemiştir gibi HERHANGİ Bir başarısızlık, biz sadece sadece geri Kadar dönebilirsiniz oldugunu. Sonra 2 Açıktır zamanı N