对于自顶向下,逐步求精的理解

来源:互联网 发布:银河历险记3mac破解版 编辑:程序博客网 时间:2024/05/17 05:11

自顶向下,逐步求精是计算机领域的一个重要思想,可以教会我们模块化分治的函数编程方法。
自顶向下最初是把问题分解成一套子问题,然后再把子问题分解成子问题。这一过程将持续到每一个子问题足够基础,可以不用再被分解。有一种树形结构表示问题和子问题的关系,在树形结构中,每一层模块都可以调用下层模块的服务,这些模块是算法的基本构件。把问题分解为子问题的目的是要独立的解决每个模块。在计算领域中一个模块可能用于对数据求和,一个模块用于输出所求的和,每一个都有各自的功能,然后相互组合来解决上一模块的问题。
这里写图片描述
一般,我们会花些时间从全局来考虑一下问题,然后记下主要步骤,在分析步骤里的细节问题,如果我们不知道怎么完成某个任务,可以先跳过他,完成另一个,之后有灵感后再来完成它,这就是分治策略,把问题分解成子问题,独自解决各个模块。这正是设计算法时要使用的过程。写下主要步骤,它们将成为主要模块。然后开始着手开发,如果不知道如何解决,那么不妨分解它为几个子问题,再继续开发。
这里写图片描述
这个过程在多个层次中重复,把每个任务扩展成最小的细节。需要扩展的步骤是抽象步骤,不需要扩展的步骤是具体步骤。如果一个任务困难重重,可以把他的细节分解到较低的层次中,整个问题将被分解为能够解决的单元。自顶向下将复杂的大问题分解为相对简单的小问题,找出每个问题的关键、重点所在,然后用精确的思维定性、定量地去描述问题。其核心本质是”分解”。
编写自顶向下的设计方案与编写论文的大纲相似。尽管计算还是一个新领域,但这种解决问题的方法还是现实生活中常用的。
以洗衣机为例,写一个伪代码表示它的过程
READ 用户洗衣模式
READ 注水量
SET water to 0
FUNCTION wateropen(注水量)
{
WHILE (water < 注水量)
{
注水
Water 计水
}
}
FUNCTION dip(用户洗衣模式)
{
IF(用户洗衣模式==浸泡){
SET timer to 0
WHILE (timer < 浸泡时间)
{
停止运行
Timer 计时
}
}

}
开始洗衣
FUNCTION begin(洗衣时间)
{
SET timer to 0
WHILE(timer < 洗衣时间)
{
滚筒左三次右三次
Timer 计时
}
}
FUNCTION waterout(水量)
{
WHILE(water > 0)
{
排水
Water 计水
}
}
FUNCTION dry(脱水时间)
{
SET timer to 0
WHILE(timer<脱水时间)
{
脱水
Timer 计时
}
}
这里写图片描述
一个链接看自顶向下:https://www.bilibili.com/video/av12475150/?from=search&seid=12550729854363901053

原创粉丝点击