学习计算机3年有余,至今仍然处于懵懂状态。出门在外,亲戚朋友一听说我是学计算机的,有两眼放光的,遇到一点大事小事就来找,似乎只要与计算机有关的,我就一定能搞定;也有一脸茫然的,计算机是啥,只知道对着个电脑,看个不停,敲个不停。经过几年的学习,虽说没有很强的技术,但是好歹走出了象牙塔,也能敲些代码,说出一点道道。
现在终于要面对计算机程序的灵魂人物了,算法和数据结构。虽然早已经学过这些课程,但当时都是蒙混过关,得过且过。现在已经报名参加了算法比赛,不得不直面问题,硬着头皮上了。
借用一位著名老师的话,在战略上要藐视敌人,不管有多难,都要把他想的很简单,然后一点点的学,总会有所进步。最怕的就是停留在原地,畏缩不前。所以我用文字的形式来记录学习的经历与大家共勉。
在学习算法之前一些基本的概念还是要了解的,这世上有两种强人,一种是实践强人,一种是理论强人。不管怎样,你都得懂一点。下面开始:
1.1数据结构的基本概念1.1.1 抽象数据类型与数据结构
1.数据
描述客观事物的数字、字符以及所有能输入到计算机中并能为计算机接受的各种符号集合统称为数据。数据是程序的处理对象。
2.数据类型
数据类型定义了数据的性质、取值范围以及对数据所能进行的各种操作。
3. 抽象数据类型
抽象数据类型指的是在基本数据类型支持下用户新设计的数据类型。
4.数据结构
数据结构研究的是相互关联的数据之间的关系。
1.1.2 数据的逻辑结构
1.线性结构
2.树结构
3.图结构
1.1.3 数据的存储结构
1.两种存储结构
顺序存储结构和链式存储结构。链式的比较难理解,个人觉得,得好好钻研。
1.2 算法与算法设计
1.2.1 算法
一个算法,就是一个有穷规则的集合,其规则确定了一个解决某一特定型问题的操作序列。——某位计算机大佬
个人理解,算法就是解决问题的办法,这个办法有几个步骤,而且这个办法可以解决一类问题。
算法的规则有五个特征:有穷性,确定性,输入,输出,可行性。(从字面理解就行,不要太复杂)
如何计算算法的时间复杂度?
不同的机器算法的执行时间不同,不能用执行时间长短来衡量算法的时间复杂度。算法的时间复杂度通常用算法中的主要操作步骤来度量。
如何评价算法的好坏?
1.执行算法所耗费的时间
2.执行算法所耗费的存储空间,其中主要考虑辅助存储空间
3.算法应易于理解,易于编码,易于调试,等等。
这些基本的概念都很好理解是不!?接下来就是一大波算法,通过代码来分析。