全球主机交流论坛

标题: php比对数值大小 [打印本页]

作者: muyang    时间: 2018-1-4 20:42
标题: php比对数值大小


比如有一个 a.txt 文件,里面有1w行数值

读取出其中的最大值,和最小值

怎么写效率较高(因为同时请求比对的txt文件有很多,怕服务器处理的时间太长)

求大牛来段代码
作者: mirfjc    时间: 2018-1-4 20:42
就是优化求最大和最小值的算法?
https://stackoverflow.com/questions/13544476/how-to-find-max-and-min-in-array-using-minimum-comparisons
作者: rooney    时间: 2018-1-4 20:43
用php调用awk速度最快了。。。
作者: fkj    时间: 2018-1-4 20:50
如果a.txt是不会变的,拿个后台进程或者队列先取一遍min max缓存进memcached,到时候直接调用最快。
作者: muyang    时间: 2018-1-4 20:55
fkj 发表于 2018-1-4 20:50
如果a.txt是不会变的,拿个后台进程或者队列先取一遍min max缓存进memcached,到时候直接调用最快。 ...

a.txt是会变的,设定大概半小时左右往里写入新的数值

缓存不会用啊,还是菜鸟呢,php也只会写些简单的……

大牛给来段完整的代码呗
作者: Candy    时间: 2018-1-4 20:59
我记得那个叫什么来着,冒泡算法
作者: shc    时间: 2018-1-4 21:00
如果执行次数多,建议用C或者ASM写个CGI, 然后用PHP调用,这样速度最快。
作者: fkj    时间: 2018-1-4 21:08
muyang 发表于 2018-1-4 20:55
a.txt是会变的,设定大概半小时左右往里写入新的数值

缓存不会用啊,还是菜鸟呢,php也只会写些简单的… ...

半个小时足够缓存了,假设你这里有几百几千个a.txt要同时访问的话。用php写这个很慢的,而且本身是一定要读完整个文件,没啥算法给你加速,就是顺序搜索。
作者: xvbin    时间: 2018-1-4 21:09
如果我说插入数据库,你会不会骂我
作者: Candy    时间: 2018-1-4 21:12
xvbin 发表于 2018-1-4 21:09
如果我说插入数据库,你会不会骂我

那应该也比php算排序快吧
作者: muyang    时间: 2018-1-4 21:13
本帖最后由 muyang 于 2018-1-4 21:25 编辑
mirfjc 发表于 2018-1-4 20:54
就是优化求最大和最小值的算法?
https://stackoverflow.com/questions/13544476/how-to-find-max-and-min- ...


这里面有条回复好像可以解决问题,好像根本不用循环遍历什么的,直接用排序,然后取一头一尾,刚才我的表达是不是进入误区了……

我去试试文件多了会不会很慢

(试了下,文件多了还是很慢……那什么缓存之类的我也不会用……就选兄弟吧)

作者: panjr    时间: 2018-1-4 21:30
muyang 发表于 2018-1-4 21:13
这里面有条回复好像可以解决问题,好像根本不用循环遍历什么的,直接用排序,然后取一头一尾,刚才我的表 ...

你排序的过程本来就很慢啊 …
作者: muyang    时间: 2018-1-4 21:33
panjr 发表于 2018-1-4 21:30
你排序的过程本来就很慢啊 …

我之前想的一条条对比什么的更慢……汗
作者: mirfjc    时间: 2018-1-4 21:45
muyang 发表于 2018-1-4 21:13
这里面有条回复好像可以解决问题,好像根本不用循环遍历什么的,直接用排序,然后取一头一尾,刚才我的表 ...

只求最大最小没必要排序的
排序包括了比较和移动操作,比较次数肯定不会少,还多了移动操作
最佳回答的算法应该是求最大最小最快的算法了
==========个人思路===============
对于单个文件,你文件如果会更新的话,只需要‘’保存‘’当前文件的最大最小值,比如保存在文件的首行
当写入新数据时,只需要加上旧的最大最小值,再次调用该算法更新最大和最小值即可
作者: rooney    时间: 2018-1-4 22:35
看到楼主标记的正确答案,就知道楼主走错路了。
你这个瓶颈不在改善算法,而是在降低io上。
楼上是个好办法,直接保存算好的最大最小值。




欢迎光临 全球主机交流论坛 (https://443502.xyz/) Powered by Discuz! X3.4