单词(词组)检索
现在有一个英文字典(每个单词都是由小写的'a'-'z'组成) ,单词量很大,达到 100 多万的单词,而且还有很多重复的单词。
此外,我们现在还有一些 Document,每个 Document 包含一些英语单词。
针对这个问题,请你选择合适的数据结构,组织这些数据,使时间复杂度和空间复杂度
尽可能低,并且解决下面的问题和分析自己算法的时间复杂度。
1)基本型问题
(1)选择合适的数据结构,将所有的英文单词生成一个字典 Dictionary。
(2)给定一个单词,判断这个单词是否在字典 Dictionary中。如果在单词库中,输出这个单词总共出现的次数。否则输出 NO扩展:
2)扩展型问题
(3)给定一个单词,按字典序输出字典 Dictionary 中所有以这个单词为前缀的单词。例如,如果字典 T={a,aa, aaa, b, ba}, 如果你输入 a,那么输出应该为{a, aa, aaa}。
(4)给定一个单词,输出在Dictionary 中以这个单词为前缀的单词的出现频率最高的10个单词,对于具有相同出现次数的情况,按照最近(即最后)插入的单词优先级比较高的原则输出。
(5)输出 Dictionary 中出现次数最高的 10个单词。
程序所能达到的功能:
(1)建立字典树
(1)查找给定单词的出现频率
(3)输出以给定单词为前缀的所有单词
(4)及其中频率最高的十个单词
(5)全部单词里频率最高的十个单词
//注:在工程项目文件中放入待排序单词的tex文档
![](https://images0.cnblogs.com/i/425382/201403/152134015749723.png)
#include<stdio.h> #include<string.h> #include<malloc.h> #include<time.h> FILE *out;//设置全局变量,用于递归程序 static int pd=0;//递归搜索全部单词中频率最高的10个单词为单词后,pd 仁然保持为1 struct TrieNode { char c; char word[50]; struct TrieNode *next[26]; long count; }; typedef struct { char pl[50]; long mount; }PINLV; typedef PINLV pinlv[10]; pinlv b;//设置全局变量,用于递归程序 void chushihua(TrieNode *&p) { int i; (*p).c='#'; for(i=0;i<50;i++) p->word[i]='