【转】自底向上和自顶向下的区别
用两个简单的例子说明一下:
某日小明上数学课,他的老师给了很多个不同的直角三角板让小明用尺子去量三角板的三个边,并将长度记录下来。两个小时过去,小明完成任务,把数据拿给老师。老师给他说,还有一个任务就是观察三条边之间的数量关系。又是两个小时,聪明的小明连蹦带跳走进了办公室,说:“老师,我找到了,三条边之中有两条,它们的平方和约等于另外一条的平方。”老师拍拍小明的头,“你今天学会了一个定理,勾股定理。它就是说直角三角形有两边平方和等于第三边的平方和”。
另一个故事,某日老师告诉小明“今天要教你一个定理,勾股定理。”小明说,“什么是勾股定理呢?”“勾股定理是说,直角三角形中有两条边的平方和等于第三边的平方。”然后老师给了一大堆直角三角板给小明,让他去验证。两个小时后,小明告诉老师定理是正确的.
两个故事刚好是语法分析里面对应的两个方法:第一个故事说的是自底向上的分析方法,第二个故事说的是自顶而下的分析方法。
在三维建模软件里也存在这个问题:
自底向上就是先建零件图,然后去组装装配图!三维网技术论坛; b2 c2 d( t9 G" k
自顶向下就是先建装配图,再在装配图中建零件图!
或者先建立一个总装配体的零件图,然后切割成各个零件图!
两种分析方法的根本区别是:自底向上的分析,是从具体到抽象;自顶向下的分析,是从抽象到具体。两种分析思路恰恰又是哲学思考问题的两大方向。可见计算机科学与哲学也是相通的.
------------------------------以上是转载内容,分割线以下是自己补充的内容------------------------------------------------------------------------
补充内容:
在软件设计或者算法设计中,经常会遇到自顶向下或者自底向上的设计方法,其实可以将一个设计项目想象成金字塔,然后自底向上就是从金字塔的底部开始,先建立基脚,从底部逐渐修建直到完成金字塔的顶端,这种方法对整体完成的样子是未知的,由具体到抽象;而自顶向下是已知金字塔的基本形状和轮廓,先建立完整骨架,再完成具体的添砖加瓦的工作,这是由抽象到具体的方法。