为什么要为节点着色而不是在数据结构中跟踪它们?

Why color the nodes vs. keeping track of them in a data structure?

我正在比较两本书之间的图遍历 material:CLRS 的算法导论,第 3 版(简称 CLRS)和 RN 的人工智能:一种现代方法,第 3 版(简称 AIMA) ).

在广度优先搜索和深度优先搜索这两个部分中,我注意到 CLRS 通过分别将它们着色为白色、灰色和黑色来跟踪未访问节点、边界节点和访问节点,同时 AIMA 跟踪未访问节点、边界和访问节点,通过跟踪具有图及其节点外部数据结构的边界和访问节点。

看来 AIMA 中使用数据结构来跟踪边界和访问节点的方法内存效率更高,并且在图中可能有无限节点的情况下效果更好。有人更喜欢图形着色是有原因的吗,或者两者之间有什么区别?

在写问题时我理解了答案:有一些不同。

  1. CLRS 在这些部分处理有限图,而 AIMA 从一开始就处理未知且可能无限大小的图。 CLRS 搜索算法的第一步是将每个图形节点涂成白色,因此这不适用于 AIMA 的情况。

  2. 在 AIMA 中,如前所述,不应像 CLRS 那样遍历整个图,至少部分原因是它可能很大或无限大。因此,当一个节点在 AIMA 的图形搜索中首次被发现时,它会立即被放置在边界中,因此白色着色没有任何意义,发现的每个节点都在边界上或被访问过,因此三色方案在那种情况。

  3. 这些图形搜索的用例是不同的。在 AIMA 中,图形搜索用于查找导致问题解决目标状态的一系列动作。在 CLRS 中,遍历节点是了解整个图的属性的一种方式。参见示例: