树
在树中,除根结点外,其余所有结点都是由其双亲结点引出的。所以+1是加的根结点。
关于树的结点个数
n=n0+n1+n2+...=....+2∗n2+n1+1n0+n1+n2+...=....+2∗n2+n1+1
二叉树
性质:
- 二叉树第二层(i>=1)上最多有 2k−1 2k−1个结点
- 高度为k(k>=1)的二叉树最多有2k−12k−1 个结点
- 对于任意一颗二叉树,若其终端节点数为 n0 n0,度为2 的节点个数为 n2 n2,则 n0 n0 = n2 n2+1
- 具有n个节点的完全二叉树的深度为log2n+1log2n+1
证明三:对于任意一个二叉树,度为0的节点个数为n0n0,度为1的结点个数为n1n1,度为2的结点个数为n2n2那么二叉树结点数n=n0+n1+n2n0+n1+n2 ,
再根据分支个数 等于 结点数 所以n=n1+2n2n1+2n2
所以 n0+n1+n2n0+n1+n2 = n1+2n2n1+2n2 相减得
n0 n0 = n2 n2+1
算法
算法特点
- 有穷性:执行有穷步后结束
- 确定性:算法中每一条指令都必须有明确的含义,不能含糊不清
- 有效性:算法的每个步骤都能有效执行并能得到确定的结果
- 输入
- 输出
算法复杂度
时间复杂度:表示方法 T(n) = O(n2n2)
常见的算法时间复杂度
图
完全图:若一个无向图具有n个顶点,而每一个顶点与其他n-1个顶点之间都有边,则称为无向完全图。
若一个有向图具有n个顶点,而每一个顶点与其他n-1个顶点之间都有方向相反的弧,则称为有向完全图。
含有n个顶点的无向完全图共有n(n-1)/2 边
含有n个顶点的有向完全图共有n(n-1) 弧
最小生成树 求解
- 普里姆 Prim 算法
以一个顶点最为开始,不断寻找与集合中顶点相邻且代价最小的边的另一顶点,直至顶点全部为止
与图中的边数无关,适合求 边稠密的网的最小生成树
时间复杂度T(n) =O(n2n2)2.克鲁斯卡尔算法
每次都选一个代价最小的边,直至所有顶点都在一个连通分量上为止
与图中的顶点数无关,该算法适合求 边稀疏的网的最小生成树
时间复杂度T(n) =O(elogeeloge)
拓扑排序&关键路径
AOV网(Activity On Vertex network)
不存在环
概念:在有向图中,若以顶点表示活动,用有向边表示活动之间的优先关系,则称这样的有向图为以顶点表示活动的网,即AOV网
对AOV网进行拓扑排序的方法:
1.在AOV网中选择一个入度为0(没有前驱)的顶点,且输出该顶点
2. 在网中删除该顶点以及与该顶点有关的弧(即出度的边)
3. 重复上述步骤,直到网中不存在入度为0的顶点为止
拓扑排序算法的时间复杂度是O(n+e)
AOE网(Activity on Edge network)
若在带权有向图G中以顶点表示事件,以有向边表示活动,以边上的权值表示该活动持续的时间,则这种带权有向图成为用边表示活动的网。
一般情况下,每项工程都有一个开始事件和一个结束事件。so,在AOE网中至少有一个入度为0的开始顶点,称为源点
另外,应有一个出度为0的结束顶点,称为汇点。
AOE网中不应存在有向回路。否则整个工程无法完成
关键路径&关键活动
关键路径:再从源点到汇点的路径中,长度最长的路径称为关键路径。
关键活动:关键路径上的所有活动均是关键活动。
最短路径
单源点最短路径
单源点最短路径:给定带权有向图G和源点v0v0,求v0v0到G中其余各顶点的最短路径。
迪杰斯特拉算法(Dijkstra):按照路径长度递增的次序产生最短路径的算法。
算法思想:把网中所有顶点分成两个集合S和T,S集合的初态只包含顶点v0v0,T集合的初态为网中除顶点v0v0之外的所有顶点。凡是以v0v0为源点,已经确定了最短路径的终点并入S集合中,顶点集合T则是尚未确定最短路径的顶点的集合,以此类推…
每对顶点间的最短路径
若每次以一个顶点为源点,重复执行迪杰斯特拉算法n次,便可求出网中每一对顶点间的最短路径。
弗洛伊德算法(Floyd):