数据结构 1-0 绪论

数据结构的基本概念

数据结构中涉及很多的概念,这些概念在后面也许用不到,但是对于理解数据结构的概念具有很好的帮助

数据:数据是信息的载体,能够输入到计算机内并且被计算机程序所识别和处理的符号的集合就是数据。

数据元素:数据元素是数据的基本单位,一个数据元素可由若干个数据项组成,数据项是数据元素最小的不可分割的最小单位。

数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

数据类型:数据类型是一个值的集合和定义在这个集合上的一组操作的总称。数据类型分为三类,原子类型指的是其值不可以再分的数据类型,结构类型是其值可以再分解的数据类型,抽象数据类型则是抽象数据组织及与之相关的操作。

数据结构:相互之间存在一种或多种特定关系的数据元素的组合,包括三方面的内容:逻辑结构、存储结构和数据的运算。算法的设计取决于选用的逻辑结构,而算法的实现主要靠所采用的存储结构。

数据的逻辑结构指的是数据元素之间的逻辑关系,即从逻辑关系上描述数据,与数据存储无关,是独立于计算机的,也就是我们画在纸上的结构。
逻辑结构一般分为线性结构和非线性结构,线性结构的典型代表是线性表,集合、树和图是典型的非线性结构。

数据的存储结构指的是数据结构在计算机内的表示,也称物理结构。它包括数据元素的表示和关系的表示,依赖于计算机语言。存储结构主要包括顺序存储、链式存储、索引存储和散列存储。
顺序存储值得是逻辑上相邻的元素在物理位置上也相邻,元素之间的关系由存储单元的临接关系来体现。
①链式存储:不要求逻辑上相邻的元素物理位置上也相邻,借助指针来表示元素之间的逻辑关系。
②索引存储:实质在存储元素信息的同时,还建立附加的索引表。
③散列存储:是通过关键字直接计算出该元素的存储地址,又称哈希存储。

1.2 算法和算法评价

数据结构与算法是挂钩而且密不可分的,所谓算法,指的是对特定问题求解步骤的一种描述。算法必须满足下面的五个特征:
有穷性:算法必须在执行有穷步之后结束,并且每一步都可以在有限时间内完成。
确定性:算法中每条指令必须有确切的含义,相同的输入一定是相同的输出。
可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
输入:一个算法有零个或者多个输入。
输出:一个算法有一个或者多个输出。

衡量算法的效率也是算法里面常考的内容。算法效率的衡量主要是通过时间复杂度和空间复杂度来描述的。

提到时间复杂度,首先需要明白什么事语句的频度,语句的频度指的是语句在算法中被重复执行的次数,算法中所有语句的频度之和记作T(n),这是一个与算法问题规模n有关的函数,算法中基本运算的频度与T(n)同数量级,一般用基本运算的频度来分析时间复杂度。简单来说,一个程序运行需要的时间,主要是看里面语句的执行次数,而对于一般的顺序语句,基本都是一去不返,执行一次就没有第二次,而占据大部分时间的,是语句中的循环语句,所以用最深层循环中的语句的频度来研究时间复杂度。
计作T(n)=O(f(n))

针对时间复杂度,一般研究最坏时间的复杂度、最好时间复杂度和平均时间复杂度。其中平均时间复杂度是最重要也是最常用的。

在分析一个程序的时间复杂度时,有两个规则:
加法规则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
乘法规则:
T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))

一般常见的渐进时间复杂度为:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2的n次方)<O(n!)<O(n的n次方)

空间复杂度指的是该算法所耗费的存储空间。一般一个程序执行时除需要存储空间来存放本身的指令、常数、变量和输入数据外,还需要一些辅助空间,比如需要借助队列或者堆栈来辅助算法,这些都是空间复杂度所需要考虑的。算法原地工作所需要的辅助空间为常量,即O(1)。

猜你喜欢

转载自blog.csdn.net/weixin_43849505/article/details/108968992