是什么
定义
所谓自顶向下
就是将问题分解成一套子问题。这一过程一直持续到每一个子问题足够基础,不需要进一步分解为止。
所谓逐步求精
就是将每一个子问题细化解决,制定策略。当所有子问题都解决后,这个问题也便解决了。图像分析
从树状图来看:第0层即要解决的问题,第1层,将问题分为了3个子问题,第二层和第三层继续将问题细分,直到不能继续细分位置。从中可以看出:自顶向下,也就是从抽象到具体的过程。- 作用
自顶向下,逐步求精
的思想到底有什么作用呢?其实,在我们的日常生活中,已经不知不觉用到了这种方法。比如:我们要邀请好友来聚会,我们可以这样子分析:
这便是该思想的实际应用,我们将举办聚会这个抽象的问题分层了好几个问题,这便实现了具体化,决解聚会问题,只需把这些子问题解决便可以了。
实例
在此,我们用自顶向下,逐步求精的方法来分析洗衣机洗衣服的过程,假设洗衣机有以下功能:
water_in_switch(open_close) // open 打开上水开关, close关闭
water_out_switch(open_close) // open 打开排水开关, close关闭
get_water_volume() //返回洗衣机内部水的高度
motor_run(direction) // 电机转动。 left左转, right右转, stop停
time_counter() // 返回当前时间计数,以秒为单位
halt(returncode) //停机, success 成功 failure 失败
- 分析
- 伪代码
//设置模式,水位
read mode,waterlevel
//注水
water_in_switch(open)
while (get_water_volume()<waterlevel)
;
water_in_switch(close);
//浸泡
start_time=time_counter();
while (time_counter()-start_time <= time_setting_soak[mode])
;
//洗衣
start_time=time_counter();
while (time_counter()-start_time <= time_setting_wash[mode])
motor_run(left);
motor_run(stop);
motor_run(left);
motor_run(stop);
motor_run(left);
motor_run(stop);
motor_run(right);
motor_run(stop);
motor_run(right);
motor_run(stop);
motor_run(right);
motor_run(stop);
//排水,脱水
water_out_switch(open);
start_time=time_counter();
motor_run(right);
while (time_counter()-start_time <= time_setting_drain[mode])
;
motor_run(stop);
water_out_switch(close);
//结束
halt(success);
从以上分析中,我们已经介绍了 自顶向下,逐步求精思想的概念和应用,要想真正掌握,还需多加训练。