绪论
基本概念
该part下是存放着一些数据结构的基本概念来帮助我们更好的学习数据结构
1.数据
数据是信息的载体,是用户将输入进计算机的信息
2. 数据元素
数据元素是数据的基本单位,通常作为一个整体进行处理(比如说mysql中的一行数据)
3.数据对象
是具有相同性质的数据元素的一个集合(比如说mysql中的一个表)
4.数据类型(懵懵懂懂)
1)原子类型:不可再分的类型
2)结构类型:可再分的数据类型
3)抽象数据类型:抽象数据组织和与之相关的操作
5.数据结构
也是一个数据元素的集合,但不是普通的集合,每个元素之间一定存在着某种关系
数据结构的三要素
-
逻辑结构
逻辑结构就是,这个数据结构在人脑的思维过程中表现出来的特性叫做逻辑结构,是这个数据结构本身的特性。并不是依赖于计算机的,不管有没有计算机,这个数据结构的逻辑结构都是原本的样子。
以下给出经典的逻辑结构- 线性结构(描述一对一的关系)
- 树形结构(描述一对多的关系)
- 图状或者网状结构(描述多对多的关系)
-
存储结构
存储结构就是把逻辑结构真真正正存在计算机中所要用到的存储结构,他要用电脑中已经拥有的结构来表达出数据结构的逻辑结构。
以下给出经典的存储结构- 顺序存储(用物理物理相邻来描述逻辑相邻)
- 链式存储(不需要物理响铃,但是需要指出下一个元素的地址)
- 索引存储(比如用关键字、地址等作为索引)
- 散列存储(由关键字直接计算出数据的地址,比如hash)
-
运算
非常重要的一环,这里是指数据结构的增删改查,判空,判满,遍历,排序等等运算。是所有算法的基础
算法和算法评价
算法的五大特性
1.有穷性
算法必须经过有限步骤之后结束
2.确定性
算法是唯一确定的,对于唯一的输入一定要有唯一的输出
3.可行性
算法是可行的
4.输入性
算法可以没有输入,4和5有时合并起来叫做输入输出性
5.输出性
算法一定要有输出
除此之外为了算法好用经常还需要有以下性质:
1.正确性
2.可读性
3.健壮性
也就是对错误数据的处理能力
4.高效率和低储存
时间复杂度(重点!!!)
时间复杂度的定义:由于不同电脑存在性能区别,所以时间复杂度的评判标准并不是一个算法的执行快慢,因为同一个算法也有可能因为不同的效率执行而导致时间复杂度的错误计算。
举个栗子,就比如你和长跑健将跑比赛,哪怕健将跑的3km也有可能比你跑1km快,这就形成了错误计算。
所以这里的时间复杂度我们规定他为算法的执行次数。
可以理解为距离,如果跑一个算法跑1000米就能结束的话,他的时间复杂度一定要比跑3000米才能结束的算法要好。
时间复杂度的计算
三种题型的时间复杂度计算
本文只对时间复杂度的第三种多层循环进行再一次分析
首先否掉第一种方法,看了半天没看懂,就算这个j和k的取值都依赖于i,但不是每一次每个循环都是通过严格增加来限制循环条件的啊? 万一变成了*2之类的怎么办,其次如果这里的i和j不依赖与k了又该怎么办? 所以这里重点讲第二种方法
第二种方法
一定要是从内往外算,以这里的i,j,k举例
由于k是最内层,所以我们看k的执行次数一定是依赖于j的 所以我们要先将k从0到j的执行次数写出来,然后我们就得到了一个用j的表达式,他的次数就是我们内层循环k-j的变换,然后同理我们再加和j-i的变换,最后再加和i-n的变换即可
空间复杂度
空间复杂度:空间复杂度就是指,在已给的数据上有没有增加新的数据,空间复杂度越大