码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-04 23:07:19      阅读:393      评论:0      收藏:0      [点我收藏+]

标签:

技术分享题目:

     有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个节点,显示结果
}

技术分享

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

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

标签:

原文地址:http://blog.csdn.net/wangfengfan1/article/details/47281667

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!