数据排序之TopK问题

本文探讨了在大规模数据处理中如何解决TopK问题,提出了使用分治、trie树、hash和小顶堆的解决方案。通过先进行数据集的hash划分,再利用数据结构统计词频和筛选,最后在所有局部TopK中确定全局TopK。同时,考虑了内存充足和多核处理的情况。文章还分析了基于Partition的方法和时间复杂度。
摘要由CSDN通过智能技术生成

前言】在大规模数据处理中,常遇到的一类问题是,在海量数据中找出出现频率最高的前K个数,或者从海量数据中找出最大的前K个数,这类问题通常称为“topK”问题

解决思路

针对topK类问题,通常比较好的方案是【分治+trie树/hash+小顶堆】,即先将数据集按照hash算法分解成多个小数据集,然后使用trie树或者hash表统计每个小数据集中的query词频,之后用小顶堆求出每个数据集中出频率最高的前K个数,最后在所有top K中求出最终的top K。

实际上,最优的解决方案应该是最符合实际设计需求的方案,在实际应用中,可能有足够大的内存,那么直接将数据扔到内存中一次性处理即可,也可能机器有多个核,这样可以采用多线程处理整个数据集。

解决】在得到数据后,如何对获得的数据进行topK排序呢。下面简单介绍几种常见方法。

【1】基于Partition(分区)解决TopK min的问题:根据数组的第K个数字来调整,使得比第K个数小的都在数组的左边,比第K个数据大的所有数字在数组的右边。

/**
	 * 最小的K个数,O(N)解法,需要修改原数组
	 * @param a
	 * @param n
	 * @param b
	 *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值