【发布时间】:2011-03-22 00:25:29
【问题描述】:
我正在编写一个应用程序,它使用 Dijkstra 算法在图中找到最小路径。图中节点和边的权重是float 数字,因此该算法对浮点数进行了许多算术运算。如果我将所有重量转换为ints,我能否提高运行时间? Java 中的 int 算术运算比浮点运算快吗?
我尝试编写一个简单的基准来检查这一点,但我对得到的结果并不满意。可能编译器已经优化了程序的某些部分,所以结果对我来说看起来不太好。
编辑:
我要解决的问题是信息检索字段。应用程序应显示作为一组关键字的查询的答案。
我的数据结构是加权有向图。给定一组叶节点,我必须找到连接这些节点的最小树并向用户显示答案。权重由部分基于 tf/idf 技术的加权函数分配。用户不知道我为节点和边分配了什么权重,他只想查看与他提出的查询相关的答案。所以不需要精确的结果,只是可以根据他们的权重列举答案。只是权重函数的原生使用(正如我提到的,它基于 tf/idf)给出了浮点权重,所以到目前为止我一直使用浮点数。
我希望这可以为这个问题增加一些背景。
【问题讨论】:
-
我知道乘以整数会快一点,大约 13%,但比较两个整数会慢 22%。
-
我不完全确定,但对于 Dijkstra 来说,只需加法和比较操作就足够了。对于这些操作,float 或 int 的变化不应太大。我真的很惊讶整数比较会慢 22%。我可以了解一下您进行了哪种基准测试?
-
我正在制作一个随机整数数组和一个随机浮点数组,然后测量对这些数字进行比较和乘法运算所需的时间。也许只是迭代数组需要很长时间,所以我想知道是否有一些关于这个主题的文献。
标签: java performance math primitive