让我们在我的有向图G =(V,E)中说,我有分配了某些数字的节点,n [v]。我想找到每个顶点的最高n [v],即max(n [v])表示从G中每个顶点可到达的节点的最大n [v]
我们有效解决这个问题是什么?
我在考虑每个节点上的DFS线路而没有回溯并且比较所有“访问过的”的n [v]。节点并存储该路径的最大n [v]值
但是,我担心这可能不是有效的解决方案。
答案 0 :(得分:0)
为什么你认为这是低效的?
如果在所有源节点(仅出边缘且没有边缘进入的节点)上运行DFS,则可以保证访问所有节点。
只有在访问完所有孩子后,才能轻松地在节点上存储max(n [v])。
然后,如果从另一个源启动后到达已经具有max(n [v])的节点,则您知道您不必继续探索该节点的子节点,因为该值仅在您分配后分配拜访了所有的孩子们。
你在〜| E |中这样做步骤(除非你的外边缘没有孤立的节点),因为你将每个边缘移动一次。
我想如果你想要超级准确,你将在| E |中做到这一点+ | S |步骤| S |是图表中的源节点数。
这对我来说似乎非常有效。我不确定是否有可能在不检查每个边缘至少一次的情况下获得确定性答案。
编辑:
另外,我想如果你想要更加完整,你可能需要运行检查所有V节点的前期步骤,以确定哪些是源节点。然后,仅在源节点上运行DFS。
总体上如果是| V | + | E | + | S |步骤为O(| V | + | E |)