Kayıtlar

String Matching - Conclusions

Resim
Önceki postlarda üç farklı string matching algoritmasını inceledik ve bu algoritmaları implement ederek çeşitli durumlarda ortaya çıkan sonuçları gözlemledik. Bu gözlemler sayesinde algoritmaların etkinliklerini tespit etme şansını elde ettik. İncelediğimiz algoritmalar farklı etkinliklere ve karmaşıklıklara sahiptir. Aşağıda elde edilen sonuç bu konu hakkında daha detaylı bilgi vermektedir.
INPUT:
Text: Bu uygulamayı geliştirirken sizden beklediğimiz, .net (v_4.0) platformunda veritabanı olarak SQL kullanarak bir web uygulaması geliştirmeniz.

Aranan Pattern: "kullana"
OUTPUT:


Output verilerinden de anlaşılacağı gibi karşılaştırma sayısı açısından:
Brute-Force > Horspool > Boyer-Moore
İken çalışma zamanı açısından ise sonuçlar:
Boyer-Moore > Horspool > Brute-Force
Şeklindedir. Bu da algoritmaların etkinliklerinin artmasının her durumda işimize yaramadığını göstermektedir. Basit durumlarda basit algoritmaların kullanılması karşılaştırma sayısını arttırsa da karmaşıklığın a…

String Matching - Boyer-Moore Algorithm

Resim
Boyer-Moore Algorithm
Bu algoritma Horspool algoritmasının geliştirilmiş halidir. Karşılaştırma yaptığımız pattern’in son karakterinin eşleştirilmesi başarısız olursa Horspool algoritmasındaki işlemin aynısı gerçekleştirilir. Fakat herhangi bir sayıda eşleşme olduktan sonra eşleşme başarısız olursa Horspool algoritmasından farklı davranır. Burada iki tablo ortaya çıkmaktadır. Horspool’dan gelen bad symbol shift ve farklı olarak gelen good-suffix shift. Boyer-Moore algoritması bu iki tabloyu değerlendirir ve bu tablolarda karşılık gelen değerlerden maksimum kaydırmayı sağlayacak olan durumu seçer. Bu seçim sayesinde Horspool algoritmasına göre daha büyük bir kayma sağlama şansı doğar.
Bu algoritmalar farklı karmaşıklıklara, çalışma zamanına ve alan kullanımına sahiptir. Bu nedenle bu algoritmalar belirli durumlarda diğerlerine göre daha etkin olabilmektedir.
String eşleştirme algoritmaları günümüzde birçok alanda kullanılmaktadır. Internet ve masaüstü uygulamaları, ofis uygulamaları, oyun…

String Matching - Horspool's Algorithm

Resim
Horspool’s AlgorithmBu konuda brute force string matching algoritmasına alternatif olarak kullanabilecek daha etkin bir algoritma olan Horspool Algoritması açıklanmaktadır.
Brute-Force’a benzer şekilde pattern’in son harfinden başlanarak soldan sağa doğru pattern ve text’te karşılıklı denk gelen harfler karşılaştırılır. Eğer pattern’deki tüm karakterlerin eşleşmesi sağlanırsa substring bulunmuş demektir. Bu durumda arama durdurulabilir veya başka eşleşme var mı diye aramaya devam edilebilir.
Eşleşme olmazsa pattern’i sağa kaydırmamız gerekir. Bu durumda herhangi bir eşleşmeyi kaçırma olasılığını riske atmadan yapabileceğimiz en büyük olası kaydırmayı yapmak isteriz. Horspool algoritması burada pattern’in son karakterine karşılık gelen (c) karakterine bakarak kaydırma yapar. Burada dört olasılık söz konusudur. Bu durumlardan ilerideki sayfalarda bahsedilecek.
BARBER pattern’ini bir text’te aradığımızı düşünelim. Pattern’in son elemanı olan R ile başlayarak sağdan sola doğru hareket ediyoru…