本代碼主要是針對公司排名,文章或其他排名方法參考調整即可。
$days=log($d['days']+2)*2;//連續登錄天數,7天未登錄復位,這個需要另外寫程序來實現,這里只是調用 $view=log($d['view']+2);//主頁訪問總數 $pro=log(($d['hpro']+$d['lpro'])*($d['hpro']-$d['lpro'])/5+1)*2;//hpro為高質量產品數量 lpro為低質量產品數量,二者相加即為發布的產品總量 $case=log(($d['hcase']+$d['lcase'])*($d['hcase']-$d['lcase'])/5+1)*3;//案例,同上 $art=log(($d['hart']+$d['lart'])*($d['hart']-$d['lart'])/8+1)*2;//文章,同上 $fz=$days+$view+$pro+$case+$art; $now=time();//現在時間 $fm=$now-$d['regtime']+1+pow(($now-$d['ltime'])/2,1.5);//regtime公司注冊時間 ltime上次登錄時間 $sort=$fz/$fm;本代碼主要參考了Stack Overflow的算法。原算法如下圖所示:
具體參數解釋如下:
1. Qviews(問題的瀏覽次數)— log(Qviews)*4
某個問題的瀏覽次數越多,就代表越受關注,得分也就越高。這里使用了以 10為底的對數,用意是當訪問量越來越大,它對得分的影響將不斷變小。
2. Qscore(問題得分)和 Qanswers(回答的數量)— (Qanswers * Qscore)/5
Qscore(問題得分)= 贊成票-反對票。如果某個問題越受到好評,排名自然應該越靠前。Qanswers 表示回答的數量,代表有多少人參與這個問題。這個值越大,得分將成倍放大。這里需要注意的是,如果無人回答,Qanswers 就等于0,這時 Qscore 再高也沒用,意味著再好的問題,也必須有人回答,否則進不了熱點問題排行榜。
3. Ascores(回答得分)— sum(Ascores)
一般來說,”回答”比”問題”更有意義。這一項的得分越高,就代表回答的質量越高。但是簡單加總的設計還不夠全面。這里有兩個問題。首先,一個正確的回答勝過一百個無用的回答,但是,簡單加總會導致,1個得分為 100 的回答與 100 個得分為 1 的回答,總得分相同。其次,由于得分會出現負值,因此那些特別差的回答,會拉低正確回答的得分。
4. Qage(距離問題發表的時間)和 Qupdated(距離最后一個回答的時間)— ((Qage+1) – ((Qage – Qupdated)/2)) ^ 1.5
Qage 和 Qupdated 的單位都是小時。如果一個問題的存在時間越久,或者距離上一次回答的時間越久,Qage 和 Qupdated 的值就相應增大。也就是說,隨著時間流逝,這兩個值都會越變越大,導致分母增大,因此總得分會越來越小。
總結:Stack Overflow 熱點問題的排名,與參與度(Qviews 和 Qanswers)和質量(Qscore 和 Ascores)成正比,與時間(Qage 和 Qupdated)成反比。
網上的類似算法還有很多,只是有的我看不懂,就不做記錄了,下面再附一個比較簡單的算法(Hacker News):
© 致遠 2020-11-25,原創內容,轉載請注明出錯:一種網站內容綜合排序的算法(PHP)