`
阅读更多
      一、       问题:
1、一所大学,做一个学生信息管理系统,你觉得要怎么考虑?
2、中学生英文作文,你怎么判断有多少错误单词?
3、对于两段中文文字,如果让你判断它们的相似程度,你觉得应该怎么判断?

二、       回答:
1、一所大学,做一个学生信息管理系统,你觉得要怎么考虑?
答:对于一个学生信息管理系统,考虑的思路可以如下:
       第一步:确认该系统的用户。可以是管理员、老师、学生等相关人员。管理员拥有管理其他用户和系统数据的至高权限。老师拥有对自己权限范围内的系统数据进行管理的权限,比如本班学生的成绩的录入与修改等。学生拥有对系统数据的查询的权限。
       第二步:针对用户以及根据用户的权限级别制定需求分析。罗列出所有的功能需求,比如管理与查阅学生相关信息(入学/毕业年份、所在专业、个人成绩等)。
       第三步;根据需求确定数据结构。比如:学生可以用一个Student类,通过其数据成员和成员函数实现学生相关的记录、修改。然后选择一种容器来存放记录,并利用容器相关操作实现对象的处理。
       第四步:根据需求、用户权限以及所用数据结构确定相关操作的实现。
第五步:根据以上信息,确定用来实现的语言并进行实现。比如:C++、JAVA等。

2、中学生英文作文,你怎么判断有多少错误单词?
答:第一步:先建立一个保存有正确单词的字典库(如字典般有序保存,当然比一般字典多的是对每一个单词不同时态不同语态的单词也应保存)。
       第二步:可以利用string类的容器保存单词。
       第三步:从保存作文的文件头开始逐步依次读取单词。每读取一个单词,则从每个单词的第一个字母开始根据字母的顺序逐步地与字典库里的单词进行比较,如果能找到,则该单词正确。跳至判断下一个单词。如果找不到,则单词错误,计数,并跳至判断下一个单词。如此类推。直至到达文件结尾。返回错误单词的总数。

3、对于两段中文文字,如果让你判断它们的相似程度,你觉得应该怎么判断?
答:第一步:分析何为相似程度。两个字符串的相似程度可以定义如下:两个串中相同的子串出现的次序与频率都差不多时,则称两个字符串的相似程度高,否则相似程度低。如果两个字符串是两句话,还可以比较两句话表达的意思的相近程度。
       第二步:在了解“相似程度”的定义后,开始思考如何判断两个串的相似程度。其实涉及的操作包括两个串的遍历、取子串、模式匹配等。
利用分词技术将字符串分成若干个单词,每个独立的单词作为二元变量的一个属性。我们把所有单词设定为一个二元变量属性集合R,字符串1和字符串2的单词包含于这个集合R。设q是字符串1和字符串2中都存在的单词的总数,s是字符串1中存在,字符串2中不存在的单词总数,r是字符串2中存在,字符串1中不存在的单词总数,t是字符串1和字符串2中都不存在的单词总数。我们称 q,r,s,t为字符串比较中的4个状态分量。
因考虑到一个字符串中可能在不同位置出现相同的单词,则将在不同位置出现的相同单词假设为不同单词,以其在字符串中出现的次序作为区分。
在实际应用中,q,r,s三种状态分量并不一定是同等价值的,它们往往根据实际应用的需要存在不同的权重,比如对于某些应用来说,两个字符串中相同单词数量比不同单词数量更能说明字符串的相似程度,那么我们必须将q的权重提高。设对应q,r,s三个变量的权重分别是Kq, Kr, Ks。则相似程序的公式可以表示如下:
相似度=Kq*q/(Kq*q+Kr*r+Ks*s) (Kq > 0 , Kr>=0,Ka>=0)
如果还要考虑两个中文字符串的语意相似程序,则首先我们需要构建一个同义词对照表,将同义词对应到一个等价单词,在对字符串分词后对字符串中的所有单词到同义词表中查找,如果存在,则替换为对应的等价单词,这样分词后,两个字符串中的同义词就指向了相同的单词,然后在通过前述步骤进行判断相似程序。
       第三步:在第二步完成后,思考如何实现这些操作。按目前的操作可以利用以KMP算法基础的改进算法。
       第四步:选择一门语言,实现之。
参考网址:
a. http://blog.csdn.net/SmartTony/archive/2009/02/20/3915601.aspx
b. http://www.vipcn.com/chengxukaifa/CC/323938.html

三、分析与小结:
Programs = Data Structures + Algorithms. 这样的说法很精辟,越过表层直接说到了程序的实质。不仅如此,这样几个简单的单词却也让我们认识到如何思考问题,如何进行程序设计,更重要的是让我们明白我们应该学习什么!
此次的三个问题,第一个问题相对比较熟悉,大家都比较有想法,经过讨论后形成了比较传统的一个答案。只是看了老师的文章后,在描述上有了改动。在具体实现上的描述相对减少,甚至一句话概括。更多的是描述了我们的思路。第二、第三个问题相对陌生,对于这两个问题,我们团队认为有共同点,那就是都是对串的处理。只是处理的对象和结果不一样。尤其是第三题,因为之前基本没有接触过,所以在自己思考无果后在网上搜索了一些资料进行了学习与整理,形成这样的一个答案。
对于这三个问题,实现起来也许还要花很大的功夫,但是就目前我们通过学习讨论,也已经收获了不少,在思想上得到了启发,在观念上得到了改变,在理论上得到了指导……
我们将继续努力!





简评

非常感谢这个小组的及时回答,答案也基本上超出了我的预期。
对于这样一组问题的回答,我更期待大家思考问题的过程的展现,而不是已有知识的套路。我们简单举例来讲,比如第一个问题,学过数据库的同学,可能看到这个问题习惯上会想,我需要建立什么样的数据表、我需要什么样的用户操作、我需要用c#做一个什么样的界面、如何用sql server进行实现数据库 —— 但其实我不期待这样一个过程。这个小组的同学的分析过程是基本符合我的设想的,对于一个给定的问题,其思考过程应该是从问题的抽象入手,然后试图分解它的业务逻辑和数据描述,最后再考虑你所熟悉的技术和工具的层面上。这也就是说,为什么程序可以定义为算法+数据结构,可以和具体的平台与语言无关。
另外就是,对于我们学习程序设计的同学,多从问题出发,从世界最原始的那个点开始,有助于大家知其所以然。比如仍然是第一个应用层面的问题,当你确认了系统的用户,及每一个用户的操作逻辑定义后,你接下来会有两个问题,第一个,你如何规范化的描述你知道的内容——你可以用文字进行描述,可以使用word做一些简单的图;但如果你团队早就达成一致,你可以使用有规范定义的用例图进行描述;第二个,业务逻辑如何分解成程序的流程,这个过程中的数据使用什么样的结构进行描述——1万个同学的信息你是准备用一个Student的线性表来存储?对于每个学期都会产生的各科成绩你用超大表的方式存储进去?你如何实现你的检索过程与删除过程?等等,有了这些问题,你会考虑将数据进行抽象并分类,你会考虑不同的存储结构,你会为某些业务逻辑考虑优化增加索引,你也会考虑一个用户在修改信息而另外一个用户在查询时,你需要怎么做?你心中有了这些问题,并尝试去思考答案——这就是最好的学习。接下来是水到渠成的,或许你有自己的答案,或许你没有找到答案,但当你阅读了数据库原理方面的内容,你会恍然大悟。
缺乏这样一个过程,纯粹的当做一个教学过程去学习数据库设计、学习数据结构,我个人觉得对于计算机同学而言,不是一个高效的办法。已成熟的理论或技术都是从问题而来;同样的,在这个行业里面还有大量的问题没有有效的解决办法。同学们,不要低视自己。

第二个例子更像一个小规模的数据结构或算法题目。回答这个问题的重点,你们可以放到如何组织词典的关键点上来。你的词典结构,基本上可以确认你的查询效率。——这方面可以更具体一些,更花心思一些。
第三个例子,则完全是一个研究层面的问题了。这也就是上面所说的,“没有有效解决办法”的问题。这个小组的考虑问题的过程非常好,尤其是开始,我们先来定义“什么是相似程度”,换句话,有两层意思,其一是你觉得你要解决的问题是什么,其二,你觉得项目在结束时你怎么验证你是否解决了你的问题。需求和验收标准是相辅相成的。其实这个小组给出了两个答案:
(1)              两个字符串的相似程度可以定义如下:两个串中相同的子串出现的次序与频率都差不多时,则称两个字符串的相似程度高,否则相似程度低。
(2)              如果两个字符串是两句话,还可以比较两句话表达的意思的相近程度。
我不知道这个小组的成员在讨论时,有没有注意到,这两个答案的差异性是非常大的——尤其是第二点,有没有就这个方向上有过什么讨论。

这个问题毕竟比较困难一些,对于非专业方向做研究的同学而言,场景也陌生一些。没有关系。其实大家在讨论什么是相似程度的时候,我觉得应该是没有明确讨论项目的验收标准的——如果有讨论这个验收标准,我相信就这个第二点,后面会有些讨论的材料或相应的考虑。

我的问题是“中文文本的相似程度”,虽然没有明说,但我的导向是其内容的相关性。相信大家就这个是有体会的。但内容的相关性和文本字符串的相似性,这是一个很值得玩味的东西。大家参考的方案是一个非常简单的方案,而且,有一点点建议,描述一个问题的解决思路时,一定要清晰易懂。我不知道大家是否真的吸收了文章中给出的思路,但就这个描述而言,“每个独立的单词作为二元变量的一个属性”这句话大家能够明白吗?

就文本相关性而言,期待后面有简单的项目可以让大家接触一下。我会看课程的情况进行安排。
总的来看,感觉大家做这几个题目还是非常用心的。投入,就会有收获。期待大家学习这门课程的起始,就开始养成这样一个思考问题的习惯。仍然回到课堂上来,从纯技术的角度去考虑,程序设计就是这样的一个定义;这是解决问题的一种相对普适的思路。
分享到:
评论

相关推荐

    标准化考试小软件 要求每做完一个题目都把该题目的正确答案显示给用户

    标题“标准化考试小软件 要求每做完一个题目都把该题目的正确答案显示给用户”清晰地描述了这款软件的功能定位。它是一款用于模拟标准化考试的软件,特点在于用户每完成一道题目之后,软件会立即给出该题目的正确...

    越田面试一个题目.txt

    越田面试一个题目

    进程的创建。操作系统的一个题目

    进程的创建,这是操作系统的一个题目,希望大家在下载后能够好好好的利用这个资料,我自己认为不错的

    408答题小程序的后端,使用Python的Flask设计,毕业设计后端程序 - 是一个题目登陆的WebAPI接口.zip

    408答题小程序的后端,使用Python的Flask设计,毕业设计后端程序 - 是一个题目登陆的WebAPI接口

    20中选5个分配题目,重复率小于30%

    一种方法是使用优先队列(如最小堆)存储未分配的题目,每次分配时从队列顶部取出一个题目。如果分配后重复率超过30%,则将该题目回退到队列中,并重新选择。 - **重复率计算**:在每次分配题目时,需要实时计算...

    ACM自己做的一些题目

    2. **1**: 第一个题目往往作为入门级别的问题,可能涉及到基础的数组操作、字符串处理、简单的递归或循环等。 3. **8**: 这可能是第8个题目,可能涵盖一些中等难度的算法,例如二分查找、回溯法、贪心策略等。 4. ...

    南理工计算机研究生复试上机题目

    首先, lets 看看第一个题目:编写程序,计算下列分段函数 y=f(x) 的值。这个题目考察了对分段函数的理解和编程能力。分段函数是指在不同区间上具有不同的函数定义的函数。在这个题目中,我们需要编写一个程序来计算...

    POJ部分题目代码主要是POJ的部分题目的代码主要是POJ的部分题目的代码主要是POJ的部分题目的代码

    例如,一个题目可能要求实现快速排序算法,另一个可能需要解决旅行商问题,还有可能涉及到字符串模式匹配或者计算几何问题。 这些题目代码对于学习算法和提升编程技巧非常有帮助,它们展示了不同的解决问题的思路和...

    2018年美国数学建模题目 中英文对照

    在竞赛中,团队需要选择一个题目,然后在4天内建立数学模型,撰写论文并提交解决方案。 2018年的题目可能涵盖了各种领域,包括自然科学、社会科学、工程、经济、公共卫生等。每道题目通常涉及现实世界的问题,需要...

    计算机科学与技术毕业设计题目

    在计算机科学与技术毕业设计中,学生需要选择一个题目,并对其进行深入的研究和分析,最后提交一份完整的毕业设计报告。这些题目可以帮助学生培养自己的研究能力、分析能力和解决问题的能力,为学生未来的职业生涯...

    优秀通信专业毕业论文题目收集整理110个.docx

    这份资料中的每一个题目都经过精心挑选,不仅体现了通信领域当前的技术热点,而且触及了通信技术未来的发展趋势。 从题目“高挪动无线通信抗多普勒效应技术研究”可以看出,无线通信技术作为通信专业的重要分支,其...

    群面题目+详解.doc

    第一个题目是西天取经,要求从八个人中选择合适的人选,排序的标准是按照自己的意愿从强到弱。第二个题目是领导者成功因素排序,要求从多个因素中选择最重要和最不重要的因素,并进行讨论和解释。 通过这两个题目,...

    蓝桥杯复习题目集合

    每一个题目都配有详细解题思路和答案解析,这对于学习者来说无疑是一个巨大的帮助。它们不仅能够帮助学习者检验自己的编程能力,还能够通过这些解答深入理解算法背后的原理和实际应用。 C语言和Java语言作为竞赛中...

    2018国赛题目及附件数据.rar

    队伍需要在有限的时间内选择一个题目,构建模型,求解并撰写论文。 接下来是附件资料。这些资料可能包括了历年的优秀论文样本、参考文献、数据集、算法介绍等,它们对参赛者来说至关重要。优秀论文可以提供解决问题...

    数独游戏题目入门级.doc

    1. 第一个题目:76132535817173496378327955739219576832476647125 这个数独的初始布局展示了部分数字,玩家需要根据这些线索推断出其余数字的位置。 2. 第二个题目:1832571596474859314514363674679 这同样是一...

    sicily部分题目源代码

    3. **1027.cpp**:同1150.cpp,这是另一个题目,具体内容未知,可能需要代码阅读来理解。 4. **1147.cpp**:又一个题目,没有明确的主题,可能需要查看代码以了解算法。 5. **1136fourth.cpp**:题目编号1136,...

    flash选择题 题目10个

    在timu.txt中,每一行代表一个题目的选项和正确答案,开发者可以随时更新这个文本文件来添加或修改题目。同样,daan.txt用于存储对应题目的分数,便于计算总分。这种结构化的数据存储方式易于自动化处理,提高了工作...

    hduoj poj 的题目分类

    文件"poj题目分类.txt"和"hdu题目分类.txt"很可能是以文本格式记录了这两个平台上的题目类别和编号,每行可能包含一个题目的ID、所属分类以及简短的题目描述。这样的分类文件对于想要深入研究某一特定题型的程序员来...

    蓝桥杯2022年省赛A组题目解析

    A题目:裁纸刀:提供了一个题目的直觉解题思路,指出编程题目通常在想到解题点后实现会比较简单,并给出了一个具体题目的解题思路和答案。 B题:提供了一个博弈论问题的C++代码实现,包括状态的初始化和深度优先...

    C语言程序设计大赛题目.pdf

    最后一个题目是自动发牌问题,这是一个贴近实际应用场景的题目。在桥牌游戏中,需要将一副52张牌平均分配给四位玩家,每位玩家手中应有13张牌,并且这13张牌中应包含四种不同的花色。在C语言中,可以通过二维数组...

Global site tag (gtag.js) - Google Analytics