细细品味PHP程序的算法
http://prato.bokele.com/?ArticleID=15302
在一般的应用中,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是" "的长度
$m_dic[$wd[0].$wd[1]][substr($wd,3,$WordEnd-3)] = ($WordEnd-3)*2;
}
fclose($fp);
又快了 0.07 秒左右,速度在 0.63 秒中徘徊,这和原来的 1.5 是多大的差别呀!
相关文档:
初学PHP,对$_SERVER这个东西很感兴趣.在网上找了N长时间.是我智商有问题? 还是?
呵呵.干脆不如自己一个一个看...
我的IDE环境: Xmapp省着自己配置了...
//功能:打印$_SERVER->Array();
/*PHP Code Star*/
foreach ($_SERVER as $key => $value)
{
echo $key.":".$value."<br>";
}
/*PHP Code En ......
<?php
$txt = 'Hello world';
echo $txt;
?>
<br/>
字符串连接(.)
<br/>
echo 'Hello world'. "" . '1234' 输出:
<?php
$txt1 = 'Hello world';
$txt2 = '1234';
  ......
这一节课的内容比较少,主要讲了抽象类和抽象方法。
抽象类是指含有抽象方法的类,抽象类至少要包含一个抽象方法。用abstract关键字定义抽象方法和类。
抽象方法的特点是只有方法名,不包含方法体,即没有方法实现,具体体现在代码中就是抽象方法不包含大括号{}。
抽象类不能被实例化,只能被继承,继承的子类必须重载父 ......
升华提供终身免费ASP+access PHP+mysql虚拟主机
一:升华网络科技有限公司,与升华同在站长终身免费空间扶持计划.
1、尊敬的用户您好,也许您还在为每年一交的空间费用发愁,也许您想获得一个更优质的空间却不想投入太多,从现在起 这些问题将迎刃而解→升华网络←与升华同在站长扶持计划全面启动。
2、没有注册公司 ......
为了php连接sql2005 ,我在网络上找了一大堆资料在我的csdn博客中.晚上3:05分时候终于搞定了 php连接sql2005的问题,现在整合,同时把FAQ整合上. 我前面写的教程: 连接前配置系统: 1.检查文件 php5.2.5\ntwdblib.dll 默认下面有一个,不能连接再替换. 下载正确版本的 ntwdblib.dll (2000.80.194.0),地址: http://webzila ......