`

问题的解决

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

1.1 问题的解决
程序常常是针对某些要解决的问题和任务而编写的我们来看一个例子某个书店将每
本售出图书的书名和出版社输入到一个文件中这些信息以书售出的时间顺序输入每两
周店主将手工计算每本书的销售量以及每个出版社的销售量报表以出版社名称的字母顺
序排列以使下订单现在我们希望写一个程序来完成这项工作
解决大问题的一种方法是把它分解成许多小问题理想情况下这些小问题可以很容
易地被解决然后再把它们合在一起就可以解决大问题了如果新分割的小问题解决起
来还是太大就把它分割得再小一些重复整个过程直到能够解决每个小问题这个策略
就是分而治之divide and conquer 和逐步求精stepwise refinement 书店问题可以分解
成四个子问题或任务
1 读销售文件
2 根据书名和出版社计算销售量
3 以出版社名称对书名进行排序
4 输出结果
我们知道怎样解决第1 2 和4 个子问题因此它们不需要进一步分解但是第3 个子
问题解决起来还是有些大所以对这个子问题重复我们的做法继续分解
3a 按出版社排序
3b 对每个出版社的书按书名排序
3c 在每个出版社的组中比较相邻的书名如果两者匹配增加第一个的数量删除
第二个
3a 3b 和3c 所代表的问题现在都已经能够解决了由于我们能够解决这些子问题
因此也就能够有效地解决原始的大问题了而且我们也知道任务的原始顺序是不正确的
正确的动作序列应该是
l 读销售文件
2 对文件排序——先按出版社然后在出版社内部按书名排序
3 压缩重复的书名
4 将结果写入文件
这个动作序列就是算法algorithm 下一步我们把算法转换成一种特定的程序设计语
言——在这里是C++语言

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics