这章开始讲算法了,算法是CS的核心主题。在计算机能够完成一个任务之前,必须给出一个算法来精确地告诉计算机去做什么,这里说的算法,是广义上的执行步骤,并不是说你单纯的if-else就不能叫算法了,只要是一系列计算机执行步骤,都能称得上是算法。
算法的定义:一个可终止过程的一组有序的,无歧义的,可执行的步骤的集合。通过执行一个算法,总会做点什么,算法是抽象的,算法的表示可能会产生歧义,大概是这个意思。这里还说到:程序,算法和进程既是不同的却又是有关联的,程序是算法的表示,而进程又是算法的活动。
算法的表示:
计算机科学解决问题的途径是建立一组严格定义的构件块,利用它们来构建算法的表示,这种构件块称作“原语”,赋予原语准确的定义消除了很多由于歧义造成的问题。原语的集合以及说明如何组合这些原语来表示比较复杂的想法的规则集合就构成了一种程序设计语言。
每个原语都有自己的语法和语义,语法是原语的符号表示,语义是指该原语的含义。
算法的发现:
程序开发由两个活动组成——发现潜在的算法和以程序的方式表示算法。算法被设计出来是为了解决一个给定问题,那么给定问题的求解过程,就是算法被发现的过程。发现问题的求解方法是一种具有艺术性的技艺,并且有章可循,另外也需要一些经验,灵感,各种事物的联系等,呵呵,不在考虑之列。
接下来便介绍了几种求解问题的方法,逐步求精,迭代结构,递归结构等;且给出了顺序查找,插入排序,冒泡排序,二分搜索等算法。这些算法原来也写过,后来也忘记了。反正算法这东西,如果你遇到要求解的问题了,那么你不得不去想一下求解过程,然后用程序表示它,最终问题的解决。
算法有很多,经典的算法也很多,能解决问题就好,如果是一心研究CS,要静下心来喽,貌似有个ACM竞赛。我对这个也只是用到时,百度加思考,并没有太深的去看它,所以本章就这么结束吧。