您的位置:首页 > 其它

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

2015-08-04 20:53 537 查看


题目:


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

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: