是否有“要处理的东西”设计模式的名称?

时间:2011-02-05 16:47:00

标签: python algorithm design-patterns

我偶尔会使用一种设计模式,我不知道它叫什么。也许它有一个名字,有人知道吗?

当我想遍历树状结构并在其所有节点上执行某些操作时,我会使用它。它是这样的:

nodes_to_handle = [root_node]
while nodes_to_handle:
    node = nodes_to_handle.pop()
    # handle node
    nodes_to_handle += node.get_neighbors()

请注意,结构不必是树;例如,此模式可用于在数组中执行泛洪填充。

那么,这种设计模式是否有可接受的名称?

3 个答案:

答案 0 :(得分:3)

这看起来像深度优先遍历算法。 (因为你从最后弹出列表)

它可以通过几种不同的方式实现:

  • 使用遍历树的迭代器(首选方式)
  • 使用带有回调的遍历功能(与您的一样)(对于#handle node代码)。
    • 在节点类之外
    • 在节点类
  • ...

编辑:没有正确查看代码。 :)

答案 1 :(得分:3)

我认为你得到的是比深度优先遍历更普遍的模式:前沿列表。边界列表是仍需要处理的(已排序或未排序)元素列表;算法继续删除元素并处理它们,直到列表为空或满足其他一些终止条件。

我最喜欢这种模式的例子是dijkstra的算法。在Dijkstra中,前沿列表是优先级队列或堆,每次迭代都会从堆中弹出最小值的元素。

答案 2 :(得分:1)

这是depth-first graph traversal。它是algorithm,而不是design pattern。 (来自Jochen Ritzel的评论。)