Obtenez-vous DFS si vous modifiez la file d'attente en une pile dans une implémentation BFS?


35

Voici le pseudocode standard pour la première recherche en largeur:

{ 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

Ici pushet popsont supposés être des opérations de file d'attente. Mais que se passe-t-il si ce sont des opérations de pile? L'algorithme résultant visite-t-il les sommets en profondeur-premier ordre?


Si vous votiez pour le commentaire "c'est trivial", je vous demanderais d'expliquer pourquoi c'est trivial. Je trouve le problème assez délicat.


5
J'ai vu des étudiants se débattre avec cela, alors je ne pense pas que ce soit strictement trop simple. Cependant, que devrait contenir une réponse au-delà de "Oui" ou "Non"? La granularité souhaitée n'est pas claire de la question.
Raphaël

2
"Oui" viendrait avec un argument convaincant; "non" viendrait avec un contre-exemple. Mais il y a de meilleures réponses que oui / non une fois que vous comprenez ce qui se passe ...
mercredi


3
Il est possible d'écrire du pseudo-code de sorte que simplement en passant popà une pile ou à une file d'attente, nous obtenions dfs ou bfs. Il est également facile d'écrire du pseudo-code pour lequel il apparaît au début que c'est vrai, mais ce n'est pas le cas. ics.uci.edu//~eppstein/161/960215.html est une référence pertinente.
Joe

Réponses:


23

Non, ce n'est pas la même chose qu'un DFS.

Considérons le graphique

entrez la description de l'image ici

Si vous poussez les nœuds de droite à gauche, l'algorithme vous donne un parcours:

UNE,B,E,C,

alors qu'un DFS s'attend à ce qu'il soit

UNE,B,E,,C

Θ(V+E)O(V)

Je suis d'accord, le problème n'est pas trivial.


5
Cela suppose que les listes de contiguïté ont un ordre spécifique fixe. En mathématiques au moins, on les voit comme un ensemble, et un graphique a plusieurs traversées dans l'ordre des profondeurs, en fonction de la manière dont on répète les enfants. (Imaginez utiliser des hachages pour les enfants.) En ce sens, l'ABECD reste un ordre de profondeur. Le questionneur se demande s'il existe un contre-exemple, même dans ce contexte. (En effet, c'est là que ça commence à devenir difficile.)
grog

3
E

1
@Arybhata: Oh, désolé, je ne sais pas pourquoi je supposais que vous vouliez que les bords soient dirigés et dirigés vers le bas. Ils ne sont pas dirigés, vous avez donc raison: c’est un contre-exemple, même pour ce que j’ai dit dans le commentaire. (C'est bizarre: j'ai dû mal orthographier votre
pseudo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.