自顶向下设计

自顶向下设计最初把问题分解成一套子问题,然后再把子问题分解成子问题。这一过程将一直持续到每个子问题足够基础,不再需要进一步的分解的分解为止。我们创造了一种分层结构来表示问题和子问题(称为模块)之间的关系,这种结构也称为树形结构。


在树形结构中,每一层中的模块都可以调用下层模块的服务。这些模块是算法的基础构件。

把问题分解成子问题、模块或者片断的目的,是要独立地解决每个模块。在计算领域内,一个模块可能用于读取数据、一个模块可能用于对数据求和、一个模块用于比较上一周得到的总值和当前所求的和。

自顶向下设计的典型例子就是验证哥德巴赫猜想:


哥德巴赫猜想是数论中的一个著名难题, 是由法国数学爱好者克里斯蒂安·哥德巴赫于1742年在给著名数学家欧拉的一封信中提出的。

“哥德巴赫猜想”可以表述为:任何一个大于等于4的偶数均可以表示为两个素数之和。

尽管这个问题看来如此简明清晰, 但二百多年来, 虽有无数数学家为其呕心沥血、绞尽脑汁, 却始终无人能够证明或者证伪这个猜想 。

求解

·      第一步 提出问题:验证哥德巴赫猜想 

·      第二步 设一上限数M,验证从4到M的所有偶数是否能被分解为两个素数之和。
1. 定义一个变量X,初值为4。
2. 每次令其加2,并验证X能否 被分解为两个素数之和,直到 X不小于M为止。 

·      第三步 如何验证X是否能被分解为两个素数之和。 

1. 从P=2开始;
2. 判别X—P是否仍为素数:
3. 若是,打印该偶数的分解式。
4. 否则,换更大的素数,再继续执行2.。如此循环,直到用于检测的素数大X/2且X 与其之差仍不是素数,则打印“哥德巴赫猜想”不成立。

 

·      第四步 查找下一个素数。
(1)当前素数P加1
(2)判别P是否是素数;
(3)若是素数,返回P;
(4)否则,P加1,继续执行( 2)。

经过四步分解精化,将“验证哥德巴赫猜想”这个命题已经分解为计算机可以求解的数学模型了。

 

自顶向下设计的一个核心思想是分解,把大任务分解扩散成最小的细节。需要扩展的步骤是抽象步骤,不需要扩展的步骤是抽象步骤。

比如任务:策划一场舞会。

可以拆分成:写策划和执行策划。

写策划的部分继而拆分成:活动背景,活动意义和目的,活动流程,活动预算,人员安排等等。

运用于计算机编程中,即是把一个实际问题拆解成不同的循环或者函数来解决。

作为一个编程小白,我常常受困于不会想问题:“不知道让计算机解决这个问题该如何做”。其实,程序员的一个基本功是,能够将复杂的问题分解开来。学会分解任务,因超级大分为大的、中的、小的、超小的,直到能用很直接的方法解决。记住一个很管用的策略:自项向下,逐步求精。不管做何事,都拿这个策略套一套,程序能编好,其他事也都能做。 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值