【问题标题】:Dijkstra's Algorithm Concepts and Coding ProblemsDijkstra 的算法概念和编码问题
【发布时间】:2012-02-10 12:35:02
【问题描述】:

问题更新

我目前正致力于在 Python 中实现 Dijkstra 算法,我在这里查看了有关该算法的其他问题,但似乎没有一个符合我的要求。

目前我的程序读取两个文本文件,一个包含网络路由图 network.txt(基本上是路由成本)。

0,2,4,1,6,0,0
2,0,0,0,5,0,0
4,0,0,0,0,5,0
1,0,0,0,1,1,0
6,5,0,1,0,5,5
0,0,5,1,5,0,0
0,0,0,0,5,0,0

一个包含所需路线(route.txt)

B>F

网络路由表: (每条线都是一个节点及其链接,因此节点 A 链接到 B、C、D 和 E)

      A  B  C  D  E  F  G

A    [0, 2, 4, 1, 6, 0, 0]
B    [2, 0, 0, 0, 5, 0, 0]
C    [4, 0, 0, 0, 0, 5, 0]
D    [1, 0, 0, 0, 1, 1, 0]
E    [6, 5, 0, 1, 0, 5, 5]
F    [0, 0, 5, 1, 5, 0, 0]
G    [0, 0, 0, 0, 5, 0, 0]

网络上的节点: ([结构] PreviousNode, DistanceFromSource, Visited)

A    [-1, 1000000000, False]
B    [-1, 1000000000, False]
C    [-1, 1000000000, False]
D    [-1, 1000000000, False]
E    [-1, 1000000000, False]
F    [-1, 1000000000, False]
G    [-1, 1000000000, False]

我有点了解 Dijkstra 的算法,但是使用我拥有的两种数据结构,再加上必须用 Python 编写它,我不知道从哪里开始,因为我无法弄清楚该怎么做这不懂语言。

我有一些非常基本的“伪代码”来说明我接下来需要做什么

  • 3 - 检查当前节点的所有未访问邻居并计算 它们与起始节点的暂定距离,覆盖 如果新值较低,则现有距离

  • 4 - 将当前节点标记为已访问(不会再次检查)

  • 5 - 如果不在目的地且存在未访问节点,则转到距离初始节点最小 > 距离的未访问节点,使其成为当前节点,否则结束

  • 6 - 返回到 3

有没有人能帮助我将“伪代码”翻译成代码或更有意义的伪代码,因为我正在努力解决这个问题

【问题讨论】:

  • 我不懂python。尽管如此,如果我是你,我会尝试将你的特定问题的词汇与算法分开,即将你如何获取数据的细节与实际使用它分开。 Dijkstra 的算法实际上想知道边缘权重,而不是你如何获得这些权重。所以,写一个 Dijkstra 的伪代码,然后给它提供它想要的信息。 HTH
  • “使用图形等的复杂版本”——Dijkstra 的算法是一种基于图形的算法,因此了解这些对于掌握 Dijkstra 的算法非常重要。

标签: python algorithm dijkstra


【解决方案1】:

在对象之间使用原生 python“链接”,例如:

edges = {1: set([2,3,4]), 2: set([1,5]), ....}
costs = {(1, 2): 99.3, (1, 3): 127.77, ...}

没有必要为这么简单的问题创建自己的类。

观看此内容以获得灵感:

http://python.mirocommunity.org/video/1530/pycon-2010-mastering-team-play

【讨论】:

  • 更好的是,frozenset() 而不是第 2 行的元组。
猜你喜欢
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多