1700414700
高级问题:字符串的末尾用0表示,链表的末尾用-1表示,像这样特殊的数据就是哨兵。在本章中,将展示如何在“线性搜索”算法中灵活地应用哨兵
1700414701
1700414702
1700414703
1700414704
1700414706
计算机是怎样跑起来的 本章重点
1700414707
1700414708
程序是用来在计算机上实现现实世界中的业务和娱乐活动的。为了达到这个目的,程序员需要结合计算机的特性,用程序来表示现实世界中对问题的处理步骤,即处理流程。在绝大多数情况下,为了达到某个目的需要进行若干步处理。例如为了达到“计算出两个数相加的结果”这个目的,就需要依次完成以下三个步骤:“输入数值”、“执行加法运算”、“展示结果”。像这样的处理步骤就被称为算法
1700414709
1700414710
在算法中,有表示程序整体大流程的算法,也有表示程序局部小流程的算法
1700414711
1700414712
1700414713
1700414714
1700414716
计算机是怎样跑起来的 5.1 算法是程序设计的“熟语”
1700414717
1700414718
学习编程语言与学习外部很像,为了将自己的想法完整地传达给对方,仅仅死记硬背单词和语法是不够的。学习C、Java和BASIC等编程也是如此。仅仅把关键词和语法记下来,是无法设计出程序的。可是一旦了解了算法就能将自己的想法完整的用编程语言表达出来
1700414719
1700414720
“令人生畏且难以掌握”“和自己无缘”,是不是会对算法有这样的印象呢?诚然,有那种无法轻松理解,难以掌握的算法,但并不是说只有把那种由智慧超群的学者才能想出的算法全部牢记在心中才能编写程序,简单的算法也是有的。而且自己不妨去思考一些原创的算法,只要理清在现实世界解决问题的步骤,再结合计算机的特性,就一定能想出算法。思考算法也可以是一件非常有趣的事情。下面,介绍思考算法时的要点。请务必以此为契机,和算法成为朋友,体味思考算法所带来的乐趣
1700414721
1700414722
1700414723
1700414724
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
[
上一页 ]
[ :1.7004147e+09 ]
[
下一页 ]