在图算法中,确定是否访问节点的最佳方法是什么?

In Graph Algorithm, what is the best way to determine if a node is visited?

本文关键字:节点 最佳 方法 是什么 访问 是否 算法      更新时间:2023-10-16

我最初以两种方式进行。一种方法是将访问的节点存储在列表中并浏览列表以确定之前访问了节点。另一个正在使用布尔数组,该阵列跟踪访问和未访问的节点。它真的很感兴趣,最好的方法是什么?

一种方法,可用于微观优化(更好的缓存行为,避免查找),正在每个节点对象上存储一个标志。显而易见的缺点是图算法不是重新输入的。是否想执行A 不同的图形遍历以在遍历期间做出决定?好吧,你不能。您还必须记住之后要清除所有这些标志。

另一个类别是在每次转化的基础上维护单独的数据结构。尽管列表方法效率非常低 - o(n)每次查找的时间都非常低,但您给出的两种方法都属于此方法。布尔数组(可能被压缩到bitset中;此选项是极其空间有效的)在时间和空间上都是简单有效的,但要求节点具有连续的索引/ID。这并不总是给出的,并且对图形处理的其他部分产生后果。

如果您没有,而是请参考带指针的图形对象,则可以根据此使用映射。在诸如Python之类的高级语言中,这非常简单(并且由于高度调谐的哈希表/设置数据结构,也很有效)。

显而易见的优势是图形遍历是重点的。虽然这听起来不多,但我可以证明有时会出现这种情况的情况。

取决于您的用法为了获得更好的时间性能,您可以使用哈希地图您也可以使用b-tree存储节点o(logn)插入和查找

个人,我将根据每个节点的唯一值使用哈希地图。您可以控制哈希图的大小以反映您的需求,并且通过良好的哈希功能,可以控制碰撞。查看此代码示例https://github.com/himanshujindal/reconstructing-books-from-google-ngrams