牛顿冷却定律 使用

参考:

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;
//用不到索引,数据量大做缓存

 

 

 

 

posted @ 2013-07-03 15:58  liushan  阅读(1711)  评论(0编辑  收藏  举报