题目:
有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个节点,显示结果
}
版权声明:本文为博主原创文章,未经博主允许不得转载。