| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 考研数据结构与算法(一)绪论 -> 正文阅读 |
|
[数据结构与算法]考研数据结构与算法(一)绪论 |
文章目录一、数据结构概念引用《数据结构-严蔚敏》的解释: 数据结构是相互之间存在一种或者多种特定关系的数据元素的集合 我们再来看维基百科的解释: 数据结构(英语:data structure)是计算机中存储、组织数据的方式。 其实数据结构可以简单的理解为字面意思, 数据的结构 ,比如说一本书的数据有着:价格、页码、出版社、书名……等等信息,对于这些信息而言我们把它们放在一起 构成一个整体的结构 ,这就是对于这本书而言的数据结构,实际上就是把一个事务的特征信息抽象出来用数据描述。
1. 1 数据的逻辑结构
1.2 数据的存储结构
二、基本术语2.1 数据数据是信息的 载体 ,是描述客观事物属性的 所有能输入到计算机中并被计算机程序识别和处理 的符号的集合,如数字、字符等 2.2 数据元素数据元素是数据的 基本单位 ,一个数据元素可以由若干个 数据项 组成,数据项是构成数据元素的最小不可分割的单位,举例,如上面所说的一本书就是一个数据元素,而书的价格、页码、出版社、书名……等信息就是数据项 2.3 数据对象数据对象是 性质相同 的数据元素的集合,是数据的一个子集,例如对于正整数数据的对象是集合 N = 0 , 1 , 2 , … … N={0,1,2,……} N=0,1,2,…… 2.4 数据类型
三、抽象数据类型ADT先来看看维基百科上面的解释: 抽象数据类型(Abstract Data Type,ADT)是计算机科学中具有类似行为的特定类别的数据结构的数学模型;或者具有类似语义的一种或多种程序设计语言的数据类型。抽象数据类型是间接定义的,通过其上的可执行的操作以及这些操作的效果的数学约束(与可能的代价)。 其实所谓的抽象就是抽出事务普遍的本质,而抽象数据类型其实就是 封装一个事务 ,将这个事务的数据抽象成数学模型(用数字,或字符等表示),然后加上数据元素之间的关系(比如重载对元素排序),以及对数据的操作(函数),我们举一个简单的例子, 队列 这个抽象数据类型,我们的原子数据类型可能是整形、也可能是一个抽象数据结构,那么元素之间的关系就是集合关系,数据的操作基础的就有 四、算法和算法分析4.1 算法上面也谈到过,操作数据结构的方法就是算法,但是算法不只是操作数据结构的方法,只要是对特定的问题的求解有一定步骤那都能称为算法,算法也有五个比较重要的特征:
4.2 好算法的标准
4.3 时间复杂度先来看维基百科的解释: 在计算机科学中,算法的时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。例如,如果一个算法对于任何大小为 n n n (必须比 n 0 n_0 n0? 大)的输入,它至多需要 5 n 3 + 3 n 5n^3 + 3n 5n3+3n 的时间运行完毕,那么它的 渐近时间复杂度 是 O ( n 3 ) O(n^3) O(n3)。 一个语句的频度是指该语句在算法中被重复执行的次数 。算法中所有语旬的频度之和记为
T
(
n
)
T(n)
T(n) 时,它是该算法问题规模
n
n
n 的函数,时间复杂度主要分析
T
(
n
)
T(n)
T(n) 的数量级。算法中基本运算(最深层循环内的语句)的频度与
T
(
n
)
T(n)
T(n) 同数量级,因此通常采用算法中基本运算的频度
f
(
n
)
f(n)
f(n) 来分析算法 的时间 复杂度②。 因此,算法的时间复杂度记为 这里列举一下常见的渐进时间复杂度: 其实我们平时所讲的时间复杂度是一个 平均时间复杂度 或者说是 渐进时间复杂度 ,假设数据规模为 n n n ,那么我们每做一次相近数据规模的操作,复杂度的指数就会增加 1 1 1 ,例如我们对一个长度为 n n n 的数组做一个循环,那么这个渐进时间复杂度就是 O ( n ) O(n) O(n) ,如果说我们循环的是一个 n × n n\times n n×n 的二维矩阵,那么复杂度就为 O ( n 2 ) O(n^2) O(n2) 假设说我们的二维数组的每一行的数据都是有序的,我们需要从中找到指定的元素的位置,这时我们使用二分查找加速每一行的查找,那么我们发现复杂度就变成了 O ( n l o g 2 n ) O(nlog_2n) O(nlog2?n) 关于少算的那一部分次数,我们将其称为 常数 ,有的时候常数也是能影响一个算法的 更加复杂的时间复杂度分析,例如分析递归函数的时间复杂度可以去参考 势能分析法 4.4 空间复杂度与时间复杂度相对应的就是空间复杂度了,都说算法就是 “时间换空间,空间换时间” ,在一般的算法题目中其实对空间的限制并不明显,但是同样需要学习分析,在一些老的OJ,例如HDU、POJ就会有炸空间的可能,假设问题的规模同样是 n n n ,则算法的空间复杂度记为 S ( n ) = O ( g ( n ) ) S(n) = O(g(n)) S(n)=O(g(n)) 其实和时间复杂度类似,只不过从计数的方式从 操作次数 变为了整个算法的 最大内存空间的占用时刻 ,这些空间可能由输入数据、输出数据、中间数据占用。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:50:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |