问题描述:有新闻文章N篇,里边可能有非常相似的文章需要去重,每篇文章有发表时间和评论数两个属性,需要找到有序的最新最热的十篇文章,如何做效果最好
注:1、通常来讲,评论数越高则该文质量越高、越热
2、去重算法相对耗时
3、这个操作很频繁
方法一:直接按照时间或者评论数逆序输出,去重后取前十个。
这个方案最简单,但是只能从单维度来反映顺序,最新和最热不能兼顾。
方法二:先去重,引入时间衰减算法并结合评论数计算得分(下称衰减,算法不是本文重点),按得分逆序输出前十个。
该方案能够基本兼顾时间和热度,输出顺序的效果明显要好很多;
在优化方面,如果N值比较大,那么去重算法会比较耗时导致运行太慢;
另外一个方面,最后得到的文章排序中时间错乱感非常强烈,尤其对于日期(某月某日),不太符合新闻本身的时效常识。
在优化方面,如果N值比较大,那么去重算法会比较耗时导致运行太慢;
另外一个方面,最后得到的文章排序中时间错乱感非常强烈,尤其对于日期(某月某日),不太符合新闻本身的时效常识。
方法三:先衰减再去重。
这个方案是在方案二的基础上改变了一下去重和衰减的顺序,旨在降低计算的复杂度;
先按照时间衰减得到了一个排序,取前M个(M>10,或者30或者50),然后对M个进行去重;
这个方法的缺点是M等于多少才能保证去重后仍然足够10个,如果要求必须足够10个的话那么就不太可行。
方法四:先去重,再衰减,取得分前十个,再按时间逆序输出。
该方案也是对方案二的一个改进,主要修正方案二中带来的强烈时间错乱感;
注意该方法最后按照时间排序时只取了衰减之后的前十名;
采用该方案后发现有这种现象:排在前几名的文章中可能都是同一日期的,可是评论数最多的却排在了后面。
方法五:先去重,再衰减,取得分前十个,最后按照日期逆序、对于日期相同的按照评论数逆序。
该方案是对方案四的一个修正,在方案四的基础上,最后排序时,先按日期进行排序,如果日期相同的则按照评论数排序,这样就保证了最后得到的十篇文章一定是按照日期逆序,而且又兼顾了热度。
没有完美的算法,只有合适的算法,方案五的缺点其实也很明显,去重的计算量比较大,这只能在去重算法上做一些优化来弥补。