自顶向下,逐步求精——算法设计简介

自顶向下设计最初把问题分解成一套子问题,然后再把子问题分解成子问题。这一过程将一直持续到每个子问题足够基础,不再需要进一步分解为止。我们创造了一种分层结构来表示问题和子问题(称为模块)之间的关系,这种结构也称为树形结构。在树形结构中,每一层中的模块都可以调用下层模块的服务。这些模块是算法的基本构件,也正是上一节中所做的。
把问题分解成子问题,模块或者片段的目的,是要独立地解决每个模块。在计算领域中,一个模块可能用于读取数据,一个模块可能用于对数据求和,一个模块用于输出所求的和,而另一个模块则用于比较上一周得到的总值和当前所求的和。
这里写图片描述
一般,我们会花时间从全局考虑一下问题,然后简单记下主要步骤,再分析每个步骤填充细节。如果我们不知道如何完成某个任务,就先执行下一个任务,当得到更多信息后,再返回执行这个跳过的任务。我们所做的是什么呢?就是分治策略,把问题分解成子问题。
把每个任务扩展成最小的细节,需要扩展的步骤是抽象步骤,不需要扩展的步骤是具体步骤。如果一个任务困难重重,可以把它的细节推到较低的层次当中。这一过程也可以用到棘手的子任务上。整个问题最终被分解成能够解决的单元。
总的来说,自顶向下的方法可以分成四个主要步骤:
1.分析问题
2.编写主要模块
3.编写其余模块
4.根据需要进行重组和改写
可以通过一些实例来练习和体会这种逐步求精的思想。

以洗衣机的运作过程为例:
0)选择洗衣模式:对应水位,注水时间
1)注水, 水位计计水位
2)浸泡, 计时器计时
3)电机转动, 左3次,右3次
4)排水, 水位计计水位
5)电机转动(脱水)
6)结束

伪代码如下:
READ 用户选择模式
REPEAT
注水
UNTILL 水位=注水要求
REPEAT
浸泡
UNTILL 时间 = 时间要求
WHILE(电机启动时间>0)
REPEAT
电机左转3次
电机右转3次
时间-1单位
ENDWHILE
WHILE(水位!=0)
排水
ENDWHILE
FOR(脱水时间>0)
电机转动
ENDFOR
关闭电源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值