求现成的java排序topN算法,该怎么解决
求现成的java排序topN算法
一个待排序list
以前是用Collections.sort全量排序再截取topN
太慢了 只想取topN 有没有什么现成的方法?
------解决思路----------------------
没见过线程的方法,要自己实现的话可以考虑一下这样实现:对list平均分为N组,每组内进行排序,然后把每组的最大的数字取出来建堆,每次把堆中最大的取出后再把该组内的下一个最大值放入堆中调整堆,重复以上操作选满topN个为止,这种方法相对比较麻烦。如果list中数字的范围不是很大,可以采用哈希方法用空间换时间,非常简单。
------解决思路----------------------
哪有楼上说的这么复杂。
TOPN的最经典解法不就是一个小根堆么。
一个待排序list
以前是用Collections.sort全量排序再截取topN
太慢了 只想取topN 有没有什么现成的方法?
------解决思路----------------------
没见过线程的方法,要自己实现的话可以考虑一下这样实现:对list平均分为N组,每组内进行排序,然后把每组的最大的数字取出来建堆,每次把堆中最大的取出后再把该组内的下一个最大值放入堆中调整堆,重复以上操作选满topN个为止,这种方法相对比较麻烦。如果list中数字的范围不是很大,可以采用哈希方法用空间换时间,非常简单。
------解决思路----------------------
哪有楼上说的这么复杂。
TOPN的最经典解法不就是一个小根堆么。