[数据结构]树和二叉树笔记- xp

  • 树是n个结点的有限集合,N=0时,称空树
  • 树有且仅有一个跟结点
  • 根结点无前驱,其余结点有且仅有一个前驱,可有0个或者多个后继
  • 从K可到A,说,K是祖先,A是子孙;从K一下就到A,说,K是双亲结点(父结点);来自同一个双亲,说,是兄弟结点。
  • 度:子结点数目
  • 结点的层次、高度、深度、树的高度(深度)
  • 有序树和无序树

 

二叉树

  • 二叉树不是一般树的特殊情况
  • N2-1=N0

 

 

图G又定点集V和边集E组成,记G=(V,E)。

顶点集表示:V={v1,v2,v3…} ,|V|为顶点的个数,或图G的阶。

边集表示:E={e1,e2,e3…}, |E|为边的个数。

图不可以为空——图不可以没有顶点,但是可以没有边

 

有向图 E1={<v1,v2>,<v2,v3>} 点1指向点2,点2指向点3

 

无向图E2={(v1,v2),(v2,v3)}点之间仅有连线,没有指向

 

简单图:

{

1、不存在重复边

2、不存在顶点到自身的边

}

多重图:两点之间的边数大于1

 

完全图:两个顶点之间都存在边

 

子图

 

连通:无向图中,两点有路径存在。

连通图:任意两点之间连通。

连通分量:无向图中的极大连通子图,称为连通分量。(如果一个图有n个顶点,并且小于n-1条边,则必定非连通!)

生成树:包含全部顶点的极小连通子图。

 

强连通:有向图中,两点之间互相有路径,则两点强连通。

强连通图:任意两点强连通。

 

顶点的度:该顶点为一个端点的边的数目(无向图中,顶点v的度是依附于该顶点的边的条数)

 

边上可以带权,带权的图也称为网

 

边数很少的图——稀疏图(|E|<|V|*log|V|),反之是稠密图

 

路径是两点之间的路径,路径长度是路径中的边数,第一个顶点和最后一个顶点相同的路径称为回路或者环

 

图的储存以及基本操作

1、邻接矩阵法(无向图、有向图、网都可以的;适合稠密图;容易确定任意两点是否有边,但确定图中的边数需要遍历全体,代价高;空间复杂度是O(n^2))

2、邻接表法(适合稀疏图;对于给顶点,容易找出其对应邻边,但确定两个点之间是否存在边,需要再查找另一点「邻接矩阵法则不用」;)

3、十字链表法(有向图的)不仅可以像邻接表一样,还可以像逆邻接表一样

4、邻接多重表(无向图的)

 

图的遍历

(借助队列)1、广度优先遍历(Breadth-First-Search)BFS

使用邻接表储存时,一个顶点空间复杂度O(|V|),时间复杂度O(|E|),总的时间复杂度O(|V|+|E|);若采用邻接矩阵的储存方式,一个顶点时间复杂度O(|V|),总的O(|V|2)

(借助栈)2、深度优先遍历(Deepth-First-Search)DFS

 

图的应用

 

 

一、求最小生成树:包含所有顶点,但是有最少的边

法一:prim算法(名字短,所以算法也从局部开始)

1、找最小权值的两点连通作为起始点

2、两点连通后所拥有的最小权值作为下一对连通点

。。。。。。

ps:不能生成环

 

法二、Kruskal算法(名字长,算法也从全局开始)

1、全局最短,进行连通

2、第二短。。。。。。

ps:同样不能生成环

 

二、求最短路径:求某个原点到各个顶点的最小路径

法一:Dijkstra(基于贪心策略,每次连通,都计算出下一步的所有长度)

法二:Floyd(路由器寻址)都走一遍,记录所有最优路径

 

三、拓扑排序

【有向无环图】一个有向图中不存在环

【AOV网】如用有向无环图表示一个工程,用<vi,vj>表示vi与vj之间存在的前驱后继关系,将这种有向图称之为<顶点表示活动的网络>AOE网。

【拓扑排序】1、每个定点出现且出现一次;2、若顶点A排序排在B的前面,则图中不存在B->A;

(可借助栈了避免重复比较)【拓扑排序算法】1、选择一个没有前驱的点输出;2、删除该点及以它为起点的边;3、重复12,若当前图为空或者不存在无前驱的点就停止,而后一种情况说明有环。

 

四、关键路径

【AOE网】带权有向图中,顶点表示时间,有向边表示活动,边上的权值表示活动的开销,则成这种有向图为用边表示活动的网络,AOE网。

有些活动可以并行的,从源点到汇点的路可能有多条,并且可能长度还不一样。尽管时间不同,但是只有完成了所有,整个工程才算是完成了。

「所以」从源点到汇点的所有路径中,最大路径长度的路程称为【关键路径】,关键路径上的活动称之为【关键活动】。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值