- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法大作业寻找变位词讲述
深圳大学研究生课程论文
题目 大作业:变位词实验 成绩
专业 计算机与软件学院 软件工程
课程名称、代码 算法分析与复杂性理论 (161023050011)
年级 2015 姓名 文 成
学 号 2150230509 时间 2015 年 12 月
任课教师 杨烜 一、大作业要求与内容
大作业内容:
?在下列问题中挑选一个问题,选用适当的算法进行实现,在课堂上,针对该问题完成一个10分钟的论文演讲与演示,并提交演讲PPT。(30分)
在一个类似英语词典的大文件中找出变位词的所有集合,例如,tea和eat是变位词,同属一个集合,找出所有这种集合。
大作业要求:?(70分)
(1)要求演示算法解决问题的完整过程,如果我对解这个问题一无所知,看了你的解决过程,就要能理解算法是如何解决问题的;
(2)要求交互界面活泼生动,演示速度可控;
(3)尽可能提供丰富的功能让我理解你是如何解决这个问题的;
(4)提交源程序、大作业报告(介绍详细的算法设计说明和使用说明);
(5)以论文、报告等形式考核专用答题纸写大作业,大作业报告中要分析算法效率,并给出实测效率和理论效率图表;
(6)大作业用5号字体,总页数不得少于8页,否则视为无效。
二、大作业步骤
Introduction:
????
给定一本英语单词词典找出所有的变位词集。所谓的变位词是指,组成各个单词的字母完全相同,只是字母排列的顺序不同。tea和eat是变位词,同属一个集合,找出所有这种集合。
Motivating idea:
1.如何判断两个单词是否为变位词。
思路一:
如果两个单词是变位词,那么它们具有相同的长度,且每个英语字母的个数是一样的。我们只需要挨个对各个单词进行比较即可。这个思路容易想,但时间效率太低,还可以继续改进一下,且看下面的思路二。
思路二
将两个字符串按照字母表顺序排序,看排序后的字符串是否相等,如果相等则是兄弟字符串(变位词)。这种方法的时间效率根据你使用的排序算法不同而不同。我采取思路二我使用的是快速排序。但是依旧有个问题单词与单词一个一个比较的话效率还是太低了我们可以再做改进对于这个问题,最快想到的最直接的方法就是针对每一个单词跟字典中的其他单词进行比较。然而,假设一次比较至少花费1微秒的时间,则拥有二十万单词的字典将花费:200000单词 x 200000比较/单词 x 1微秒/比较 = 40000x10^6秒 = 40000秒 ≈ 11.1小时。比较的次数太多了,导致效率低下,我们需要找出效率更高的方法。思路二
标识字典中的每一个单词,使得在相同变位词类中的单词具有相同的的标识,然后集中具有相同标识的单词。将每个单词按照字母表排序,排序后得到的字符串作为该单词的标识。
the way to solve the problem:
在《编程珠玑》书中就有部分提到了变位词程序的设计思路我的解决步骤与?如果考虑单词中字母的所有可能排列,那算法会出奇的低效和复杂。实际上,每个变位词相当于一个等价类。算法的关键是要选择一个标识来标识这个等价类,使得在相同变位词类中的单词具有相同的标识。然后,将所有相同标识的单词集中在一起。我们可以使用基于排序的标识(可见要使用排序技术),将单词中的字母按照字母表排序。变位词程序按照三个步骤来执行,其中前一个步骤程序的输出作为下一个步骤程序的输入第一步:第二步:第三步:程序将这些单词为每个变位词类一行的形式Sign方法是对每个单词进行标识reorder方法是对标识后的单词重新排序arrange方法就是一个整合的过程,具有相同标识的单词就是互为变位词sign();
对每个输入的单词进行标识每个单词的标识就是依照字母进行排序后的串,在这里我使用的是快速排序
reorder();
对标识,按照字典序进行排序使得具有相同标识的单词都排在一起
arrange();
对之前的结果进行整合具有相同标识符的单词都挨着将同一个变位词类中的各个单词放到同一行中xample:
下面是简单的例子,仅有6个单词的字典的处理过程对这六个单词tea apple ate said dais eat
Algorithm:
这里只提供算法思路的代码,实际在实现源程序中还做了很多特殊情况的处理。
void sign()//程序标识
文档评论(0)