【发布时间】:2015-01-23 01:57:32
【问题描述】:
是否有一张表格说明在 PHP 中执行给定函数需要多少“工作”?我不是 Compsci 专业的,所以我可能没有正式的背景来知道“哦,是的,字符串比整数需要更长的时间”或类似的东西。程序中的所有步骤/行是否相同?我什至不知道从哪里开始研究这个。
我目前正在做一些 Project Euler 问题,我非常确定我的答案会奏效,但是我的请求会在一分钟内让我的本地 Apache 服务器超时(PE 说所有问题都可以解决question 206 代码:
<?php
$start = time();
for ($i=1010374999; $i < 1421374999; $i++) {
$a = number_format(pow($i,2),0,".","");
$c = preg_split('//', $a, -1, PREG_SPLIT_NO_EMPTY);
if ($c[0]==1) {
if ($c[2]==2) {
if ($c[4]==3) {
if ($c[6]==4) {
if ($c[8]==5) {
if ($c[10]==6) {
if ($c[12]==7) {
if ($c[14]==8) {
if ($c[16]==9) {
if ($c[18]==0) {
echo $i;
}
}
}
}
}
}
}
}
}
}
}
$end = time();
$elapsed = ($end-$start);
echo "<br />The time to calculate was $elapsed seconds";
?>
如果这是关于优化的 wiki 问题,请告诉我,我会移动它。同样,不是在寻找答案,只是帮助了解在哪里学习如何高效地编码(尽管粗略的提示不会被完全拒绝,而且我意识到可能有更优雅的数学方法来解决问题)
【问题讨论】:
-
您最大的效率问题可能是您正在尝试蛮力解决方案。对于这类问题,没有多少代码可以使蛮力解决方案发挥作用。没有多少循环可以在一分钟内完成 4.11 亿次。与其试图挤进每秒更多的迭代,不如试着将你做的迭代次数减少几个数量级。
-
对于这个问题,你应该看看平方数是如何工作的。例如mathworld.wolfram.com/SquareNumber.html。然后您会注意到平方根的最后两位数字只能是 30 或 70,这已经将您的搜索空间从 4.11 亿个数字减少到 8.220.000
标签: php performance optimization