web-dev-qa-db-fra.com

Comment puis-je me souvenir des structures de données utilisées par DFS et BFS?

Je mélange toujours si j'utilise une pile ou une file d'attente pour DFS ou BFS. Quelqu'un peut-il fournir des informations sur la mémorisation de l'algorithme utilisant la structure de données?

20
captcadaver

Dessinez un petit graphique sur une feuille de papier et réfléchissez à l'ordre dans lequel les nœuds sont traités dans chaque implémentation. Comment l'ordre dans lequel vous rencontrez les nœuds et l'ordre dans lequel vous traitez les nœuds diffèrent-ils entre les recherches?

L'un d'eux utilise une pile (profondeur d'abord) et l'autre une file d'attente (largeur d'abord) (pour les implémentations non récursives, au moins).

21
James McNellis

Queue peut généralement être considéré comme horizontal dans la structure, par exemple, width/width peut lui être attribué - BFS, alors que

Stack est visualisé sous la forme d'une structure verticale et a donc profondeur - DFS.

51
sai kumar Battinoju

BFS explore/traite d'abord les sommets les plus proches, puis s'éloigne de la source. Dans ce cas, vous souhaitez utiliser une structure de données qui, lorsqu'elle est interrogée, vous donne l'élément le plus ancien, en fonction de l'ordre dans lequel elles ont été insérées. Une file d’attente correspond à ce dont vous avez besoin dans ce cas, car elle est premier entré, premier sorti (FIFO) . Tandis qu’un DFS explore autant que possible le long de chaque branche en premier, puis entre parenthèses. Pour cela, une pile fonctionne mieux puisqu'il s'agit de LIFO (dernier entré, premier sorti)

26
Lizz In

Je m'en souviens en gardant Barbecue dans mon esprit. Le barbecue commence par un «B» et se termine par un son comme «q», d'où BFS -> Queue et les autres DFS -> pile.

23
kawadhiya21

Prenez-le en ordre alphabétique ...

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

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

6

BFS utilise toujours la file d'attente, DFS utilise la structure de données Stack. Comme l'explique plus tôt, DFS utilise le retour arrière. Rappelez-vous que le retour en arrière ne peut se faire que par pile. 

5
ashutosh

La recherche en profondeur d'abord utilise une variable Stack pour se rappeler où elle doit aller lorsqu'elle se trouve dans une impasse. 

DFSS

2

Bfs; largeur => file d'attente

Dfs; Profondeur => pile

Se référer à leur structure

2
Subrato

Vous pouvez vous souvenir en faisant un acronyme

BQDS

Belle reine a fait des péchés.

En hindi, र्दहा

1
Yogesh Sanchihar
  1. Stack (dernier entré, premier sorti, LIFO). Pour DFS, nous le récupérons autant que possible de la racine au nœud le plus éloigné, c'est la même idée que LIFO.

  2. File d'attente (premier entré premier sorti, FIFO). Pour BFS, nous récupérons un niveau sur un niveau, après avoir visité le niveau supérieur du nœud, nous visitons le niveau inférieur du nœud, c'est la même idée que FIFO.

1
FullStackDeveloper

Un moyen plus facile à retenir, en particulier pour les jeunes étudiants, consiste à utiliser un acronyme similaire:

BFS => Boy FriendS en file d'attente (pour les dames populaires apparemment). 

DFS est autrement (pile).

1
Hongyu Zhang

Ne te souviens de rien.

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

Largeur d'abord= Les nœuds entrésXdoivent être générés plus tôt sur l'arborescence: X est une file d'attente.

Depth First= Les nœuds entrésXplus tard, doivent être générés sur l'arborescence en premier: X est une pile.

En bref: Stack is Last-In-First-Out, qui est DFS. La file d'attente est premier entré, premier sorti, qui est BFS.

0
M-J

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

Prendre BFS et remplacer une file d'attente par une pile reproduit le même ordre de visite de DFS, il utilise plus d'espace que l'algorithme DFS réel.

0
arboreal84