在一般的應用中,php的程式設計師會比較少的注意到php程式的細微演算法對效能影響的問題,但在處理一些比較占用資源的東西的時候,適當調整演算法,會讓程式的效能整倍的提高。
這幾天,我在研究分詞的演算法,如果不預先載入詞典的話,那種運算速度簡直慘不忍睹,因此我考慮了預先載入詞典在乙個陣列中的做法,我手上有乙個十多萬詞彙的詞典,開始的時候,用這樣的方式載入:
$fp = fopen(dirname(__file__)."/mydic.txt","r");
while($wd = fgets($fp,1024))
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))
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))
fclose($fp);
這樣測試就只有 0.7 秒多,然後把詞典中詞的長度去除,變為:
$fp = fopen(dirname(__file__)."/mydic.txt","r");
while($wd = fgets($fp,18))
fclose($fp);
又快了 0.07 秒左右,速度在 0.63 秒中徘徊,這和原來的 1.5 是多大的差別呀!
細細品味PHP程式的演算法
2008 06 08 18 23 在一般的應用中,php的程式設計師會比較少的注意到php程式的細微演算法對效能影響的問題,但在處理一些比較占用資源的東西的時候,適當調整演算法,會讓程式的效能整倍的提高。這幾天,我在研究分詞的演算法,如果不預先載入詞典的話,那種運算速度簡直慘不忍睹,因此我考慮了預先...
細細品味C Socket程式設計專題
什麼是socket?所謂socket通常也稱作 套接字 應用程式通常通過 套接字 向網路發出請求或者應答網路請求。socket用於在兩個基於tcp ip協議的應用程式之間相互通訊。最早出現在unix系統中,是unix系統主要的資訊傳遞方式。在windows系統中,socket稱為winsock。兩個...
細細品味大資料 初識hadoop
初識hadoop 之前在學校的時候一直就想學習大資料方面的技術,包括hadoop和機器學習啊什麼的,但是歸根結底就是因為自己太懶了,導致沒有堅持多長時間,加上一直為offer做準備,所以當時重心放在c 上面了 雖然c 也沒怎麼學 計畫在大四下有空餘時間再來慢慢學習。現在實習了,需要這方面的知識,這對...