自顶向下,逐步求精

来源:互联网 发布:二代防火墙 知乎 编辑:程序博客网 时间:2024/06/08 17:49

若想让计算机解题必须用清晰而无两义性的方式给它提供算法。要求:

  1. 找出一个算法,它能提供所解决问题的从输入到输出所需的映像。
  2. 选择一种程序语言写出程序,用计算机能接受的方式表述算法。 
关键是如何找出算法。因为写出程序,只是表述算法,应该没有困难。

        “自顶向下逐步求精”的程序设计技术是目前较为时髦的、合理的找出算法的一种思维方法。它的核心思想是:

        对于某一个要解决的问题,在寻求它的解法过程中,

  • 首先从问题的整体(最顶层)出发,将它分解成独立而又互不交叉的若干个子问题。每个子问题解决整体问题的一部分或一种情况。这几个子问题若能正确解决,则它们的总和就是整体问题的解。
  • 向下再一个个的具体考虑下一层的各个子问题,针对每个子问题,仍采用对待整体问题解的思路,继续对其进行分解(求精),得到该子问题的分解步骤,即更低一层次的子问题。
  • 如此下去,直到最低层的每个子问题都能用计算机语言的一个语句表示出来或都能明显写出解法为止。便找到解决整体问题的解题算法了。

       上述的求精过程中的每一步,主要用到如下四种求精技术:

  1. 顺序链接的求精
  2. 分支、选择的求精
  3. 循环的求精
  4. 递归的求精
  • 当问题的子解具有前后关系时,采用第一种顺序连接的求精技术,将问题分解成互不相交的几个子问题的顺序执行。
  • 当问题是分别不同情况而应该进行不同处理时,采用第二种分支、选择的求精技术,构成分支。这时要注意分支的条件一定要正确。
  • 当问题的子解具有特性:如果有向解的方向前进一步的方法,且不断重复该步骤,即能解决问题,最终达到完全解。则应该采用循环的求精技术。这时要弄清楚循环的初始条件、结束条件和有限进展的一步都是什么。
  • 当问题的某步解法与前边高层次的某步解法具有相同性质只是某些参数不同时,可采用递归的求精技术。这时有个注意递归的参数变化规律以及递归出口。
        自顶向下,逐步求精构造程序有如下优点:

  1. 程序的层次分明、机构清晰。
  2. 便于集体开发程序。对于大型程序来讲,可以每组负责一个模块(一个子部分),在一个组内又可以每个人负责一个子模块(更小的子部分)等等。而各个模块的负责人员可以独立的进行程序设计。
  3. 便于调试。若程序有错误,可以很容易的将错误局部于某一子部分,找出错误,同时每一部分的错误是独立的,也不至于影响其他部分。

原创粉丝点击