2011-03-13 77 views
0

此问题涉及优化。假设我需要我的代码中两个地方的数组A的数组长度。我应该在两个地方使用函数a.length(),还是将a.length()的值分配给局部变量并在两个地方使用它更快。阵列长度问题

“更快”我的意思是在运行时间方面。而且,我正在渐渐地说话。

+0

什么语言和什么数据类型? – quasiverse 2011-03-13 06:36:18

回答

2

调用函数两次的渐近复杂度是相同的 - 对同一个参数调用同一个(纯函数)的任何常量调用都具有与对该函数的单个调用相同的渐近复杂性,因为您可以仅滚动调入大O的隐藏常量的常数。

至于什么会更快,不能保证哪一个会更快。它取决于语言和编译器。我建议只写两种方式,并计算结果,看看是否有明显的差异。也就是说,如果你写的东西对性能至关重要,你不能拨打.length()两次,你可能需要重新考虑你的方法,看看是否有更好的全球解决方案。除非您有充分理由相信您的程序在未优化版本中显着较慢,否则微优化很难值得。

0

什么语言?在许多语言中,这些调用会被优化掉(在编译时或通过JIT编译器),直接访问数组对象的长度字段。

1

如果您必须提出这个问题,那么您还没有处在一个重要的地步。如果你是,你已经有了你的代码,你可以试试看。这种事情很大程度上取决于你的语言和编译器,唯一重要的结果就是你看到的结果。

不要担心微观优化,直到你发现你需要刮脸周期,即使如此算法是第一件事要检查。