数据结构课程设计实验报告

发布时间:   来源:文档文库   
字号:
<<数据结构>>课程设计

数据结构课程设计报告

一、设计题目:单词(词组)检索
现在有一个英文字典(每个单词都是由小写的'a'-'z'组成)单词量很大,达到100多万的单词,而且还有很多重复的单词。此外,我们现在还有一些Document,每个Document包含一些英语单词。针对这个问题,请你选择合适的数据结构,组织这些数据,使时间复杂度和空间复杂度尽可能低,并且解决下面的问题和分析自己算法的时间复杂度。1)基本型问题
1)选择合适的数据结构,将所有的英文单词生成一个字典Dictionary
2)给定一个单词,判断这个单词是否在字典Dictionary中。如果在单词库中,输出这个单词总共出现的次数。否则输出NO
2)扩展型问题
3给定一个单词,按字典序输出字典Dictionary中所有以这个单词为前缀的单词。例如,如果字典T={a,aa,aaa,b,ba},如果你输入a,那么输出应该为{a,aa,aaa}

-1-

<<数据结构>>课程设计
4)给定一个单词,输出在Dictionary中以这个单词为前缀的单词的出现频率最高的10个单词,对于具有相同出现次数的情况,按照最近(即最后)插入的单词优先级比较高的原则输出。5)输出Dictionary中出现次数最高的10个单词。
3)高级型问题
6)现在我们有一些Document,每个Document由一些单词组成,现在的问题就是给你一个word,检索出哪些Document包含这个word,输出这些DocumentDocumentID(就如同搜索引擎一样,即输入一些关键字,然后检索出和这些关键字相关的文档)7在第6问中,我们只考虑了一个word在哪些Document中的情况,我们进一步考虑2个相邻word的情况,检索出同时包含这两个相邻wordDocumentID
4)挑战型问题
8现在我们再对(7)的问题进行扩展,把(7)中的只检索相邻2word推广到可以检索多个word(即连续的kwordk>=2,检索出同时包含k个连续wordDocumentID
二、设计思路:
对于1问,题目要求选择适当的数据结构将一百二十多万个英
文单词生成一个字典。我采用经典字典树结构进行构造,每个节点包括频度,时间,和后继二十六个指针。其中频度为单词的频度,若该字母为单词的最后一个字母,则该字母的pin为该单词的频度,否则

-2-

<<数据结构>>课程设计
pin为零。时间为单词最后一次出现的次序,为(4)问服务。
对于(2)问,题目要求在字典里查询指定单词,若在字典中则输
出在字典中出现的次数,否则输出NO。读入字母,根据字典树进行查找。若在字典树中存在最后一个字母,且最后一个字母的频度不为零,则该单词存在,出现次数即为该字母频度。否则,该单词不存在。
对于(3)问,题目要求查找以指定单词为前缀的所有单词,并输
出所有单词,若不存在,什么也不输出。我使用数组存储前缀和以此前缀为前缀的单词。若在字典树中存在这样的前缀,则从此节点按照字典顺序遍历字典树,并输出所有以此为前缀的所有单词。若不存在这样的前缀,则什么也不输出。
对于4问,题目要求查找以指定单词为前缀的频度最高的十个
单词,并按频度高低顺序输出。若频度相同,则按照最近(即最后)插入的单词优先级比较高的原则输出。若不满十个则全部输出。我采NodeT[10]存储频度最高的前十个单词,排序使用插入排序,对频度相同的单词,比较它们的time,若time比较大,则插到前面。
对于(5)问,题目要求输出字典中频度最高的十个单词。我采用
NodeTop[10]存储频度最高的前十个单词,遍历字典树,按照插入排序进行排序。
对于(6)问,题目要求在若干Document中查找指定单词,若存
在该单词,则输出所在DocumentID,要求输出所有存在的ID若不存在什么也不输出。由于(678)问与前五问使用的文件不相同,我在编写程序时,就把前五问与后面几问分开了。我同样采用了字典树结构进行存储Document中的单词,不过字母节点变成频度、坐标和二十六个后继指针。其中坐标为单词所在DocumentID

-3-

本文来源:https://www.2haoxitong.net/k/doc/637fa34231b765ce050814ac.html

《数据结构课程设计实验报告.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式