Dijkstra 0.0.1

Dijkstra 0.0.1

测试已测试
Lang语言 SwiftSwift
许可证 Apache 2
发布上次发布2014年12月
SPM支持SPM

juliengomes维护。



Dijkstra 0.0.1

  • 作者
  • juliengomes

基于Swift的Dijkstra算法实现

目的

这个实现的目的是首先让我能够上手Swift语言,同时我也想比较它与Objective-C实现的性能。

算法介绍

这是基本的Dijkstra算法,你可以像检查维基百科上的一样。我唯一做的改变是边可以有多个权重(例如在道路上,第一个可能是道路的状态(好、坏等),另一个则是实际的距离)。如果你对此有任何问题,可以与我联系。

数据输入

我通过方法func createGraph(graph: Graph,root: Vertex, level: Int)生成了一个二叉树。级别代表树的层数。结果是,算法将始终通过整个树,这是最坏的情况。

与ObjC的比较

结果相当令人失望,因为Apple提到Swift将比ObjC快约2.8倍。你可以在这里找到一个与此完全相同的算法实现,以及对边权重的同样修改:这里

以下是结果

级别 Objective C 实现 Swift 实现
2 (8个节点) 0.1ms 3ms
5 (64个节点) 3ms 70ms
10 (2048个节点) 1950ms 55000ms
12 (8192个节点) 30000ms ...

测试是在模拟器上运行的,所以即使我运行多次,也可能不是非常精确,这不是一个科学严谨的证据,但鉴于结果差异很大,我们可以相当安全地说Swift实现执行时间更长。

作为一项新特性,我希望在未来的Xcode版本中他们能提升性能,但就目前而言,我有点失望...

注意:根据这条推文,测试是用-OFast优化标志运行的

路线图

  • 在代码中添加测试,例如如果所有边的距离维度不同,它将会崩溃
  • 添加单元测试

工具/版本

  • xCode 6
  • iPhone 模拟器 iPhone 4s/iOS 8
  • 咖啡

许可证

[Apache 许可协议 2.0](http://www.tldrlegal.com/license/apache-license-2.0-(apache-2.0))

如果您使用本工具,请发电子邮件给我:[email protected]

在Twitter上关注我:@juliengomes