打字猴:1.700414715e+09
1700414715 计算机是怎样跑起来的 [:1700412658]
1700414716 计算机是怎样跑起来的 5.1 算法是程序设计的“熟语”
1700414717
1700414718 学习编程语言与学习外部很像,为了将自己的想法完整地传达给对方,仅仅死记硬背单词和语法是不够的。学习C、Java和BASIC等编程也是如此。仅仅把关键词和语法记下来,是无法设计出程序的。可是一旦了解了算法就能将自己的想法完整的用编程语言表达出来
1700414719
1700414720 “令人生畏且难以掌握”“和自己无缘”,是不是会对算法有这样的印象呢?诚然,有那种无法轻松理解,难以掌握的算法,但并不是说只有把那种由智慧超群的学者才能想出的算法全部牢记在心中才能编写程序,简单的算法也是有的。而且自己不妨去思考一些原创的算法,只要理清在现实世界解决问题的步骤,再结合计算机的特性,就一定能想出算法。思考算法也可以是一件非常有趣的事情。下面,介绍思考算法时的要点。请务必以此为契机,和算法成为朋友,体味思考算法所带来的乐趣
1700414721
1700414722
1700414723
1700414724
1700414725 计算机是怎样跑起来的 [:1700412659]
1700414726 计算机是怎样跑起来的 5.2 要点1:算法中解决问题的步骤是明确且有限的
1700414727
1700414728 先正式介绍一下什么是算法,用词典查algorithm的意思,得到的解释是“算法”,这个解释很含糊,不知所云吧
1700414729
1700414730 再查查JIS(日本工业标准),上面算法的定义是“被明确定义的有限个规则的集合,用于根据有限的步骤解决问题。例如在既定的精度下,把求解sinx的计算步骤无一遗漏地记录下来的文字”。这个定义虽然看起来晦涩,但正确地解释了什么是算法
1700414731
1700414732 如果用通俗易懂的语言来说,算法就是“把解决问题的步骤无一遗漏地用文字或图表示出来”。要是把这时的“用文字或图表示”替换为“用编程语言表达”,算法就变成了程序。而且请注意这样一个条件,那就是“步骤必须是明确的并且步骤数必须是有限的”
1700414733
1700414734 接下来先举一个具体的例子,请想一想解决“求出12和42的最大公约数”这个问题的算法。最大公约数是指两个整数的公共约数(能整除被除数的数)中最大的数。最大公约数的求解方法应该在中学数学课上学过了。把两个数写在一排,不断地寻找能够同时整除这两个整数的除数。最后把这些除数相乘就得到了最大公约数(如图5.1所示)
1700414735
1700414736 图5.1 在中学学的求解最大公约数的方法
1700414737
1700414738
1700414739
1700414740
1700414741 用这个方法求出了6是最大公约数,结果正确,但这些步骤能够称为算法治理?答案是不能,因为步骤不够明确
1700414742
1700414743 步骤1的“用2整除12和42”和步骤2“用3整除6和21”,是怎么知道要这样做的呢?寻找能够整除的数字的方法,在这两步中并没有体现。步骤3“没有能同时带队和7的除数”,又是怎么知道的呢?而且,到此为止无需后续步骤(即步骤数是有限的)的原因也是不明确的
1700414744
1700414745 其实这些都是凭借人类的判断。在解决问题的步骤中,有了与直觉相关的因素,就不是算法了,既然不是算法,也就不能用程序表示了
1700414746
1700414747
1700414748
1700414749
1700414750 计算机是怎样跑起来的 [:1700412660]
1700414751 计算机是怎样跑起来的 5.3 要点2:计算机不靠直觉而是机械地解决问题
1700414752
1700414753 计算不能自发地思考。因此计算机所执行的由程序表示的算法必须是由机械的步骤所构成。所谓“机械的步骤“就是不用动任何脑筋,只要按照这个步骤做就一定能完成的意思。众多的学者和前辈程序员们已经发明创造了很多机械地解决问题的步骤,这些步骤并不依赖人类的判断,由此构成的算法被称为”典型算法“
1700414754
1700414755 辗转相除法(又称欧几里德算法)就是一个机械地求解最大公约数问题的算法,在辗转相除法中分为使用除法运算和使用减法运算两种方法。使用减法运算简单易懂,步骤如图5.2所示。
1700414756
1700414757 图5.2 根据辗转相除法求解最大公约数的方法
1700414758
1700414759
1700414760
1700414761
1700414762 用两个数中较大的数减去较小的数(步骤),反复进行上述步骤,直到两个数的值相等(步骤的终止)。如果最终这两个数相同,那么这个数就是最大公约数。请注意以下三点:(1)步骤是明确的、完全不依赖直觉的;(2)步骤是机械的、不需要动脑筋就能完成的;(3)使步骤终止的原因是明确的
1700414763
1700414764 使用辗转相除法求解12和42的最大公约数的程序代码如代码清单5.1所示。本章展示的程序都是用VBScript编写的。只要把代码清单5.1中的内容输入文本编辑器,保存成扩展名为.vbs的文件,双击这个文件,程序就可以运行了(如图5.3所示)。即使读不懂这段程序代码的内容也没有关系。这里需要注意的是该算法和所描述的步骤是可以直接转换成程序的。
[ 上一页 ]  [ :1.700414715e+09 ]  [ 下一页 ]