细细品味PHP程序的算法
2008-06-08 22:24
323 查看
2008-06-08 18:23
在一般的应用中,PHP的程序员会比较少的注意到php程序的细微算法对性能影响的问题,但在处理一些比较占用资源的东西的时候,适当调整算法,会让程序的性能整倍的提高。 这几天,我在研究分词的算法,如果不预先载入词典的话,那种运算速度简直惨不忍睹,因此我考虑了预先载入词典在一个数组中的做法,我手上有一个十多万词汇的词典,开始的时候,用这样的方式载入: $fp = fopen(dirname(__FILE__)."/mydic.txt","r"); while($wd = fgets($fp,1024)){ $ws = split("`",trim($wd)); $m_dic[$ws[0]][$ws[1]] = $ws[2]; } fclose($fp); 这样一测试,发现分析时候慢吞吞的,后来通过检测执行时间才发现,原来载入词典居然用了 1.5 秒多,也难怪! 数据格式为: 0列:前两词的拼音,1列为:词,2列为:词的长度 如: al`奥林匹克运动会`14 al`阿拉伯的劳伦斯`14 as`埃塞俄比亚高原`14 wp`旺铺租售`8 wq`网球王子`8 wq`外企服务`8 我试一下不作任运作算,只读一遍数据文件: $fp = fopen(dirname(__FILE__)."/mydic.txt","r"); while($wd = fgets($fp,24)){ //$ws = split("`",trim($wd)); //$m_dic[$ws[0]][$ws[1]] = $ws[2]; } fclose($fp); 经测试只用了:0.18 秒,显然真正占用时间的代码是: $ws = split("`",trim($wd)); $m_dic[$ws[0]][$ws[1]] = $ws[2]; 这两行代码,我把它换成这个样子: $fp = fopen(dirname(__FILE__)."/mydic.txt","r"); while($wd = fgets($fp,24)){ $WordEnd = strpos($wd,"`",3); $m_dic[$wd[0].$wd[1]][substr($wd,3,$WordEnd-3)] = ($WordEnd-3)*2; } fclose($fp); 这样测试就只有 0.7 秒多,然后把词典中词的长度去除,变为: $fp = fopen(dirname(__FILE__)."/mydic.txt","r"); while($wd = fgets($fp,18)){ $WordEnd = strlen($wd)-2;// 2是"/r/n"的长度 $m_dic[$wd[0].$wd[1]][substr($wd,3,$WordEnd-3)] = ($WordEnd-3)*2; } fclose($fp); 又快了 0.07 秒左右,速度在 0.63 秒中徘徊,这和原来的 1.5 是多大的差别呀! |
相关文章推荐
- 细细品味PHP程序的算法
- php编写的抽奖程序中奖概率算法
- php编写的抽奖程序中奖概率算法
- PHP中奖概率的抽奖算法程序代码
- PHP抽奖算法程序代码分享
- 分享一个PHP抽奖算法程序代码
- PHP中奖概率的抽奖算法程序代码
- PHP中奖概率的抽奖算法程序代码
- php编写的抽奖程序中奖概率算法
- PHP抽奖算法程序代码分享
- php编写的抽奖程序中奖概率算法
- 跳一跳辅助程序核心算法分析(PHP版)
- php编写的抽奖程序中奖概率算法
- 冥想_ PHP抽奖程序概率算法
- 用PHP程序写一个算法:求一个网段的开始,结束IP地址
- PHP中奖概率的抽奖算法程序代码_PHP教程
- PHP用抛物线的模型实现微信红包生成算法的程序源码
- PHP抽奖程序之几率算法
- PHP抽奖程序概率算法
- PHP程序访问数据库