博客
关于我
oj2894(贝尔曼福特模板)
阅读量:792 次
发布时间:2023-02-22

本文共 846 字,大约阅读时间需要 2 分钟。

从数组大小的疏忽到性能的坟墓:我的一次开发经历

中午的咖啡还没凉,眼皮都快打架了,桌上摆着一杯冰咖啡,屏幕亮起的光芒让我感觉自己快要把眼睛磨出一个圆圈。这个项目可是今天要交的,不能再拖延了!

我一看代码,心一下子沉了下去。原本以为只需要处理2000000条边的无向图,我怎么就把数组的大小搞成2000000了?这不就意味着每条边都会占用一个数组位置,最后索引都到2000000了吗?这真是该死!

我赶紧翻了翻代码,发现自己在初始化数组的时候写的是int edge[2000000];。这下可好,4000000条边的话,肯定要用更大的数组来存。别人家的内存都比我大一倍,根本就不用说,我这就太手残了!

不过,问题就出在这里。原本以为自己能用SPFA算法来处理这么大的图,可现在连初始数组的大小都搞错了,真要是跑了SPFA,估计会直接把主机带黑,整个项目都完了。

我急得快要抓狂了,赶紧重新计算了一下,发现自己本来是需要4000000个边的。可现在初始化的时候,数组只有2000000,根本不够用。修正这个问题,得重新初始化一次边数组,直接用int edge[4000000];,这样才有足够的空间存储所有的边信息。

看着电脑屏幕上闪烁的代码,我的心还是没平静下来。SPFA算法本来就是Bellman-Ford算法的一个优化版,理论上说能更快地处理长图。但是,为什么运行的时候用了7100多毫秒,反而让我感觉好痛苦呢?

我开始检查代码,发现自己在实现过程中有些地方还是不够优化。比如,在处理每条边的时候,虽然用了局部优化,但还是不够快。特别是对于这么大的图,普通的实现可能根本不够用。

最后,我只能硬着头皮把代码重写了一遍,尽量优化了每一步的循环,减少了不必要的操作。结果,虽然性能还是不会满意,但至少比之前好了一点儿。

这次经历让我明白了一个道理:开发的时候,细节决定成败。你可能不会注意到某个小小的数组大小问题,结果等到最后才发现自己把自己搞得措手不及。以后得更加仔细,不能再这样粗心大意了!

转载地址:http://ptsfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现随机正态分布快速排序算法(附完整源码)
查看>>
Objective-C实现随机生成一个 RxC 列联表(附完整源码)
查看>>
Objective-C实现隐藏任务栏(附完整源码)
查看>>
Objective-C实现隔离数字的小数部分, 取这个数字并从底数中减去它,返回结果算法(附完整源码)
查看>>
Objective-C实现雅可比迭代法算法(附完整源码)
查看>>
Objective-C实现雪花算法(附完整源码)
查看>>
Objective-C实现雪花飘落效果(附完整源码)
查看>>
Objective-C实现霍夫曼树(附完整源码)
查看>>
Objective-C实现霍纳法则(附完整源码)
查看>>
Objective-C实现非丰富数之和算法(附完整源码)
查看>>
Objective-C实现非并行奇偶转置排序算法(附完整源码)
查看>>
Objective-C实现香农编码(附完整源码)
查看>>
Objective-C实现马氏距离算法(附完整源码)
查看>>
Objective-C实现骑士旅游算法(附完整源码)
查看>>
Objective-C实现骑士旅游算法(附完整源码)
查看>>
Objective-C实现高斯-赛德尔迭代算法(附完整算法)
查看>>
Objective-C实现高斯消元法(附完整源码)
查看>>
Objective-C实现高斯消元法(附完整源码)
查看>>
Objective-C实现高斯消元算法(附完整源码)
查看>>
Objective-C实现高斯消去法(附完整源码)
查看>>