Comment puis-je me souviens que les structures de données sont utilisées par DFS et BFS?
-
30-09-2019 - |
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?
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
-
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.
-
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, ब हुरानी क्यु द र्द स हा