有穷性
确定性
可行性
输入
输出
正确性
可读性
健壮性
算法效率 时间复杂度
是n个类型相同数据元素的有限序列
有限性
相同性
相继性
数据元素间具有相对次序
长度为最外层包含元素的个数
深度为所含括弧的重数
可共享
可递归–递归表深度无限,长度有限
任意非空广义表均可分解为表头和表尾
结点层:根结点的层定义为1
树的深度:树的最大结点层
结点的度:结点子树的个数
树的度:树中最大的结点的度
叶子结点:度为0的结点
二叉树每个结点度≤2
左右子树不能颠倒
递归结构
深度为k的二叉树,有2^k-1个结点
二叉树中所含的n个结点和满二叉树中编号为1至n的结点一一对应
1.第i层最多有2^(i-1)个结点
2.深度为k的二叉树最多有2^k-1个结点
3.具有n个结点的完全二叉树的深度为?(log2 n)(向下取整)+1
4.若度数为0的结点数为N0,度数为1的结点数为N1,度数为2的结点数为N2,则N0 = N2 + 1
5.对按层编号的完全二叉树,对其任意一个编号为i的结点,若i = 1,则无双亲结点,否则其双亲结点为(i / 2)(向下取整)
6.n个结点的二叉树中,共有n + 1个空指针域
类似于广度优先算法
相同结构
相同结构及相同数值
双亲表示法
孩子链表示法
双亲孩子表示法(邻接表)
孩子兄弟表示法(左指针指向第一个孩子结点,右指针指向右边第一个兄弟结点)
结点的路径长度:从根结点到该结点的路径上分支的数目
树的路径长度:树中每个结点的路径长度之和
树的带权路径长度:树中所有叶子结点的带权路径长度之和
内节点路径长度I:从根结点到每个内结点的路长的总和
外结点路径长度E:从根结点到每个外结点的路长的总和
E = I + 2 * n
决策–成绩系统
完全图:含有n*(n - 1)/ 2条边的无向图
有向完全图:含有n*(n - 1)条边的有向图
邻接矩阵:以1、0表示有无,若有权则表示权值
邻接表:类似树的双亲孩子表示法
1.对于顶点多边少的图通常采用邻接表
2.容易找到任意顶点的第一个临街点
3.无向图的边数等于邻接表中边结点数的一半
4.有向图的弧数等于邻接表中的边结点数
深度优先生成树
广度优先生成树
Prim算法,加入顶点
Kruskal算法,加入边
顶点活动网(Activity on vertex netWork – AOV):顶点表示活动,边表示活动间的关系
拓扑序列:先后关系
不唯一性
无环性
可判断有无环
边活动网(Activity on Edge – AOE):顶点表示事件,边表示活动
唯一源点
唯一汇点
关键路径:AOE网中,路径长度最长的路径
关键活动:关键路径上的活动
ve(j) = 从源点到顶点j的最长路径长度;
(正向找最长)
vl(k) = vn的最早发生时间ve(n)-vk到vn的最长路径长度;
(逆向找最长)
若活动ai是由弧
若活动ai是由弧
活动的最早开始时间等于活动的最晚开始时间
找最小距离点,加入,更新路径
i、j、k三重循环找最小–五行算法
顺序查找–从后往前–O(N)
折半查找–O(log2 N)
索引顺序表
二叉排序树(BST)–左子树值小于根结点值,右子树值大于根结点值
平衡二叉树()–左右子树高度之差绝对值不超过1的二叉排序树
平衡因子(BF):左子树高度减去右子树高度
平衡化处理:
-LL型:顺时针
-RR型:逆时针
-LR型:逆时针、顺时针
-RL型:顺时针、逆时针
树中每个节点最多有m个子树
若根结点不是叶子结点,则至少有两棵子树
除根结点以外的所有非叶结点至少有(m/2)(向上取整)棵子树
所有叶子结点和终端结点都位于同一层
n个关键字
n个指向记录的指针
n+1个指向子树的指针
分裂结点–第[m/2]向上取整个数据向上分裂
后继替换
合并
分裂
叶子结点包含了全部关键字信息
所有非终端结点可以看作是索引
1.哈希函数:又叫做散列函数,是由关键字与记录的存储位置建立的一种函数关系,H(key)
2.哈希地址:由哈希函数得到的存储地址
3.装填因子:若散列表空间大小为n,填入表中的结点数m,则称α = m/n为装填因子
4.冲突:H(K1)= H(K2)
5.同义词:发生冲突的关键字称作同义词
1.直接定址法:H(key)=a*key+b
2.数字分析法:取一段
3.平方取中法:以关键字的平方值的中间几位作为存储地址
4.折叠法:左移位叠加和间界叠加
5.除留余数法:Hash ( key ) = key % m
6.除随机数法:H(key) = Random(key)
1.开放地址法
Hi = ( H(key) + di) MOD m i = 1,2,…,k ( k≤m-2 )
di = 1,2,3,……,m-1—线性探测再散列
di = 12,-12,……,±k^2(k ≤m/2)—二次探测再散列
di为伪随机数序列—随即探测再散列
2.双散列函数探测
发生冲突是采用两个散列函数H1(key)和H2(key)
3.链地址法
将所有哈希地址相同的记录都连接在同一链表中
在排序过程中,有若干记录的关键字相等,即Ki=Kj(1≤i≤n, 1≤j≤n,i≠j) ,在排序前后,含相等关键字的记录的相对位置保持不变,此即稳定
1.直接插入排序:稳定,平均O(n2)
2.折半插入排序:平均O(n*log2 n)
3.表排序:i应在当前位置;p实际在的位置;q表示p的下一个位置
4.希尔排序:跳跃式排序,不稳定,平均O(n1.3~n1.5)
1.冒泡排序:稳定,平均O(n2)
2.快速排序:设定枢轴,分成两个序列,两边递归,不稳定,平均O(nlog2 n)
1.简单选择排序:筛选最小值,交换。稳定,平均O(n2)
2.树形选择排序:从下往上构建二叉树。稳定,O(nlog2 n)
3.堆排序:交换后建堆。不稳定,O(nlog2 n)
二路归并:稳定,O(n*log2 n)
按所在位数进相应队列,然后依次出队列,不断重复,直到进行了最大位数这么多次
稳定,O(n)
堆排序、归并排序时间复杂度均为O(nlog2 n);快速排序平均时间复杂度为(nlog2 n);直接插入排序、冒泡排序、简单选择排序平均时间复杂度均为O(n2)