基于Swift的Dijkstra算法实现
这个实现的目的是首先让我能够上手Swift语言,同时我也想比较它与Objective-C实现的性能。
这是基本的Dijkstra算法,你可以像检查维基百科上的一样。我唯一做的改变是边可以有多个权重(例如在道路上,第一个可能是道路的状态(好、坏等),另一个则是实际的距离)。如果你对此有任何问题,可以与我联系。
我通过方法func createGraph(graph: Graph,root: Vertex, level: Int)
生成了一个二叉树。级别代表树的层数。结果是,算法将始终通过整个树,这是最坏的情况。
结果相当令人失望,因为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优化标志运行的
[Apache 许可协议 2.0](http://www.tldrlegal.com/license/apache-license-2.0-(apache-2.0))
如果您使用本工具,请发电子邮件给我:[email protected]
在Twitter上关注我:@juliengomes