自顶向下,逐步求精

来源:互联网 发布:网络用语粗鄙化原因 编辑:程序博客网 时间:2024/06/05 16:11

是什么

  • 定义
    所谓自顶向下就是将问题分解成一套子问题。这一过程一直持续到每一个子问题足够基础,不需要进一步分解为止。
    所谓逐步求精就是将每一个子问题细化解决,制定策略。当所有子问题都解决后,这个问题也便解决了。

  • 图像分析
    这里写图片描述
    从树状图来看:第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);

从以上分析中,我们已经介绍了 自顶向下,逐步求精思想的概念和应用,要想真正掌握,还需多加训练。