Question

Je mélange toujours si j'utilise une pile ou une file d'attente pour DFS ou BFS. Quelqu'un peut-il s'il vous plaît fournir une certaine intuition sur la façon de se rappeler quel algorithme utilise quelle structure de données?

Était-ce utile?

La solution

Dessinez un petit graphique sur un morceau de papier et de réfléchir à l'ordre dans lequel les noeuds sont traités dans chaque mise en œuvre. Comment l'ordre dans lequel vous rencontrez les nœuds et l'ordre dans lequel vous traitez les noeuds diffèrent entre les recherches?

L'une d'elles utilise une pile (-première profondeur) et les autres utilisations d'une file d'attente (en largeur) (pour les implémentations non récursifs, au moins).

Autres conseils

Queue peut être considérée en général comme horizontal dans la structure-à-dire, largeur / largeur peut être attribuée à ce - BFS , alors que

Stack est visualisé comme un vertical structure et a par conséquent profondeur -. DFS

BFS explore / traite les sommets les plus proches d'abord, puis se déplace vers l'extérieur à partir de la source. Compte tenu de cela, vous souhaitez utiliser une structure de données lors d'une interrogation vous donne l'élément le plus ancien, en fonction de l'ordre dans lequel ils ont été insérés. Une file d'attente est ce que vous devez dans ce cas, car il est le premier en premier sorti (PEPS). Alors qu'un DFS explore autant que possible le long de chaque branche d'abord, puis bracktracks. Pour cela, une pile fonctionne mieux car il est LIFO (dernier entré, premier sorti)

Je me souviens en gardant un barbecue dans mon esprit. Barbecue commence par un « B » et se termine par un son comme « q » où BFS -> File d'attente et ceux qui restent DFS -.> Pile

Prenez par ordre alphabétique ...

.... B (BFS) ..... C ...... D (DFS) ....

.... Q (file d'attente) ... R ...... S (Stack) ...

BFS utilise toujours la file d'attente, DSF de données utilise la structure Stack. Comme tell explication plus tôt sur DFS utilise retours en arrière. Rappelez-vous faire marche arrière ne peut procéder que par pile.

  

Bfs; Largeur => file

     

DSV; profondeur => pile

Reportez-vous à leur structure

La recherche en profondeur d'abord utilise un Stack de se rappeler où il doit aller quand il atteint une impasse.

  

DFSS

  1. Pile (Last In First Out, LIFO). Pour DFS, nous récupérer de la racine au nœud le plus éloigné autant que possible, c'est la même idée que LIFO.

  2. File d'attente (First In First Out, FIFO). Pour BFS, nous récupérons l'un par un niveau leve, après que nous visitons niveau supérieur du nœud, nous visitons niveau inférieur du noeud, c'est la même idée que FIFO.

Un moyen plus facile de se rappeler, en particulier pour les jeunes étudiants, est d'utiliser l'acronyme similaire:

BFS => Boy dans la file FriendS (pour les dames populaires apparemment).

DFS est le cas contraire (pile).

ne me souviens pas.

En supposant que la structure de données utilisée pour la recherche est X :

Largeur Première = noeuds entré X plus tôt, doivent être générés sur l'arbre premier:. X est une file d'attente

Profondeur Première = noeuds entré X plus tard, doit être généré sur l'arbre premier:. X est une pile

En bref: Stack est Last In First Out, qui est DFS. File d'attente est First In First Out, qui est BFS.

Je voudrais partager cette réponse: https://stackoverflow.com/a/20429574/3221630

Prendre BFS et le remplacement d'une file d'attente avec une pile, reproduit le même ordre de visite de DFS, on utilise plus d'espace que l'algorithme DFS réelle.

Vous pouvez rappeler en faisant un acronyme

BQDS

Belle Reine a Sins TERMINÉ.

En hindi, हुरानी क्यु र्द हा

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top