您的位置:首页 > 其它

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

2017-11-26 16:29 741 查看
自顶向下,逐步求精是计算机领域的一个重要思想,可以教会我们模块化分治的函数编程方法。

自顶向下最初是把问题分解成一套子问题,然后再把子问题分解成子问题。这一过程将持续到每一个子问题足够基础,可以不用再被分解。有一种树形结构表示问题和子问题的关系,在树形结构中,每一层模块都可以调用下层模块的服务,这些模块是算法的基本构件。把问题分解为子问题的目的是要独立的解决每个模块。在计算领域中一个模块可能用于对数据求和,一个模块用于输出所求的和,每一个都有各自的功能,然后相互组合来解决上一模块的问题。



一般,我们会花些时间从全局来考虑一下问题,然后记下主要步骤,在分析步骤里的细节问题,如果我们不知道怎么完成某个任务,可以先跳过他,完成另一个,之后有灵感后再来完成它,这就是分治策略,把问题分解成子问题,独自解决各个模块。这正是设计算法时要使用的过程。写下主要步骤,它们将成为主要模块。然后开始着手开发,如果不知道如何解决,那么不妨分解它为几个子问题,再继续开发。



这个过程在多个层次中重复,把每个任务扩展成最小的细节。需要扩展的步骤是抽象步骤,不需要扩展的步骤是具体步骤。如果一个任务困难重重,可以把他的细节分解到较低的层次中,整个问题将被分解为能够解决的单元。自顶向下将复杂的大问题分解为相对简单的小问题,找出每个问题的关键、重点所在,然后用精确的思维定性、定量地去描述问题。其核心本质是”分解”。

编写自顶向下的设计方案与编写论文的大纲相似。尽管计算还是一个新领域,但这种解决问题的方法还是现实生活中常用的。

以洗衣机为例,写一个伪代码表示它的过程

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: