• 算法实战-Hacker News内容热度推荐算法


            运营了一个模版下载网站,之前根据查看详情、下载、收藏等交互维护了模版的热度,但是发现并不是很“人性化”,因为点击的越多的模版永远霸榜了,一些其他的优质模版几乎很难再出现在首页,所以打算更换算法,可以更加人性化的展示真正的优质模版~

    算法选择

            基于Hacker News的内容热度推荐算法

    库表设计

    模版表原来维护的hot字段,现在增加hot_score维护热度分值

    增加一个维护一周内模版交互的记录表

    热度计算及维护 

     

    参数解释:

    Hinit : 初始热度值,这里我们直接用的原模版的hot热度

    Hinteract:互动热度值,我们取一周内交互的热度和

    Htime:时间衰减因子,这里取7*24。

    G:重力因子,它决定了热度随时间下降的速度,前期平台人员较少时,相对应得发的资源也会比较少,这时可以把G调小一点,减缓时间推移对热度下降的影响,后期平台人员增多时,相对应的资源也会增加,这时可以把G调大一点,加速时间推移对热度下降的影响。比如:1.2-1.8

    Hweight: 加减权重,初始值可以为0,在某些偶然或者极端情况下需要人为干预的时候,可以动态调整其值,使其能够及时的控制其热度。

    1. /**
    2. * @param hInit 初始热度值,可以以用户活跃度来衡量,比如以积分的形式
    3. * @param hInteract 互动热度值,根据用户行为数据来衡量
    4. * @param hTime 时间衰减因子,也就是从提交到现在的时间(以小时计),加2是为了防止最新发表的会导致分母过小 ,这个值可调,在前期平台人数较少时调整大一些,在后期人数增长起来后,可以调整的小一些,比如,因为用户对平台资源有一个消化时间。
    5. * @param g 重力因子,它决定了热度随时间下降的速度,前期平台人员较少时,相对应得发的资源也会比较少,这时可以把G调小一点,减缓时间推移对热度下降的影响,后期平台人员增多时,相对应的资源也会增加,这时可以把G调大一点,加速时间推移对热度下降的影响。比如:1.2-1.8
    6. * @param hWeigh 加减权重,初始值可以为0,在某些偶然或者极端情况下需要人为干预的时候,可以动态调整其值,使其能够及时的控制其热度。
    7. * @Author l'amour solitaire
    8. * @Description Hacker News的内容热度推荐算法
    9. * @Date 2022/6/28 下午10:48
    10. **/
    11. public static Double resourceHot(Integer hInit, Integer hInteract, Integer hTime, Double g, Integer hWeigh) {
    12. return (hInit + hInteract) / Math.pow((hTime + 2), g) + hWeigh;
    13. }

    理想的方式是有交互的时候更新当前模版的热度,同时定时任务执行全局重新计算,但是这个项目我们不打算运用定时任务,所以最终我的的方式是有交互的时候更新当前模版的热度,同时加上热点的排序,如下

    lastSql.append(" ORDER BY hot_score DESC,hot DESC");

    也就是基于hot和hot_score进行排序,通过用户操作来更新实时数据,未更新的以hot来排序,同时删除7天前的热点数据,省略了定时任务

  • 相关阅读:
    ES6模块化(ES module)
    Java超全能笔记爆火,分布式/开源框架/微服务/性能调优全有,拿走不谢哦!
    VSCode自动分析代码的插件
    Python匿名函数
    fNIRS数据处理工具包Homer2的数据转换教程
    k8s概念之GVK与GVR
    软件测试行业35岁职场魔咒,你准备怎么应对?
    MFC Windows 程序设计[334]之自定义编辑框(附源码)
    2022年最新【Java八股文背诵版面试题】面试必备,查漏补缺;多线程+spring+JVM调优+分布式+redis+算法
    使用cmake,将github上的某一个库进行集成到vs2022上
  • 原文地址:https://blog.csdn.net/kuangni5808/article/details/125516900