Algorithm 这个类似BFS/DFS/IDDFS的算法有名字吗?

Algorithm 这个类似BFS/DFS/IDDFS的算法有名字吗?,algorithm,graph-theory,Algorithm,Graph Theory,本质上,它是一种深度优先搜索,以一定的深度或成本停止。例如,它可能会从源中删除10条边内的所有节点,然后删除20条边,然后删除30条边。不同之处在于,我不是在每次迭代后从头开始DFS,而是在每次迭代搜索达到极限时存储搜索区域的“周长”(节点列表) 在下一次迭代中,我循环遍历周界上的所有节点,从每个节点执行DFS,在停止之前再次到固定的深度/成本,再次记录下搜索区域的周界,以便下一次迭代开始 我这样做的原因是因为我的图(是一棵树)被分割成一组逻辑“块”,每个逻辑“块”必须在其子块开始被探索之前被充

本质上,它是一种深度优先搜索,以一定的深度或成本停止。例如,它可能会从源中删除10条边内的所有节点,然后删除20条边,然后删除30条边。不同之处在于,我不是在每次迭代后从头开始DFS,而是在每次迭代搜索达到极限时存储搜索区域的“周长”(节点列表)

在下一次迭代中,我循环遍历周界上的所有节点,从每个节点执行DFS,在停止之前再次到固定的深度/成本,再次记录下搜索区域的周界,以便下一次迭代开始

我这样做的原因是因为我的图(是一棵树)被分割成一组逻辑“块”,每个逻辑“块”必须在其子块开始被探索之前被充分探索。有大量的节点,但只有少量的块;我基本上是一块一块地做BFS,每个块(包括大量的单独节点)都由它自己的迷你DFS进行充分的探索


现在,我只是在现场完全编造了这个来解决我的问题,确实如此,但文献中有类似的东西吗?我还没有找到任何东西,但我相信其他人以前也做过,并且正确地分析了它的性能、渐近行为、缺点、错误等等。。在这种情况下,我想知道它。

我现在不知道这种混合类型的名称。我也用过类似的东西,但我不认为它被频繁使用,而且有一个名字。通常,其他算法更有意义:

如果你想分块慢慢前进,为什么不使用BFS呢


通常首选DFS,因为在那里可以获得完整的跟踪。此外,进行迭代比您的算法更简单,只需要两倍的时间,并且需要更少的内存

答案是+1。对于提问者,请使用纯BFS。我想我可以使用纯BFS;我使用DFS的部分原因是遗留问题:它最初是一个好的、纯粹的DFS,后来我实施了区块化。IDDFS->迭代深化深度优先搜索;我实际上是在进行遍历而不是搜索(确切的问题是遍历一个“DOM”树来吐出HTML),我想要遍历一个没有子块的块(即一个没有子组件的HTML页面)的输出。一个纯粹的迭代过程不会给我这个结果。节点上的纯BFS不会给我逐块爬网,如果没有一些图形增强体操来延长块之间的路径,也不会有一个干净的“这个块完成了,还没有开始遍历子块”时刻(我碰巧需要)。我可以使用像dijkstra这样的方法,对边进行加权,以确保逐块遍历,但这似乎不是很简单(虽然我可能错了,但没有尝试过)。我认为dijkstra不会做得更好,而且您还需要内存来存储权重,并以某种方式将权重附加到节点(在另一次遍历中?;)我同意你的看法:在极少数情况下,你确实需要一个不同于DFS和BFS的遍历顺序。我曾经设计过一个模型检查算法,它需要在深度n+1之前完全遍历深度n(具有特定的深度定义),但在块中构造路径(即do DFS)。我也找不到一个简洁的名字,所以我把它叫做增量DFS,并描述了我的意思(请参阅)。