»
Y
A
N
M
E
N
Ü
«
Yayılma Öncelikli Arama (Breadth-First Search)
ibrahim dursun @ 6 Ekim 2007 14:10

Recursion doğru kullanıldığı zaman çok işimize yarayabilir. Özellikle ağaç tipi data yapılarının tüm nodelarını 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 stack (yığın) taşabilir ve overflow hatasıyla karşılaşabiliriz.

Alternatif bir yöntem ise kendi yığınımızı kullanarak bu işi yapmaktır. Genel adı ile Breadth First Search (Yayılma Öncelikli Arama):

  • Bir stack yaratılır ve root node’u bu yığına eklenir. (Queue ile de yapılabilir sadece işleme sıranız değişir)
  • 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.
Tüm dizin yapısını dolaşan örnek kod:
Stack stack = new Stack();
stack.Push(new DirectoryInfo(@"c:\"));
while(stack.Count > 0)
{
  DirectoryInfo dir = stack.Pop();
  Console.WriteLine(dir.FullName);
  foreach (DirectoryInfo info in dir.GetDirectories())
    stack.Push(info);
}
Queue kullanarak ise:
Queue queue = new Queue();
queue.Enqueue(new DirectoryInfo(@"c:\"));
while(queue.Count > 0)
{
  DirectoryInfo dir = queue.Dequeue();
  Console.WriteLine(dir.FullName);
  foreach (DirectoryInfo info in dir.GetDirectories())
    queue.Enqueue(info);
}


Bir yorum bırakın

»  Substance: WordPress   »  Style: Ahren Ahimsa