用hash_map统计出现次数最多的前N个URL
2013-11-25 18:24
323 查看
海量数据统计频率最高词汇的常规办法之一是先通过一个hash函数处理数据然后取模N,拆分为N个小文件,对每一个小文件进行词频统计和排序处理,然后归并N个小文件取频率最大的M个数。
下面程序是利用hash_map处理小文件词频的实现(堆排序部分的代码没加上,可以参见http://blog.csdn.net/wodet/article/details/16948511)
关于hash_map和map的选择使用有几点注意的,hash_map是hash表的形式实现的,map是红黑树的结构,时间复杂度前者为N*(logN),后者为O(log2N)以内.从稳定性来说map占优,从平均性能来看hash_map占优,还有hash_map目前没有纳入C++标准库,但是各个版本的STL都提供了实现。具体情况具体选择咯。。
下面程序是利用hash_map处理小文件词频的实现(堆排序部分的代码没加上,可以参见http://blog.csdn.net/wodet/article/details/16948511)
关于hash_map和map的选择使用有几点注意的,hash_map是hash表的形式实现的,map是红黑树的结构,时间复杂度前者为N*(logN),后者为O(log2N)以内.从稳定性来说map占优,从平均性能来看hash_map占优,还有hash_map目前没有纳入C++标准库,但是各个版本的STL都提供了实现。具体情况具体选择咯。。
#include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <hash_map.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> using namespace std; class HashFunction { public: size_t operator()(const string& s) const { unsigned long __h=0; for(size_t i=0;i<s.size();i++) __h=5*__h+s[i]; return size_t(__h); } }; class Compare { public: bool operator()(const string& str1,const string& str2)const { return str1==str2; } }; typedef hash_map<string,int,HashFunction,Compare> HashMap; int main(int argc, char* argv[]) { printf("%s","-=-=-=-=-=-=-=-=-=-=hash_map测试-=-=-=-=-=-=-=-=-=-=-=-=\n"); HashMap obj; /* obj["10010"]="联通客服"; obj["10086"]="移动客服"; obj["1368351111"]="电话号码"; obj["123456"]="你的密码"; */ //构造关键字与次数的hash_map,即统计词频 int ai[]={22,41,22,46,13,13,22,44,44}; for(int i=0;i<9;i++) { char aa[12]={0}; sprintf(aa,"%d",ai[i]); obj[aa]++; cout<<aa<<" ,count="<<obj[aa]<<endl; } //将hash_map数据放入结构数组里 struct tmp { int count; char str[12]; }; struct tmp stmp[9]; memset(stmp,0x0,sizeof(tmp)*9); hash_map<string,int,HashFunction,Compare>::iterator itor=obj.begin(); int j=0; for(;itor!=obj.end();itor++,j++) { sprintf(stmp[j].str,"%s",itor->first.c_str()); stmp[j].count=itor->second; cout<<stmp[j].str<<" "<<stmp[j].count<<endl; } //可以根据堆排序stmp[]数组,取前N个最多出现的字段 //省略 return 0; }
相关文章推荐
- hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数
- 面试题----统计水果出现次数最多的前三名(map的运用)
- Map实现从0~100中随机生成50个数,统计出现的数字最大值和最小值,输出出现最多的次数及对应的数字
- 哈希分治法 - 统计海量数据中出现次数最多的前10个IP
- 统计文本文件中单词出现次数最多的单词
- ACM程序设计 书中题目O(map统计字符串出现的次数)
- linux统计出现次数top3的url
- 统计文件中出现次数最多的前10个单词
- 有一个文件ip.txt,每行一条ip记录,共若干行,下面哪个命令可以实现“统计出现次数最多的前3个ip及其次数”?
- 统计文件中出现次数最多的前10个单词
- sort +awk+uniq 统计文件中出现次数最多的前10个单词 (2012-12-05 15:57:12)转载▼ 标签: 转载 原文地址:sort +awk+uniq 统计文件中出现次数最多的前
- js判断字符串中出现次数最多的字符 并统计出现次数
- 统计连续出现次数最多的单词
- 判断一个字符串中出现次数最多的字符,并统计这个次数
- 去除数组中重复项,并统计重复出现次数最多的元素及重复次数
- 请编写相关函数来完成对一段英文字符串进行字母统计功能,出现最多那个字母的出现次数,不区分大小写。
- 统计一串字符串中出现次数最多和次多的单词(华为上机考试题)
- AOJ0028 Mode Value【出现次数最多+map+vector+水题】
- 转载:统计一串英文中出现次数最多的单词以及次数;
- 随机产生50个整数,位于[10,50],统计每个数字出现的次数以及出现次数最多的数字与出现次数并打印.如果出现次数为0不打印,打印时要求升序