词频统计 求最大k个数

这是一个程序设计问题,旨在创建一个高效算法来显示文件中出现最频繁的10个单词。通过使用平衡二叉搜索树存储单词,并结合最小堆来保持词频最高的10个单词,实现了在复杂度上的优化。这种方法避免了频繁更新哈希表,确保每个不同单词只遍历一次。
摘要由CSDN通过智能技术生成

题外话:想当年,编译原理课偷懒没自己实现这玩意,难过欠的终究还是要还的,现在补回来了。。。

Write a program for displaying the ten most frequent words in a file

such that your program should be efficient in all complexity measures.

/*(针对大量数据的作法)
思路:每读一个单词 ,存入字典序的平衡二叉搜索树中,这样判断是否新单词或旧单词词频加一
的扫描时间复杂度大大减小;读取完整个文本,建好树后,遍历一遍树,用最小堆存取
词频最大的10个单词,堆顶为词频最小的单词,所以每次只要与堆顶比较,需要替换则重排,
遍历完即出结果
*/
/*
本来打算建一张10个数据结构大小的哈希表,存储10个出现频数最大的单词词频,逐个读短文单词
边插入树结点时边更新表,
之后想若同一单词出现的频数很多,这样同一个单词得更新表很多次,不划算,
不如建好等平衡树后
遍历一遍,找出count最大的十个单词,这样每个不同的单词只遍历一次。
*/
/*
以下程序strcpy虽然能正确执行,但实际上有问题,可以换为如下,我就不换了,就重写个strcpy函数就好
strncpy(path, src, sizeof(path) - 1);
path[sizeof(path) - 1] = '/0';
len = strlen(path);
*/

#include<stdio.h>
#include<string>
#include<string.h>
#include<vector>
#include<stdlib.h>
using namespace std;

#define wordLength 20
#define maxCountNum 10

struct AVLTree
{
	char word[wordLength];//单词
	int count;//计数
	int height;//树的深度
	struct AVLTree* lTree;//左子树
	struct AVLTree* rTree;//右子树
};

/*存储出现频率最大的十个结点*/
struct MAXCount
{
	//string word;
	char word[wordLength];//单词
	int count;//计数
};
vector <struct MAXCount> maxCount(maxCountNum);


/*返回大值*/
int Max(int a,int b);
/*返回结点的深度*/
int Height(struct AVLTree* node);
/*插入子结点*/
st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值