数据结构复习小记2

树与二叉树的应用

二叉树排序树(BST)查找树

若左子树非空,则左子树上所有结点关键字值均小于根结点的关键字值。

若右子树非空,则右子树上所有结点关键字值均大于根结点的关键字值。

平衡二叉树:左右子树都是平衡二叉树,高度差绝对值不超过1;

哈夫曼树:

结点为权,从树根结点到任意结点的路径长度(经过的变数)与该结点s


哈夫曼树:

结点成为权,从根结点到任意结点的路径长度(经过的边数)与该结点上权值的乘积成为该结点的带权路径长度。

带权路径长度最小的二叉树称为哈夫曼树也称最优二叉树。

构造:每个初始结点最终成为叶结点,权值越小的结点到根结点的路径长度越大。

构造过程中共新建n-1个结点,哈夫曼中结点总数为2n-1。

前缀编码的判断:一串字符不是另一串字符的前缀。

度为m的哈夫曼树中,叶子结点个数为n,则非叶子结点的个数为(n-1)/(m-1)


图G是由顶点集V和边集E组成,记G=(V,E);不能为空图(顶点集不为空,边集可以为空);

有向图:边集E是有向的(弧)G为有向

无向图:E是无向边;

简单图:不存在重复边,不存在顶点到自身的边。

多重图:某两结点之间的边数多于一条,又允许顶点通过同一条边和自己关联。

完全图(简单完全图):在无向图中,任意两个顶点之间都存在边,则称该无向完全图。含有n个顶点的无向完全图有n(n-1)/2条边。

有向完全图有n(n-1)条边;

无向图中:顶点度n等于2e(边)

有向图:入度+出度=顶点的度 =边数

路径上边的数目称为路径长度。第一个顶点和最后一个顶点相同的路径称为回路或环,n个顶点,有大于n-1条边,一定有环。

连通的无向图至少有n-1条边,强连通有向图边数n。

各顶点的度是矩阵中此结点对应的行(出度)列(入度)


-----邻接矩阵:顺序存储,一维数组存储图中顶点的信息,二维数组存储途中边的信息;

   无向图的邻接矩阵是对称矩阵,第i行非零元素的个数正好是第i个顶点的度。

带权有向图得邻接矩阵,第Vi得入度等于第i列非无穷且非0得元素个数。

-----邻接表:链式存储,

    如果G为无向图,则所需存储空间为O(|V|+2|E|);如果G为有向图,则所需的存储空间为O(|V|+|E|),无向图中,每条边会出现两次。 邻接表中,给定一个顶点很容易查到它的所有邻边,在邻接矩阵中需要扫描一行,时间为O(n),如果要确定给定的两个顶点间是否存在边,则在邻接矩阵中可以立即查到,在邻接表中则需要在相应结点中查找另一结点,效率较低。

n个顶点得无向图得邻接表最多有

-----十字链表

      十字链表是有向图的一种链式存储结构,在十字链表中,对应于每条弧有一个结点,对应于每个顶点也有一个结点。

-----邻接多重表

   邻接多重表是无向图的另一种链式存储结构,与十字链表类似,每一条边用一个结点表示

          mark | ivex | ilink | jvex | jlink | info

   mark 为标志域,标记该条边是否被搜索过;ivex和jvex分别表示该边依附的两个顶点,ilink指向下一条依附于ivex的边,jlink指向下一条依附于顶点jvex的边,info为指向和边相关的各种信息的指针域。

 每一个顶点也用一个结点表示,由如下所示的两个域组成

   data | firstedge

 每一条边只有一个结点

------图得遍历-----

---------广度优先遍历

广度优先遍历类似于二叉树得层次遍历算法。

性能分析:无论是邻接表还是邻接矩阵的存储方式,BFS算法都需要借助一个辅助队列Q,n个顶点都需入队一次,在最坏的情况下,空间复杂度为O(|V|)

   采用邻接表存储时,每个顶点均需搜索一次(或入队一次),故时间复杂度为O(|V|),在搜索任一顶点的邻接点时,每条边至少访问一次,故时间复杂度为O(|E|),算法总的时间复杂度为O(|V|+|E|).当采用邻接矩阵存储时,查找每个顶点的邻接点所需时间为O(|V|),故算法总的时间复杂度为O(|V|^2)。

  可以使用BFS算法求解单源最短路径。

   给定图的邻接矩阵存储表示是唯一的,故其广度优先生成树也是唯一的,但由于邻接表存储表示不唯一,故其广度优先生成树也是不唯一的。

---------深度优先遍历(~树的先序遍历)

DFS算法的性能分析:

   是一个递归算法,需要借助递归工作栈,空间复杂度为O(|V|);遍历图的过程实质上是对每个顶点查找其邻接点的过程,其耗费的时间取决于采用的存储结构。以邻接矩阵表示,查找每个顶点的邻接点的所需时间为O(|V|),故总的时间复杂度为O(|V|^2).以邻接表表示时,查找所有顶点的邻接点所需时间为O(|E|),访问顶点所需时间为O(|V|),总的时间复杂度为O(|V|+|E|);

*同一个图基于邻接矩阵的遍历所得到的DFS序列和BFS序列是唯一的,基于邻接表的遍历所得到的bfs和dfs是不唯一的(因为邻接矩阵唯一,而邻接表表示不唯一)


 图的应用

------拓扑排序

有向无环图:一个有向图中不存在环;DAG

拓扑序列:由一个有向无环图的顶点组成的序列,

   条件:每个顶点出现且只出现一次;若顶点A在序列中排在顶点B的前面,则图中不存在从顶点B到顶点A的路径;

寻找没有前驱的顶点,输出每个顶点的同时还要删除以它为起点的边,时间复杂度为O(v+e);

------关键路径

AOE网:带权有向图,以顶点表示事件,有向边表示活动,边上权值表示完成该活动的开销

性质:只有在某顶点所代表的事件发生后,从该顶点出发的各有向边才能开始活动;只有在进入某一顶点的各有向边所代表的活动都结束后,才可以开始该顶点的事件。

最早发生时间ve(k):开始顶点到V的最长路径长度;最早开始时间决定了所有从v开始的点能够开工的最早时间。

最迟发生时间vl(k):不推迟整个工程下,v在ve(i)时刻能够发生时,该事件最迟必须发生的时间。

最早开始时间:该活动的起点所表示的事件最早发生时间。

最迟开始时间:活动的终点事件最迟发生时间与该活动所需时间之差

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值