行亦谦ACM自闭之旅第六周


一、线段树

•线段树是一棵二叉树,每个结点储存着区间[l,r]的某个我们需要的值。(例如:最大值,最小值,区间和)
•经典问题:
–区间查询最值:求区间的最值以及单点修改和区间修改。
区间问题RMQ(Range Minimum/Maximum Query) 长度为n的数列 a1, a2, … , an
(1)求最值:给定i, j<=n,求{ai, …, aj}区间内的最值。
(2)单点修改:给定k和x,把ak改成x。 :

提示:root也是结点,只是没有父结点的结点

二、图

•由点(node,或者vertex)和连接点的边(edge)组成。
•图是点和边构成的网。
图的种类
(1)无向图,边没有权值、没有方向;
(2)有向图,边有方向、无权值;
(3)加权图,边有权值;

图的存储

•能快速访问:图的存储,能让程序很快定位结点u和v的边(u, v) 。
1)所有定点的数据信息
2)顶点之间的关系信息
3)权的信息(带权图)

数据结构存图:

–邻接矩阵
–邻接表
–链式前向星

邻接矩阵

二维数组
•优点:
–适合稠密图;
–编码非常简短;
–对边的存储、查询、更新等操作又快又简单。
•缺点:
–存储复杂度O(V2)太高。V=10000时,空间100M。
–不能存储重边。

邻接表

•应用场景:大稀疏图。
•优点:
–存储效率非常高,存储复杂度O(V+E);
–能存储重边。
•缺点:编程比较麻烦。

三、拓扑排序

点的入度和出度
•出度:以点u为起点的边的数量,称为u的出度。
•入度:以点v为终点的边的数量,称为v的入度。
•一个点的入度等于0,说明它是起点,是排在最前面的;
•一个点的出度等于0,说明它是排在最后面的。
•图中,点a、c的入度为0,它们都是优先级最高;d的出度为0,它的优先级最低。
拓扑排序概念:把事情看做图的点,把先后关系看做有向边,将问题转换为一个有先后关系的排序。(实际上个人认为这更像一种遍历方式,类似我们学树时学的先序遍历之类的操作)。
设置优先级:关于拓扑排序需要自行定义优先级和,所以用到了度的概念
出度:以点u为起点的边的数量就是u的出度
入度:以点v为终点的边的数量就是v的入度
从入度为0的点开始,对它连通的点做“松弛操作”即可实现一个遍历(bfs),实际上就是删去点了边。
拓扑排序无解的判断:队列已空,但还有点没有被排序,说明拓扑排序无解(即拓扑排序只对DAG有用【有向无环图】)。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...