性能优化之算法 [ 技术分享 ]
程序计算:1-10之间的累加总和
例如:1+2+3+4+5+6+7+8+9+10
很多人很快写出来了
$sum = 0;
$n = 100000000;
for($i = 1; $i<=$n; $i++){
$sum = $sum + $i;
}
echo $sum;
这样写是没问题的。 同时程序还兼容了1-100的累加,只需要把$n改成100,甚至是改成,1000,10000,.....100000000(一亿)
这是程序还是可以执行的,但是会很慢很慢,测试了一下需要16秒左右。16秒啊。。。就卡着那里不动了。。。
如果换一种写法:
$n = 1000000000000; //注意:同时我们把数值加大到1万亿,是上个程序的1万倍。
$sum = (1+$n) * $n / 2;
echo $sum.'</br>';
查看执行时间几乎是几十毫秒。
两种写法,其实应该叫两种算法。第一种我想是很多人常用的。 第二种有个专业名词叫:高斯算法。这么一说就有人听着耳熟了。 高斯算法:(首项+末项)*项数/2 这就是一个公式。
这些很多人都会了,只是想通过一个小小的例子就反思了,我们在写程序的时候是有考虑到性能,循环用着很爽,但你知道它在内存中是怎么开辟空间存在的么?是怎么占位的么?这些完全是影响着性能的主要因素。 有没有写了很多占用内存空间的代码?写了很耗空间的代码?
这是在看数据结构发现的数据存储相关,可以说类似的情况我们程序里肯定写了很多。
共 4 条回复
灰太狼
注册时间:2016-11-19
最后登录:2023-07-14
在线时长:76小时17分
最后登录:2023-07-14
在线时长:76小时17分
- 粉丝28
- 金钱3290
- 威望150
- 积分5550