Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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中使用范围和字典';s贝尔曼福特实施公司_Python_Graph - Fatal编程技术网

在Python中使用范围和字典';s贝尔曼福特实施公司

在Python中使用范围和字典';s贝尔曼福特实施公司,python,graph,Python,Graph,Bellman-Ford算法如下所示 initialize-single-source(G,s) for i = 1 to |G.V| - 1 for each edge (u,v) in G.E call Relax(u,v,w) and so on 此伪代码索引以1开始,而不是以零开始 这就是我所谓的边缘。我对边和顶点使用字典 for i in range((len(self.V.keys()))-1): for vertex in self.V

Bellman-Ford算法如下所示

initialize-single-source(G,s)
for i = 1 to |G.V| - 1
   for each edge (u,v) in G.E
      call Relax(u,v,w)

and so on
此伪代码索引以1开始,而不是以零开始

这就是我所谓的边缘。我对边和顶点使用字典

    for i in range((len(self.V.keys()))-1):
        for vertex in self.V.keys():
            for edge in self.V[vertex]:
问题1:我们应该从零指数开始,对吗

问题2:我们是否应该从G.V.的长度中减去1

谢谢。

你已经试过了吗?有时答案可以在那里找到

问题1:我们应该从零指数开始,对吗

不一定;您还可以迭代
xrange(1,len(self.V))
。然而,从零开始是惯用的

问题2:我们是否应该从G.V.的长度中减去1

如果你从零开始计数,是的。
-1
是算法规范的一部分

额外建议:将代码段重写为

for i in xrange(len(self.V) - 1):
    for vertex in self.V.iterkeys():
        for edge in self.V[vertex]:

为了防止生成键列表(两次)。

建议:使用
self.V.items()
迭代字典(如果访问循环中的值,性能会更好),感谢gecco。是 啊我可能跳过了返回量最高的网站。谢谢。我刚刚注意到网站使用了不同的API。它使用“for i in range(len(graph)-1)”,然后查看每个顶点和每条边。这是否会影响我如何使用关于我的问题的范围谢谢。Gecco,谢谢。我误读了一些东西。对不起,把你弄糊涂了。:)为什么以范围(1)而不是范围(0)开始有效?我更喜欢C++。根据doc,如果省略第一个参数,范围从0开始。我们可以省略范围(0),因为这对算法没有帮助?谢谢。@user963889:因为B-F算法实际上并不关心索引,只关心内部循环执行的次数。