数据结构
数据: 信息的载体,描述事物属性的数,字符,以及能够输入到计算机中被计算机处理的符号的集合。
数据元素: 是数据的基本单位,一个元素数据可以有若干个数据项组成,数据项是组成数据元素的不可分割的最小单位。
数据对象:具有相同性质的数据元素的集合,是数据的一个子集合;
数据类型:
- 原子类型:不可以再分割的数据类型
- 结构类型: 可以分解成若干成分的数据类型
- 抽象数据类型: 抽象数据组织和相关的操作
数据的三要素:
-
逻辑结构
元素之间的逻辑关系,和储存无关,独立于计算机。逻辑结构分成 线性结构 非线形结构。
线形结构: 一般线性表,受限线性表:栈和队列,串;数组,广义表
非线形结构: 集合,树形结构:一般树,二叉树,图状结构:有向图,无向图 -
储存结构
数据在计算机中存在的物理结构: 顺序储存,链式储存,散列储存,索引
储存
- 数据的运算
算法的基本概念
- 有穷性:执行一定步数之后,在有穷时间内完成
- 确定性: 有确切的含义,相同的输入只能获得相同的输出
- 可行性: 通过已经实现的基本的运算执行有限次实现
- 输入: 零个或者多个输入
- 输出: 零个或者多个输出
评价的标准的:
- 正确性
能够正确的解决求解问题 - 可读性
良好的可读性可以帮助人们理解 - 健壮性
输入非法数据,算法可以正确的做出反应,进行处理 - 效率和低储存量需求
效率:算法执行的时间,储存量需求需要的最大的储存空间。两者都与问题规模有关。
时间复杂度 T=O(n) 衡量
频度: 一句语句在算法中被重复执行的次数
算法中所有的语句品读之和几位T(n), n是问题规模,最深层循环内语句的频度与Tn相同时间复杂度
但是往往复杂度不光光和问题的规模相关,和其他的条件(多条件loop)
硬刺存在如下指标:
最坏时间复杂度
平均时间复杂度
最好时间复杂度
复杂度的加法规则
Tn=Tn1 + Tn2 = O(Max(fn,gn))
Tn=Tn1 * Tn2 = O(fn*gn)
复杂度为:
O(1) < O(log2N)< O(n)< O(nlog2N)< O(n^2)< O(n^3)< O(2^n)< O(n!)< O(n^n)
时间复杂度 S=O(n) 衡量
除去需要的存放本身的指令常熟变量输入输出的数据意外。为了解决问题的辅助空间额外空间
inplace算法也就是原地工作算法就是常量空间 O(1);