Otomat Tabanlı Substring Algoritması

Otomat Tabanlı Substring Algoritması

Bir string'in başka bir string'in substring'i olup olmadığını belirleyen otomat temelli algoritma ve optimizasyonu.

Otomat Tabanlı Substring Algoritması QR Kod

Otomat Tasarımı

Otomatta state sayısı ilgili substring'in boyutuna bağlı olarak genişlemek durumundadır. Örneğin 20 karakter uzunluğunda bir substring için 21 state'li bir otomat gereklidir.
Burada dikkat edilmesi gereken nokta tekrar durumlarında Q0'a değil ilgili state'e dönülmesi gerektiğidir. Böylece "00", "AliAli" gibi tekrarlı substring'lerin de kabulü sağlanacaktır.
Bu durumda geliştirilen algoritma her substring'e özel otomat üretmelidir. Örneğin aşağıdaki otomat sadece "ababaca" şeklindeki substring'i kabul etmektedir. Q1'e "a" dışında bir karakter gelmezse gidilmektedir. Benzer durum diğer state'ler için de geçerlidir.
Burada "baba" gibi tekrarlı substring durumu söz konusudur. Bu durumda şekilde görüldüğü gibi Q0'a değil, ilgili tekrarın başlangıcına dönülmektedir.

Projenin Özellikleri

  • Eş zamanlı kontrol
  • Otomatın kabul durumuna göre form arkaplan rengi
  • İlgili substringe özel otomat üretimi
  • Otomat geçerlilik kontrolü
  • Tekrarlı substring destekli otomat
  • Detaylı yön gösterimi

Proje Detayları

Program açıldığında bizi aşağıdaki ekran karşılıyor. İlk textBox'dan string, 2. textBox'dan ise substring değeri alınıyor. Burada ilgili textBox'ların TextChanged event'leri kullanılarak gerekli fonksiyonların çağrılması sağlanıyor. "islem()" fonksiyonu "Kokersubstr()" fonksiyonuna ilgili değerlerin parametre olarak gönderilmesini ve bu fonksiyondan dönen değere göre textBox arkaplanlarının değiştirilmesini sağlıyor. (Kabul edildiyse yeşil, edilmediyse kırmızı arkaplan ayarlanıyor.) Ayrıca otomatta izlenen yolların textBox 3'e yazdırılmasını sağlıyor. "Kokersubstr()" fonksiyonu ilgili otomat tabanlı substring eşleştirme işlemini gerçekleştiriyor. Söz konusu fonksiyonda boş string ile karşılaşıldığında "false" değeri döndürülüyor. Diğer durumlarda ilgili otomatta bulunulan state "q" değişkeninde tutuluyor ve girilen string bir döngü ile taranıyor. Burada eşleşen char değeri ile karşılaşılırsa "git()" fonksiyonu ile state'de ilerlenmesi sağlanıyor. "b.length" değeri "q" değerine eşit olduğunda final state'e gelindiği için "true" değeri döndürülüyor. Eğer ilgili char değeri eşleşmiyorsa ilk olarak tekrar durumu kontrol ediliyor. Gelinen state'de "00", "000", "AliAli" gibi bir tekrar durumları söz konusuysa bir döngü ile durum tespit ediliyor ve ilgili state'e dönülüyor. Burada tekrar durumu yoksa "bas" değişkeni "true" kalacağından "0" nolu state'e dönülüyor. Sonuç olarak ilgili otomat substring'i kabul ediyorsa true, diğer durumlarda false döndürülüyor. "git()" fonksiyonunda ise "q" static değişkeninin değeri değiştiriliyor ve gidilen yollar "s3" isimli string değişkenine ekleniyor. "kontrol()" fonksiyonunda ise ilgili textBox'a girilen string için tüm substring'ler tespit ediliyor ve "Kokersubstr()" fonksiyonuna gönderilerek otomatın geçerlilik kontrolü yapılıyor. Burada iç içe döngü kurularak "012" gibi bir string "0, 01, 012, 1, 12, 2" gibi substring'lere ayrılıyor. Daha sonra ilgili event fonksiyonları tanımlanıyor. Ayrıca form kapatılırken ilgili Thread'in sonlandırılması sağlanıyor.

İlgili İçerikler

İlgili İçerikler

#Out #Only #Other #Org #One

İlgili İçerikler QR Kod

One

One

Bir

One QR Kod

Org

Org

Org

Org QR Kod

Other

Other

Öbür

Other QR Kod

Only

Only

Tek

Only QR Kod

Out

Out

Çıkış

Out QR Kod