zoukankan      html  css  js  c++  java
  • 现代软件工程作业 – 计算最长英语单词链

    结对编程 – 计算最长英语单词链

    构建之法》练习题

    大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。

    例如, 文件里有:

     

    Apple

    Zoo

    Elephant

    Under

    Fox

    Dog

    Moon

    Leaf

    Tree

    Pseudopseudohypoparathyroidism

     

    最长的相连英语单词串为:  apple - elephant – tree,  输出到文件里面,是这样的:

                  Apple

                  Elephant

                  Tree

     

    要求程序 (WordList.exe)能处理命令行参数,知道什么是输入文件, 输出文件应该放在哪里。  这样,当助教拿到学生的源程序后,就能编译,并运行一系列的测试。

    Wordlist.exe  /i input1.txt   /o  output1.txt

    Wordlist.exe  /i input2.txt   /o  output2.txt

                  …

     

    既然是测试,就会有很多边角情况,例如,文件不存在,你的程序会崩溃么,还是能优雅地退出并给用户提示信息?如果文件没有任何单词、只有一个单词、没有可以首尾相连的单词,程序应该如何输出?

    程序的正确性验证完毕后, 就可以用一些命令行计时工具来测试程序的效率。 当然,同学们也可以参考《构建之法》的介绍,自己先测试并改进程序的效率, 最好是先写一个朴素的算法,看看用时如何,再分析效率,改进,分析...

    如果输入文件有一万个单词,你的程序能多快输出结果?课程助教会在同一个电脑上用一个大文件来测试所有同学的作业,请做好准备。

     

    补充题1: 请让你的程序处理不同数量的单词文件,纪录所花费的时间(建议时间单位:毫秒)。在二维坐标系上画出程序的效率 (x 轴:输入文件字符数, y 轴:程序时间)。

            字符数为: 10, 100, 500, 1000, 1500, 2000, 3000, 4000, 10000

    补充题2:这个问题的核心算法是什么?它等价于图论的什么问题,你的解法的效率是多少? 算法的效率和二维坐标上的曲线吻合么? 考虑到这个题目的各种特殊性,还可以继续优化么?

    补充题3:很多科班出身的同学在学校里学习的是 Java/C/C++/C# 之类的语言, 这个练习的需求就是处理一些字符串, 能否用一些处理文字比较方便的语言 (Perl, Python,  JavaScript) 来做同一个题目呢? 在处理大文件的时候,这两种语言的效率有差别么?

    补充题4:能否做一个网页版的程序,用户可以在输入窗口敲入各种单词, 输出窗口就能实时显示最长的单词链?

    补充题5:上面我们提到这个题目中 “最长” 的定义是单词数量最多, 如果我们改一下,最长 = 单词串中所含字母最多, 那么输入例子中的最长输出就是:

      Pseudopseudohypoparathyroidism

      Moon

    如果我们要求程序能处理这两种情况(用命令行参数  /c 表示字母最多, 用命令行参数 /w 或没有参数 表示单词数量最多), 你的程序如何做合理的模块化, 让程序能有较好的可重用化,可读性?

     

    补充题6:上面提到的效能工具是Windows 平台的, 学生能否在别的平台运行效能测试工具,并介绍其用法?

    补充题7:能否处理中文的词组,就像成语接龙那样,成语接龙有两种要求,a) 接龙的两个词首尾的字必须是同一个字; b) 首尾的字拼音和声调相同即可。 如何加上参数让程序能处理中文成语接龙的情况? 如果我们是让另外一些同学编写中文成员接龙的模块,那我们如何让这个模块被主程序调用?

     

     

    从上面的各个小题目锻炼过来,我们可以看出一个从实践出发的构建软件的步骤:

      1. make it work   先把最主要的情况处理对,程序能跑起来

      2. make it right   再把各种情况处理好

      3. make it fast    优化速度

      4. make it extensible    让程序可扩展,既然能处理这个问题,我们让它处理一些扩展问题如何?

      5. make it maintainable     让程序可读,可维护。

     

     这个次序也综合了各路专家对此的看法,次序不对,就会掉进过早优化和其他一些坑里面。 

     

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机+矩阵二分
    POJ1204 Word Puzzles AC自动机 多串匹配
    与失散已久的小学同桌QQ聊天
    ZC公司员工评分系统——后台查询合成DataTable
    软考(2)编译原理
    GCT考试复习
    为自己加油!!!
    ZC公司员工评分系统——前台排版算法
    员工评分系统现场发布小感
    软考(3)操作系统
  • 原文地址:https://www.cnblogs.com/xinz/p/7119695.html
Copyright © 2011-2022 走看看