哪种方法更快?
Posted
技术标签:
【中文标题】哪种方法更快?【英文标题】:Which method is faster? 【发布时间】:2012-03-07 03:59:37 【问题描述】:我有一个用作简单数据库的文本文件,每个条目跨越两行,如下所示:
name
number
bob
39
jack
22
jill
85
现在假设我将每一行分隔在一个数组中,我想分析每个 NAME 并查看它是否等于一个变量。这样做会更快吗:
if($variable == $line)
//true
还是先过滤掉偶数行(名称),然后分析它们是否等于变量?如果你不知道,下面的第一行基本上是找到计数的余数(这都是在一个 foreach 循环中)除以 2,如果等于 0 则为偶数。
if ($count%2 == 0)
if($variable == $line)
//true
谢谢。
【问题讨论】:
为什么要经历得到偶数的麻烦?这样做的目的是什么?直接找到他们! 【参考方案1】:根据“某些”情况,我肯定会选择第一种风格。例如,您认为您的平等操作需要多长时间?在我看到比较整数或双精度的情况下,第一种风格对我个人来说似乎要好得多。
在我的书中,模运算符是一项昂贵的操作。如果您有一个庞大的数据库,则进行模运算将花费大量时间。您可以尝试使用其他方法使其更快Reference 类似这样的方法。
我希望你对上面的代码做一个时间研究,看看你自己的时间差异。当我对大约 500 万个数据集使用模运算时,我遇到了一些与时间相关的主要问题。
根据其中一个答案进行编辑。
一定要使用已经提供的 +=2 运算,而不是模数以及第一种情况。
【讨论】:
【参考方案2】:第二个要快得多。对于这样的处理,假设计算时间可以忽略不计,而试验次数会更大地影响您的速度。在程序效率方面,几乎总是如此。尤其是与简单的检查相比,例如两个 if
语句对一个。
【讨论】:
【参考方案3】:将if
语句组合到第二个语句中以加快速度。
if($count%2==0 && $variable==$line)
【讨论】:
我认为解释器已经采取了这种优化(在低级代码中)。 我不确定是否。但如果没有,那么它会加快速度。【参考方案4】:我假设你有一个类似的数组
$lines = array('bob', '39', 'jack', '22', 'jill', '85');
然后只需跳过 for
循环中的奇数行:
for ($i=0, $len=count($lines); $i<$len; $i+=2)
if ($lines[$i] == $var)
// true
【讨论】:
以上是关于哪种方法更快?的主要内容,如果未能解决你的问题,请参考以下文章