牛顿冷却定律 使用
参考:
http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_newton_s_law_of_cooling.html
实现原理:
变量意思:
$a : 指定时间之后的温度
$b : 指定时间之前的温度
$c : 两个温度变化之间用去的时间
$d : 该物品的冷却系数
1. 取得一个物品的冷却系数
$d=-log($a/$b)/$c;
2. 定好一个冷却系数之后,定期计算每个物品的当前温度
$a=$b*exp(-$d*$c);
//------------------------------------------dome---------------------------------------------
实际使用:
表: hot 表示热度 update_time 表示最后更新时间
------------------
hot | update_time
------------------
得到一个冷却系数:(根据自己的需要调整以下参数)
$start_hot=100;//开始温度 $end_hot=1;//结束温度 $run_time=24*7;//使用时间(按小时计算)一周 $d=-log($end_hot/$start_hot)/$run_time;//系数
1.更新温度值:
$table_time='';//对应表的update_time值 $table_hot=''; //对应表的hot值 $c_time=ceil((time()-$table_time)/60);//得到经过时间 $a=$table_hot*exp(-$d*$c_time);//得到现在温度 //修改表里的值 $table_time=time();//修改最后修改为当前时间 $table_hot=$a+1;//每次温度加的值自己定
2.按温度查询结果
$time=time(); //查询SQL:select * from table order by hot*EXP(-$d* ( ceil(($time-update_time)/60) )) desc; //用不到索引,数据量大做缓存