首页 > 代码库 > 满世界都是图论
满世界都是图论
最近开始接触图论,对图论理解可能有不对的地方,欢迎指正!
刚刚看图论可能觉得有些无趣,满满都是概念和证明,几个引理后面跟几个定理。但如果暂时跳过这些繁冗复杂的东西,先去看看这些理论的定理和算法有哪些应用,就顿时发现图论真是个有趣的东西~
1. 图的连通性
首先“连通图”很容易理解,比如这个世界每个人做一个节点的话,把相互认识的两人间连一条线,整张图多半可能就是一张连通图。
对于一个连通图G,就产生了两个概念:特征路径步长和聚合系数
特征路径长度(characteristic path length):在网络中,任选两个节点,连通这两个节点的最少边数,定义为这两个节点的路径长度,网络中所有节点对的路径长度的平均值,定义为网络的特征路径长度。这是网络的全局特征。
聚合系数(clustering coefficient):假设某个节点有k条边,则这k条边连接的节点(k个)之间最多可能存在的边的条数为k(k-1)/2,用实际存在的边数除以最多可能存在的边数得到的分数值,定义为这个节点的聚合系数。所有节点的聚合系数的均值定义为网络的聚合系数。聚合系数是网络的局部特征,反映了相邻两个人之间朋友圈子的重合度,即该节点的朋友之间也是朋友的程度。
【应用解释】
对于规则网络,任意两个点(个体)之间的特征路径长度长,但聚合系数高。对于随机网络,任意两个点之间的特征路径长度短,但聚合系数低。而小世界网络,点之间特征路径长度小,接近随机网络,而聚合系数依旧相当高,接近规则网络。
发现规则网络具有很高的聚合系数,大世界(large world,意思是特征路径长度很大),其特征路径长度随着节点数 N 线性增长,而随机网络聚合系数很小,小世界(small world,意思是特征路径长度小),其特征路径长度随着log(N)增长中说明,在从规则网络向随机网络转换的过程中,实际上特征路径长度和聚合系数都会下降,到变成随机网络的时候,减少到最少。但这并不是说大的聚合系数一定伴随着大的路径长度,而小的路径长度伴随着小的聚合系数,小世界网络就具有大的聚合系数,而特征路径长度很小。试验表明,少量的short cut的建立能够迅速减少特征路径长度,而聚合系数变化却不大,因为某一个short cut的建立,不仅影响到所连接的节点的特征路径长度,而且影响到他们邻居的路径长度,而对整个网络的聚合系数影响不大。这样,少量的short cut的建立就能使整个网络不知不觉地变成小世界网络。
实际的社会、生态、等网络都是小世界网络,在这样的系统里,信息传递速度快,并且少量改变几个连接,就可以剧烈地改变网络的性能,如对已存在的网络进行调整,如蜂窝电话网,改动很少几条线路,就可以显著提高性能。
——引自百度百科
2.DAG图的双连通
割顶:对于无向图G,如果删去某一个点u后,图G的连通块数量增加,则u称为G的一个割顶。
桥:对于无向图G,如果删去某一条边(u,v)后,图G的连通块数量增加,则边(u,v)称为图G的一个桥。
点-双连通:如果一个无向图没有割顶,称它是点-双连通的。
边-双连通:如果一个无向图没有桥,称它是边-双连通的。
等价于说,点-双连通要求任意两点间存在两条点不重复的路径,即任意两个边都在同一个简单环中。
而边-双连通,要求任意两点间存在两条边不重复的路径,即任意边都在一个简单环中。
双连通的概念可以应用到很多问题上,比如环的构造,因为点双连通要求图内任意两个边都是通过简单环连接的,可以证明如果一个双连通子图中存在一个奇圈(一个结点数为奇数的环),则子图中的任意结点都在某一个奇圈中。
另外一个重要的应用是,双连通可以在某种意义上理解为图的局部“稳定性”,如果图中删除一个结点(或一条边),那么对图上其它点之间连通关系影响最小的方法应该是在删除一个非割点的点(或者非桥的边),而如果要在一些结点上建立对外联络站(或者别的什么奇怪的设施- -),那么最有效的地点应该是每个(点)双连通子图上除去割点之外的点,因为这样即使某个点从图中删去,图中其它的点也可以保证可以走到某个“联络站”而不受到太大的影响。
3.二分图匹配
二分图:若一个无向图G中的结点可以分为两个集合X和Y,使得每条无向边(u,v)都满足u,v不在同一个集合中。
对于二分图,有很多关于最大匹配,最小覆盖点集,最大独立集,最小支配集的算法,这些算法的应用我之后会慢慢补充。
先来说一下二分图到底多有用~
很多人觉得二分图只是无向图中的一个很小的类别,能套上去的模型自然会比较少,但这觉得是个误会~
二分图最重要的过程是建模,就是把什么看作结点,什么看作集合X,什么看作集合Y。
一般普通的理解是,如果每个节点有一个非0即1的属性(例如性别,黑白染色),使得同种属性之间不会有边相连,那么这个问题就可以划归为二分图了。
其实这不完全,我们完全可以把二分图的X,Y集合作为两个完全不同的事物集合来看待,例如桌子和椅子各放一个集合,而边呢,就是这两个集合间有什么联系,
这样一来二分图的应用一些广了许多。
举个栗子:
eg 1.一个棋盘上某些格子是可以放棋子的,有些则是禁放的,还有些格子固定有分割标记,任意两枚棋子如果位于同一行或同一列且中间没有任何分割标记,则相互冲突。
那么给定一个棋盘,最多能够放多少枚不相互冲突的棋子呢?
如果我们把每个能放棋子的格子看作一个点,那么这个问题确实和二分图没什么关系了。但如果我们把每行看作一个点,放在X集合里,每列看作一个点,放在Y集合里,那么每个格子对应了一个点对(x,y),可以看作边。集合内部的点之间当然是不会连边的
那么这个问题就变成了,在一个二分图里,怎么连最多的边,而使得每个点只能与一条边相连——二分图的最大匹配。
eg 2.有两台机器A和B及N个需要运行的任务。每台机器有M种不同的模式,而每个任务i都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式ai,如果它在机器B上运行,则机器B需要设置为模式bi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重新启动一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。
机器重启次数是两台机器需要使用的不同的模式个数。但是如果把每个任务看成一个X结点,把每台机器的每个模式看成一个Y结点,则此模型没有任何意义。应该把每个任务看成一条边,即A机器的每个模式看成一个X结点,B机器的每个模式看成一个Y结点,任务i为边(ai,bi)。本题即为求最少的点让每条边都至少和其中的一个点关联——二分图的最小覆盖点集。
以后会继续补充 O(∩_∩)O~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。