BFS uygulamasında kuyruğu bir yığınla değiştirirseniz DFS alıyor musunuz?


35

Genişlik ilk arama için standart sahte kod İşte:

{ seen(x) is false for all x at this point }
push(q, x0)
seen(x0) := true
while (!empty(q))
  x := pop(q)
  visit(x)
  for each y reachable from x by one edge
    if not seen(y)
      push(q, y)
      seen(y) := true

Burada pushve popkuyruk işlemleri olduğu varsayılmaktadır. Ama ya yığın işlemleri ise? Elde edilen algoritma, köşeleri birinci dereceden sırayla ziyaret ediyor mu?


"Bu önemsiz" yorumuna oy verirseniz, neden önemsiz olduğunu açıklamanızı rica ediyorum. Sorunu oldukça zor buluyorum.


5
Öğrencilerin bununla mücadele ettiğini gördüm, bu yüzden kesinlikle çok basit olduğunu düşünmüyorum. Ancak, bir cevabın içinde "Evet" veya "Hayır" dan daha fazla ne olmalı? Arzu edilen taneciklik sorudan net değil.
Raphael

2
"Evet" ikna edici bir argümanla gelirdi; "hayır" bir karşı örnekle birlikte gelirdi. Ama neler olduğunu
anlayınca


3
Sözde kod yazmak mümkündür, böylece sadece popbir yığına veya bir sıra işlemine geçerek dfs veya bfs alırız. Ayrıca ilk başta bunun doğru olduğunu belirten sözde kod yazmak kolaydır, ancak öyle değildir. ics.uci.edu//~eppstein/161/960215.html ilgili bir referanstır.
Joe

Yanıtlar:


23

Hayır, bu bir DFS ile aynı değildir.

Grafiği düşünün

görüntü tanımını buraya girin

Düğümleri sağdan sola doğru iterseniz, algoritma size bir geçiş sağlar:

bir,B,E,C,D

bir DFS olması beklenirken

bir,B,E,D,C

Θ(V+E)O(V)

Katılıyorum, sorun önemsiz değil.


5
Bu, bitişik listelerin belirli belirli bir düzene sahip olduğunu varsayar. En azından matematikte, biri onları küme olarak görür ve bir grafiğin, çocukları nasıl yinelediğinize bağlı olarak çoklu derinlik sıralı geçişleri vardır. (Çocuklar için hashe kullandığınızı düşünün.) Bu anlamda, ABECD hala bir derinlik ilk derece. Anketör, bu ortamda bile bir karşı örnek olup olmadığını merak ediyor. (Gerçekten de, burası
zorlaşmaya

3
DED

1
@Arybhata: Ah, pardon, kenarların yönlendirilmesini ve aşağıya dönük olmasını istediğinizi varsaydığımı bilmiyorum. Bunlar yönlendirilmemiş, yani haklısın: Bu yorumda söylediklerim için bile bir karşı örnek. (Bu çok garip: sapını yanlış yazmak zorunda kaldım, bu yüzden SE tarafından kaldırılmayacak.)
rgrig
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.