TopK问题,即寻找最大的K个数,这个问题非常常见,比如从1千万搜索记录中找出最热门的10个关键词.
方法一:
先排序,然后截取前k个数.
时间复杂度:O(n*logn)+O(k)=O(n*logn)。
方法二:
最小堆.
维护容量为k的最小堆.根据最小堆性质,堆顶一定是最小的,如果小于堆顶,则直接pass,如果大于堆顶,则替换掉堆顶,并heapify整理堆,其中heapify...
分类:
编程语言 时间:
2014-11-21 18:42:10
阅读次数:
225
问题描述topK算法,简而言之,就是求n个数据里的前m大个数据,一般而言,mlistSize = count($list); 14 15 $i = 1; 16 17 foreach ($list as $li) { 18 19 $this...
分类:
编程语言 时间:
2014-10-24 18:38:00
阅读次数:
214
软件工程课程的一个题目:写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来。文本文件大约是30KB~300KB大小。 首先说一下这边的具体的实现都是在linux上实现的。没有大型IDE的性能检测。其实30KB还不是瞬间的事情,基于语言和一些简单的策略。所以在后面可...
分类:
其他好文 时间:
2014-10-20 00:37:36
阅读次数:
352
/************************************************************************//* 求一组数据中的top(K)问题,这是一个经典的top(K)问题。分析:方法一:如果数据量不大,那么最常用的方法就是排序从大大小,然后找出前k个数据...
分类:
其他好文 时间:
2014-09-02 21:21:05
阅读次数:
201
Hash表#ifndef _HASH_H#define _HASH_H#include#includeclass HashTable{public: HashTable(unsigned int size); ~HashTable(); int get(const char *ke...
分类:
其他好文 时间:
2014-08-31 17:05:41
阅读次数:
219
有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。思路: 把这1G的数据一次性全部读入内存是不可能了,可以每次读一行,然后将该词存到一个哈希表里去,哈希表的value是词出现的次数。 现在的问题是,这个哈希表有多大,能不能装载1M.....
分类:
其他好文 时间:
2014-08-29 18:12:18
阅读次数:
282
一:搭建JStorm环境(三个机器组成的集群)1. 搭建Zookeeper集群2. 安装java1.7和python 2.6,因为JStorm是由大量的java和python编写。3. 安装JStorm-0.9.3.1。4. JStorm需要tomcat来展现UI,所以需要安装tomcat。二:写完TopK_on_JStorm的第一个版本(项目地址),整个项目提供一个简单的topk计算流程,由并发度为1的ScoreProduceSpout提供随机数数据(id,score),并发度为4的ComputeBolt...
分类:
Web程序 时间:
2014-07-22 14:47:04
阅读次数:
279
1、对于排名,一般都是很热衷的,那么如何实现在数据量多的情况下,得到所需要的数据呢,选取前几名的实际应用中,也会有许多,形成统一的算法实现,比着参考就可以了。2、数据文件a.txt:24679643、输出数据为(例如取前三名,前面为数据,后面为名次,名次可通过输入参数配置):9 17 26 34、设...
分类:
其他好文 时间:
2014-06-25 10:58:41
阅读次数:
194
MapReduce TopK统计加排序中介绍的TopK在mapreduce的实现。
本案例省略的上面案例中的Sort步骤,改用TreeMap来实现获取前K个词
package TopK1;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configurat...
分类:
其他好文 时间:
2014-06-24 22:33:34
阅读次数:
293