Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 贝尔曼·福特:-为什么有N-1次迭代来计算思维距离?_Python 3.x_Algorithm_Graph Theory - Fatal编程技术网

Python 3.x 贝尔曼·福特:-为什么有N-1次迭代来计算思维距离?

Python 3.x 贝尔曼·福特:-为什么有N-1次迭代来计算思维距离?,python-3.x,algorithm,graph-theory,Python 3.x,Algorithm,Graph Theory,由于我是从教程视频中读到的,所以实现可能是错误的。感谢帮助,外部循环执行N-1次,因为最短路径不能包含更多边,否则最短路径将包含可以避免的循环 次要:如果有N个顶点和N条边,则至少使用1个顶点两次,因此这样的路径将包含一个循环。外部循环执行N-1次,因为最短路径不能包含更多边,否则最短路径将包含一个可以避免的循环 次要:如果有N个顶点和N条边,则至少会使用1个顶点两次,因此这样的路径将包含一个循环。与Djkstra不同的是,该算法不是贪婪的,而是动态的。在循环的第一次迭代中,它在两个顶点之间构建

由于我是从教程视频中读到的,所以实现可能是错误的。感谢帮助,外部循环执行N-1次,因为最短路径不能包含更多边,否则最短路径将包含可以避免的循环


次要:如果有N个顶点和N条边,则至少使用1个顶点两次,因此这样的路径将包含一个循环。

外部循环执行N-1次,因为最短路径不能包含更多边,否则最短路径将包含一个可以避免的循环


次要:如果有N个顶点和N条边,则至少会使用1个顶点两次,因此这样的路径将包含一个循环。

与Djkstra不同的是,该算法不是贪婪的,而是动态的。在循环的第一次迭代中,它在两个顶点之间构建一条可能的路径,然后在每次迭代中,它至少通过一条边改进路径。由于最短路径可以使用最大n-1条边,因此循环的迭代将继续进行,以找到最短路径


对于负循环,算法在第n次迭代时再次检查边是否存在,以减少具有n-1条边的最短路径的权重。如果是,则该边必须是负的,因为所有正边的最短路径应由n-1条而不是n条边组成。

与Djkstra不同,该算法不是贪婪的,而是动态的。在循环的第一次迭代中,它在两个顶点之间构建一条可能的路径,然后在每次迭代中,它至少通过一条边改进路径。由于最短路径可以使用最大n-1条边,因此循环的迭代将继续进行,以找到最短路径


对于负循环,算法在第n次迭代时再次检查边是否存在,以减少具有n-1条边的最短路径的权重。如果是,则该边必须是负的,因为具有所有正边的最短路径应由n-1条而不是n条边组成。

您可以使用任何图形,并确保它没有负边和循环,并使用正确的边顺序(根据拓扑排序顺序选择具有源顶点的边)您只需将每个边放松一次,就可以在一次迭代中找到答案。
当我们考虑到不以逻辑模式获取边,并以随机方式处理它时,n-1项就出现了。

您可以获取任何图形,并确保它没有负边和循环,并采用正确的边顺序(根据拓扑排序顺序选择具有源顶点的边)您只需将每个边放松一次,就可以在一次迭代中找到答案。
当我们考虑到我们不以逻辑模式取边,而是以随机方式处理它时,n-1术语就出现了。

请参考下面有说服力的stackoverflow链接回答:请参考下面有说服力的stackoverflow链接回答:你把它复杂化了,第二个答案很清楚,你说的不是真的。我同意,但我已经用我的一些时间段添加了解释。这个答案是在问题发生的那天。你把它弄得更复杂了,第二个答案很清楚,你说的不是真的。我同意,但我已经用一些时间段添加了解释。这个答案是在问题发生的那天。
def calculateShortestPath(self,vertexList,edgeList,startVertex):
    startVertex.minDistance=0

    for i in range(0,len(vertexList)-1):#N-1 ITERATION
        for edge in edgeList:
            #RELAXATION PROCESS
            u=edge.startVertex
            v=edge.targetVertex
            newDistance=u.minDistance+edge.weight
            if newDistance<v.minDistance:
                v.minDistance=newDistance
                v.predecessor=u
    for edge in edgeList:# FINAL ITERATION TO DETECT NEGATIVE CYCLES
        if self.hasCycle(edge):
            print("NEGATIVE CYCLE DETECTED")
            self.HAS_CYCLE=True
            return
N-Length of the Vertex List.
Vertex List-contains the different vertex.
EdgeList-List of the different Edges.