Алгоритм BFS Введение в алгоритмы книга Кормена, Leiserson Etal - PullRequest
3 голосов
/ 16 декабря 2010

В книге для объяснения алгоритма BFS они предполагают, что каждая вершина может иметь один из трех цветов: белый, серый и черный. Белый - для вершин, которые еще не были посещены, серый - для вершин, которые были посещены, но могут иметь некоторые смежные вершины, которые не были посещены, и черный - для вершин, чьи все смежные вершины были посещены. Я не понимаю, почему они используют три цвета. Мы можем создать алгоритм BFS даже с 2 цветами: 1 для посещенных вершин и 1 цвет для не посещенных вершин. Зачем нам нужен третий цвет. Какую цель это решает

Ответы [ 3 ]

2 голосов
/ 15 января 2012

Третье издание (2009) книги содержит сноску, в которой достаточно двух цветов, и это упражнение 22.2-3 показывает это.Сноска утверждает, что наличие серого и черного цветов помогает понять.Однако ваш вопрос и наличие сноски показывает мне, что, по крайней мере, для некоторых из нас лишний цвет отвлекает от попыток понять алгоритм.

2 голосов
/ 16 декабря 2010

Вам не нужно 3 цвета для базовой BFS, но различие между серым и черным узлами полезно с педагогической точки зрения, потому что серые узлы все еще находятся в очереди, а черные узлы сделаны.

0 голосов
/ 16 декабря 2010

Теоретически, вы можете реализовать BFS только с 2 состояниями. В некоторых случаях полезно иметь 3 состояния. Два из них ниже:

Наличие трех состояний для вершин (3 цвета) полезно при расчете дерева BFS. Любое ребро от Обнаруженного (D) узла до Необнаруженного (U) узла является ребром дерева. Любое ребро от обнаруженного узла до обработанного (P) узла является задним ребром. Любое ребро от обнаруженного узла до обнаруженного узла является перекрестным ребром.

В качестве другого примера, давайте предположим, что вы писали программу для печати всех ребер ненаправленного графика. С 3 цветами (U, D, P) вы обработаете все ребра, которые идут от D до U (вы открываете новую вершину) и от D до D (вы обнаруживаете ребро между братьями и сестрами). Однако вы не будете обрабатывать ребро от D до P. Так как это будет ребро, которое BFS использовало для обнаружения узла в D. С 2 цветами вы не сможете написать такую ​​программу, не дублируя определенные ребра.

1----2
|    |
|    |
3----4

BFS starting at 1:
Tree Edges: {1, 2}, {1, 3}, {3, 4}
Cross Edge: {2, 4}

Without three states you will try to process {2, 1}, {3, 1}, {4, 3}, {4, 2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...