从一千万条短信中找出重复次数最多的前10条

题目:

     有1千万条短信,有重复,以文本文件的形式保存,一行一条。请用5分钟时间,找出重复出现最多的前10条。

struct TNode

{

BYTE* pText;

//直接指向文件映射的内存地址

DWORD dwCount;

//计算器,记录此节点的相同短信数

TNode* ChildNodes[256];

//子节点数据,由于一个字母的ASCII值不可能超过256,所以子节点也不可能超过256

TNode()

{

//初始化成员

}

~TNode()

{

//释放资源

}

};

//int nIndex 是字母下标

void CreateChildNode(TNode* pNode, const BYTE* pText, int nIndex)

{

if (pNode->ChildNodes[pText[nIndex]] == NULL)

{

//如果不存在此子节点,就创建.TNode构造函数//应该有初始化代码

//为了处理方便,这里也可以在创建的同时把此节点加到一个数组中

pNode->ChildNodes[pText[nIndex]] = new TNode;

}

if (pText[nIndex + 1] == ‘\0‘)

{

//此短信已完成,计数器加1,并保存此短信内容

pNode->ChildNodes[pText[nIndex]]->dwCount++;

pNode->ChildNodes[pText[nIndex]]->pText = pText;

}

else

{

//if(pText[nIndex]!=‘\0‘)如果还未结束,就创建下一级节点

CreateNode(pNode->ChildNodes[pText[nIndex]], pText, nIndex + 1);

}

}

//创建根节点,pTexts是短信数组,dwCount是短信数量//1千万

void CreateRootNode(const BYTE** pTexts, DWORD dwCount)

{

TNode RootNode;

for (DWORD dwIndex = 0; dwIndex < dwCount, dwIndex++)

{

CreateNode(&RootNode, pTexts[dwIndex], 0);

}

//所有结点按dwCount的值进行排序

//取前10个节点,显示结果

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 07:31:50

从一千万条短信中找出重复次数最多的前10条的相关文章

有1千万条有重复的短信,以文本文件的形式保存,一行一条,也有重复,用5分钟时间找出重复出现最多的前10条短信。

1,哈希表法 分成若干组,进行扫描.相同记录只加1次,重复次数加1,之后进行第二次扫描,得出重复次数的前十名. 2,从小到大排序(我觉得最好不用这种方法,准确性不高) 3,内存映射(建议) 对每条短信的第i个字母按ASCII码进行分组,也就是创建树.i是树的深度,也是短信的第i个字母.

海量日志数据__怎么在海量数据中找出重复次数最多的一个

问题一:         怎么在海量数据中找出重复次数最多的一个 算法思想:         方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数. 然后找出上一步求出的数据中重复次数最多的一个就是所求(如下). 问题二: 网站日志中记录了用户的IP,找出访问次数最多的IP. 算法思想:       IP地址最多有2^32=4G种取值可能,所以不能完全加载到内存中. 可以考虑分而治之的策略: map 按照IP地址的hash(IP)%1024值,将海量日志

找出重复次数最多的数字

问题 给定一个大小为n的数组,该数组包含数字的范围在 [0...k-1], k是一个正整数,k < = n.在这个数组找到重复次数最多的数字. 例如, 假设k= 10给定的数组是arr[] = {1, 2, 2, 2, 0, 2, 0, 2, 3, 8, 0, 9, 2, 3},最大的重复数量将是2. 期望的时间复杂度是O(n),空间复杂度为O(1),允许修改原数组. 分析 方法一:使用双重循环,逐个判断每个元素出现的次数,复杂度为O(n^2). 改进的做法是,使用哈希,用一个大小为k的数组co

hadoop中的hive查询cdn访问日志指定时间段内url访问次数最多的前10位(结合python语言)

hadoop环境描述: master节点:node1 slave节点:node2,node3,node4 远端服务器(python连接hive):node29 需求:通过hive查询到cdn日志中指定时间段内url访问次数最多的前10个url ps:用pig查询可以查询文章: http://shineforever.blog.51cto.com/1429204/1571124 说明:python操作远程操作需要使用Thrift接口: hive源码包下面自带Thrift插件: [[email pr

oracle 选取出现次数最多的前5条数据

SELECT * FROM ( SELECT PROJECT_LISTING.MATERIAL, COUNT (*) AS "出现次数" FROM PROJECT_LISTING WHERE PROJECT_LISTING.MATERIAL IS NOT NULL GROUP BY PROJECT_LISTING.MATERIAL ORDER BY COUNT (*) DESC ) WHERE ROWNUM <= 5 ORDER BY COUNT (*) DESC 是关键排序 C

给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

1 """ 2 #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 3 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 4 解题思路: 5 1.设定一个空字典,去存储列表中的值和值出现的次数 6 2.使用L.count()方法可以统计出L中值出现的次数 7 3.使用sorted方法可以进行排序,sorted(iterable,key,reverse) 8 注意key是函数 9 4.列表中的元祖取值 d[i][j] i是哪一个元祖,j是元祖

【学】从一个数组中找出重复最多的元素,并统计重复个数

通过json,将数组中的值都传给json中的键,利用json中的键是不能重复的性能,同时如果遇到重复的键,那就让这个键的值自增1,这样就能统计出重复次数 上面的方法可以得出一个json,但是还不够,因为无法比较json里的键或者值的大小,就要再将Json里的每组数据组成一个个小的json装到一个数组中,将统计的数量赋给每个json中的值,利用数组的sort的比较函数进行排序即可 function myMaxElement(arr){ var json = {}; for (var i=0; i<

python_exercise_给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

# 设定给出的非空数组为list_a,如下list_a = [8,1,3,5,1,2,45,8,5,7,7,8,8,8,8,8,8,5,5] # 将list_a去重,留下唯一值list_a_set = set(list_a) # 将list_a去重后的值作为字典的key放到字典中list_a_dict = {x:None for x in list_a_set} # 遍历将list_a去重后的唯一值,统计唯一值出现的次数.把次数作为字典的value放到字典中for l in list_a_set

剑指offer中找出出现次数超过一半的数字

#include<iostream> #include<cstring> using namespace std; bool check(int *numbers,int length,int number) { int times=0; for(int i=0;i<length;++i) { if(numbers[i]==number) times++; } bool ismorethanhalf=true; if(times*2<=length) { ismoret