【微体系课】算法与数据结构高手养成课
Wan整下哉 : ukoou.com/resource/1206
数据结构是计算机专业中一门综合性的基础课程,它是介于数学,计算机硬件和计算机软件的三者之间一门核心课程,同时,数据结构是设计数据库,程序,操作系统,游戏等等设计方面的重要基础,是绝大多数计算机专业考研的指定科目,也是大公司面试时常考科目,同时,也是高中及大学的学课竞赛中必备知识,优秀的数据结构和算法,可见数据结构在计算机课程中的重要性。
计算机的算法与数据结构密切相关,算法无不依赖于数据结构,而数据结构也关系到算法的效率,直接决定了一个程序的好坏。
1. 算法的特性
- 输入输出
算法具有零个或者多个输入,同时,算法具有至少一个的输出。
对于在屏幕上打印”Hello World”一样,你可以不需要有任何的输入,直接输出得到结果即可,而对于一个没有输出的算法,没有任何意义。
- 确定性
算法的每一步都具有确定的含义,无二义性。任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出。
请注意,如果算法的目的是产生一个随机数字,每一次运行产生了不同的结果,看上去好像违反了算法确定性原则,但计算机产生随机数亦是使用一种(或多种)算法解决,以线性同余产生随机数为例,其利用了CPU时间的不同产生的不同的结果,当CPU的时间完全一样的时候依旧会产生相同结果,只不过人类无法察觉到如此精确的时间区别。
3)有穷性
一个算法总是需要(输入合法的情况下)在有限的步骤结束,即每个算法需要在有穷的时间内完成。
这是算法与程序的最主要的区别,程序可以无限制循环的执行下去。对于此,你可以理解为一个算法必须要有一个”边界“,即使一个算法需要计算机连续运算50年,但依旧是有穷的,只不过这个算法意义已经不是很大了。
4)可行性
一个算法是可以被执行的,即算法中的每个操作都可以通过已经实现的基本运算执行有限的次数完成。
尽管在目前计算机解存在着没有实现成功的极为复杂的算法,但是并不能说的上是无法实现,只不过是受到现在的工具和人类的大脑限制了,这属于理论研究的范围。
1. 基本概念和术语
1)数据
数据(Data)是信息的载体,是可以被计算机识别,存储并加工处理的描述客观事物的信息符号的总称。数据不仅仅包括了整形,浮点数等数值类型,还包括了字符甚至声音,视频,图像等非数值的类型。
2)数据元素
数据元素(Data Element)是描述数据的基本单位,也被称为记录。一个数据元素有若干个数据项组成。
如禽类,鸡鸭都属于禽类的数据元素。
3)数据项
数据项(Data Item)是描述数据的最小单位,其可以分为组合项和原子项:
a)组合项
如果数据元素可以再度分割,则每一个独立处理单元就是数据项,数据元素就是数据项的集合。
b)原子项
如果数据元素不能再度分割,则每一个独立处理的单元就是原子项。
如日期2019年4月25日就是一个组合项,其表示日期,但如果单独拿25日这个数据出来观测,这就是一个原子项,因为其不可以再分割。
4)数据对象
数据对象(Data Object)是性质相同的一类数据元素的集合,是数据的一个子集。数据对象可以是有限的,也可以是无限的。
5)数据结构
数据结构(Data Structures)主要是指数据和关系的集合,数据指的是计算机中需要处理的数据,而关系指的是这些数据相关的前后逻辑,这些逻辑与计算机储存的位置无关,其主要包含以下四大逻辑结构。
\