算法导论01---到底何为算法(由算法联想到的大学教育)

到底何为算法(由算法联想到的大学教育)
最近在看算法导论,看了几天了,看了前三章,看着看着,看得我脑子中越来越豁然开朗,这本书应该大三开始的时候看最合适,因为那时候基础课程学完,专业课即将开始,而算法导论就是软件上的一个衔接。

那么到底什么是算法呢?

定义:模型分析的一组可行的、确定的和有穷的规则。
百度百科:算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。

特征:

1、有穷性(Finiteness)
算法的有穷性是指算法必须能在执行有限个步骤之后终止;
2、确切性(Definiteness)
算法的每一步骤必须有确切的定义;
3、输入项(Input)
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
4、输出项(Output)
一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
5、可行性(Effectiveness)
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。

算法的评价:

1.时间复杂度
算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。
T(n)=Ο(f(n))
因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。
2.空间复杂度
算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
3.正确性
算法的正确性是评价一个算法优劣的最重要的标准。
4.可读性
算法的可读性是指一个算法可供人们阅读的容易程度。
5.健壮性
健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性。

由算法学习想到的

上面的都是比较标准的定义,可是在我学习它的过程中,由此发现了我所学的课程之间的联系,以前虽然有过这种联系,但是没有这么完善过,这次我花了一天时间专门的疏通了一下所有的课程,我是一名即将大四的计算机科学与技术的学生,基本上所有的课程也学的差不多了,所以呢,我就用比较通俗易懂的课程来说明一下,以免的学弟学妹们再跟我一样后悔就来不及了。我感觉用语言描述不清楚,直接把图画出来,直观一点。






如果你真正看懂图了以后,你会发现,我们大学的课程还是很标准的,只是,分的太细了,有时候,我们找不出跟计算机相关的联系,计算机总的来说,就是01代码,无论是显示器,还是存储器,硬件设计无非就是0与1,是或非而已,在这个的基础上,衍生了一系列的封装好功能的硬件,再通过这些硬件封装成具有更大功能并且有软件接口的硬件器件。再通过汇编语言,也就是最高级的硬件语言,编写出最最基础的C语言,当然,对于开发者而言,少不了编译原理,继续用C语言封装,结合数据结构,就有了操作系统,大家应该都知道,世界上稳定性特别好的服务器的操作系统一般都是C语言编写的。C语言高效,可预测。有了这一层的操作系统,那么再上层就是计算机之间的相互通信,与计算机的数据存储相关的东西了(数据库),然后才有了一系列的最最上层的应用。


其实,我现在挺后悔的,大一的时候,虽然高数,线性,离散,概率论都学得挺不错,可是都是为了考试而学,没有把它深入的理解,没有刻在脑子中,不能灵活运用,这个让我很烦恼,同时我发现考研的科目,除了政治以外,数学,英语,专业课,都是将这些知识综合起来,看书的某一瞬间,我曾想,我应该考研,这样,就把知识融会贯通起来了。可是,我又想,都是自己的错,自己没有深入的理解,如果大一就深入理解了,那么现在就不会后悔了,我现在的感受就是,我特别想再把数学相关的学科,专业课相关的学科,都再学一遍(英语就不说了,看外国资料的基础),可是,我即将大四,即将找工作,没时间了,如果考研,我没有那么大的耐力,我从来都不是一个坐着看书能超过四小时的学生,可是对于敲代码做项目,我可以,我可以连续8个小时不吃不喝不动座位。这个大概就是兴趣所在吧。然而,一个很大的问题就是,计算机就是数学的基础上发展出来的,光会敲代码不思考,不计算,总不会有大的成就的。这是什么?又成了矛与盾的关系了,不知不觉就想起了离散数学里面学到的知识,用于我现在的情况,特别的恰当。

对了,大一的时候,听过好多大三的学长说,要是考研的话,就好好把基础知识学习好,要是不考研的话,考试能过就行了,要拿奖学金的话,考好点就行了,大学的课程也就那样。在这里我真想说:狗屁理论。学校又不是煞笔,为啥给我们开一些没用的专业课,我当时自己也是个二笔,竟然相信了。靠,现在真后悔,不能怪那个学长,只能怪我自己不求甚解罢了。可是,我不想中国的学生再被人误导,大学里的课程都是,理论与实践的结合的课程,可能实践的地方少一点,但是理论确实是很重要的,这一点无可置否。当你的基础很好的时候,实践能力的提高是早晚的事情,所以大学的每门课程都需要好好的学(这里除去某党的课),就连历史都要好好学,读史可以使人明智,是在教你如何为人处世。当然,历史不仅仅局限于历史,可以是某人的传记呀,等等等等。哎,其实当今社会,什么技术呀,能力呀,都是次要的,人才是那个主力军。千万不要本末倒置。

后悔呀,后悔,只能在以后的学习中,更多的注意理论知识(数学知识,专业知识)的灵活的结合与运用了。要真正的把它学通不是一件容易的事情,计算机本来就是一个没有尽头的路,正如宇宙似的, 你探索的越多,你知道的就越少。如果非要这样的话,我希望自己知道的越来越少。

最后以一句话结尾吧: 学好历数理化,走遍天下全不怕

posted @ 2013-08-05 20:07  javawebsoa  Views(448)  Comments(0Edit  收藏  举报