Monday, October 29, 2007

BFS - Sevilmesi Kaçınılmaz Search (Arama) Algoritması

Recursion doğru kullanıldığı zaman çok işimize yarayabilir, kullanılmadığında ise öldürebilir, çocukların(işe yeni başlayanların) ulaşamıyacağı yerlerde saklayınız. Özellikle ağaç tipi veri yapılarının tüm düğümlerini dolaşmak istediğimizde recursiondan faydalanabiliriz. Fakat bu ağaç yapısının ne kadar derinliğe sahip olduğunu kestiremediğimiz durumlarda bu yönteme çok da bel bağlamamak lazım zira işlem aslında yığın yapısı ile gerçeklendiğinden (tüm derleyici yapımı işlemlerinde dahil), yığın taşabilir yani overflow hatasıyla karşılaşabiliriz.

Alternatif bir yöntem ise kendi yığınımızı kullanarak bu işi yapmaktır. Zaten olay bu değilmidir ? Kendin pişir kendin ye..
Genel adı ile "Breadth First Search" ("Yayılma Öncelikli Arama" diye çeviriyorum akademisyenlerin affına sığınarak):

  • Bir yığın yapısı oluşturulur ve root node bu yığına eklenir. (Queue ile de yapılabilir sadece işleme sıranız değişir, pek alışılagelmemiştir ayrıca)
  • Herhangi bir node'un alt node'ları varsa bunlar da yığına eklenir
  • Bulunduğumuz node işlenir ve yığından bir sonraki node çekilir.
  • Yığın boşalana kadar bu işlem tekrarlanır
Pseudo oluştu sanırım, bundan sonrası standart işler artık, kim olsa yapar :)