图的可视化问题、havel-hakimi算法、Erdős–Gallai定理

简单无向图的可视化问题:

给定一个度数序列D={a1......an},a⊂Z+,aiD=\{a_1......a_n\},a\subset Z^+,a_iD={a1​......an​},a⊂Z+,ai​表示iii号点在某个简单无向图中的度数,问是否有一个简单无向图满足这个给定的度数序列DDD,若有,构造一个,称其为DDD的可视化

havel−hakimihavel-hakimihavel−hakimi算法:

给出一个DDD并构造简单无向图的方法:

将D(xD(xD(x从大到小排序,使ap1≥......≥apna_{p_1}\ge......\ge a_{p_n}ap1​​≥......≥apn​​,我们从p1p_1p1​号点向p2,p3......pap1+1p_2,p_3......p_{a_{p_1}+1}p2​,p3​......pap1​​+1​号点分别连边,然后p1p_1p1​的度数限制已经满足,新的序列{sort{ap2−1......apap1+1−1......apn}}\{sort\{a_{p_2}-1......a_{p_{a_{p_1}+1}}-1......a_{p_n}\}\}{sort{ap2​​−1......apap1​​+1​​−1......apn​​}}记为D′D^{\ '}D ′,(sort{}sort\{\}sort{}表示按照下标重新排回原来的顺序,虽然可视化的判定与序列元素的顺序无关,但这样更加直观),继续对D′D^{\ '}D ′进行上述操作,重复nnn次直到序列为空,若某次操作出现了非法(如某个元素变为负数),即为原序列不能可视化,证明见下。

havel−hakimihavel-hakimihavel−hakimi定理:DDD能可视化(1)↔D′\leftrightarrow D^{\ '}↔D ′能可视化(2)

证明:(2)→\rightarrow→(1):若(2)成立,按照上文的方法给111号点连边,则(1)成立。

(1)→\rightarrow→(2):若(1)成立,找到使(1)成立的任意一张简单无向图GGG,讨论如下:

(i):将GGG的点的度数由大到小排序后,若p1p_1p1​节点相邻的点分别为p2,p3......pap1+1p_2,p_3......p_{a_{p_1}+1}p2​,p3​......pap1​​+1​,则将这个点和这些边删掉,易知(2)成立。

(ii):若∃pi⊂{p2,p3......pap1+1},edge(p1,pi)isn′texist\exist p_i\subset \{p_2,p_3......p_{a_{p_1}+1}\},edge(p_1,p_i) \ isn't\ exist∃pi​⊂{p2​,p3​......pap1​​+1​},edge(p1​,pi​) isn′t exist 则∃pj,j>ap1+1,edge(p1,pj)exist\exist p_j,j>a_{p_1}+1,edge(p_1,p_j)\ exist∃pj​,j>ap1​​+1,edge(p1​,pj​) exist

则,api≥apj,∃k,edge(k,pj)isn′texist,edge(k,pi)exista_{p_i}\ge a_{p_j},\exist k,edge(k,p_j)\ isn't\ exist,edge(k,p_i)\ existapi​​≥apj​​,∃k,edge(k,pj​) isn′t exist,edge(k,pi​) exist,给GGG加上(pj,k),(p1,pi)(p_j,k),(p_1,p_i)(pj​,k),(p1​,pi​)两条边,删除(pi,k),(p1,pj)(p_i,k),(p_1,p_j)(pi​,k),(p1​,pj​)两条边,成为新图G′G^{\ '}G ′,新图DDD不变且满足讨论(i),可证(2)成立

使用这个递归算法即可构造一张合法的图,由havel−hakimihavel-hakimihavel−hakimi定理可知,若这个过程中出现某个D(k)D^{(k)}D(k)不能可视化,则原序列DDD不能可视化,第一次排序后使用链表和同值分块维护不增关系,算法复杂度O(nlog2n+m)O(nlog_2n+m)O(nlog2​n+m)

用数学方法表示图可视化的判定关系Erdos–GallaiErdos–GallaiErdos–Gallai定理:

DDD能可视化(1)↔\leftrightarrow↔∀k⊂[1,n],∑i=1kapi≤k(k−1)+∑i=k+1nmin(api,k),∑i=1naimod2=0\forall k\subset[1,n],\sum_{i=1}^{k}a_{p_i}\leq k(k-1)+\sum_{i=k+1}^{n}{min(a_{p_i},k)},\sum_{i=1}^{n}a_i mod2=0∀k⊂[1,n],∑i=1k​api​​≤k(k−1)+∑i=k+1n​min(api​​,k),∑i=1n​ai​mod2=0(2)

证明:

(1)→\rightarrow→(2):如果(1)成立,那么考虑任意的度数前kkk大的点,考虑他们需要∑i=1kapi\sum_{i=1}^{k}{a_{p_i}}∑i=1k​api​​的度数贡献,考虑两个端点都在度数前kkk大的点集中的边,最多能贡献给度数前kkk大的点度数为k(k−1)k(k-1)k(k−1),考虑只有一个端点在度数前kkk大的点的边,每条这样的边可以有111的度数贡献,枚举这条边的另一个端点计算可提供的最大贡献即为∑i=k+1nmin(api,k)\sum_{i=k+1}^{n}{min(a_{p_i},k)}∑i=k+1n​min(api​​,k),可提供的最大贡献当然必须大于等于度数前kkk大的点需要的度数贡献,因此必要性即证

(2)→\rightarrow→(1):考虑数学归纳法,设s(D)=∑i=1napis(D)=\sum_{i=1}^{n}{a_{p_i}}s(D)=∑i=1n​api​​,考虑对sss进行归纳。显然对于s(D)=0,2s(D)=0,2s(D)=0,2,定理成立。那么我们假设已证对于s(D)=2ks(D)=2ks(D)=2k定理成立,欲证∀D,s(D)=2(k+1)\forall D,s(D)=2(k+1)∀D,s(D)=2(k+1),定理也成立。为了方便,我们重新给序列标号,将apia_{p_i}api​​的下标记为iii(早就该这么做了233)。设ttt为最小的满足at>at+1a_t>a_{t+1}at​>at+1​的整数,若DDD中数字全部相同,则将ttt设为n−1n-1n−1。考虑将序列中at,ana_t,a_nat​,an​分别减111,显然不增的性质没有改变得到了新序列D′={a1=a2=......>at−1≥at+1......≥an−1},s(D′)=2k,D^{\ '}=\{a_1=a_2=......>a_t-1\ge a_{t+1}......\ge a_n-1\},s(D^{\ '})=2k,D ′={a1​=a2​=......>at​−1≥at+1​......≥an​−1},s(D ′)=2k,

下面来证明:DDD满足(2)→D′\rightarrow D^{\ '}→D ′满足(2)

对新序列的nnn个不等式分类讨论:

(a)(a)(a):k≥tk\ge tk≥t,对于新序列,不等式左边至少减去了111,不等式右边最多减去了111,因此原不等式依然成立

(b)(b)(b):1≤k≤t−1,ak≤k−11\leq k\leq t-1,a_k\leq k-11≤k≤t−1,ak​≤k−1,∑i=1kak=kak≤k(k−1)+∑i=k+1nmin(Di′,k)\sum_{i=1}^{k}a_k=ka_k\leq k(k-1)+\sum_{i=k+1}^{n}{min(D^{\ '}_i,k)}∑i=1k​ak​=kak​≤k(k−1)+∑i=k+1n​min(Di ′​,k)

(c)(c)(c):1≤k≤t−1,ak=k1\leq k\leq t-1,a_k=k1≤k≤t−1,ak​=k,先证∑i=k+2nai≥2\sum_{i=k+2}^{n}a_i\ge 2∑i=k+2n​ai​≥2:若k≤n−3k\leq n-3k≤n−3,则显然成立,否则可知t=n−1=ak=n−2t=n-1=a_k=n-2t=n−1=ak​=n−2

此时s(D)=(n−1)(n−2)+anmod  2=0s(D)=(n-1)(n-2)+a_n\mod\ 2=0s(D)=(n−1)(n−2)+an​mod 2=0,由于(n−1)(n−2)mod2=0(n-1)(n-2)\ mod \ 2=0(n−1)(n−2) mod 2=0,an≥2a_n\ge 2an​≥2,即证

则:∑i=1kak=k2−k+ak+1≤k2−k+∑i=k+1nai−2≤k(k−1)+∑i=k+1nmin(Di′,k)\sum_{i=1}^{k}a_k=k^2-k+a_{k+1}\leq k^2-k+\sum_{i=k+1}^{n}{a_i}-2\leq k(k-1)+\sum_{i=k+1}^{n}{min(D^{\ '}_i,k)}∑i=1k​ak​=k2−k+ak+1​≤k2−k+∑i=k+1n​ai​−2≤k(k−1)+∑i=k+1n​min(Di ′​,k)

(d)(d)(d):1≤k≤t−1,ak≥k+1,an≥k+11\leq k\leq t-1,a_k\ge k+1,a_n\ge k+11≤k≤t−1,ak​≥k+1,an​≥k+1,此时at=ak=k+1,an≥k+1a_t=a_k=k+1,a_n\ge k+1at​=ak​=k+1,an​≥k+1,不等式右边与kkk取minminmin,因此,不等式两边的值不变,不等式依然成立。

(e)(e)(e):1≤k≤t−1,ak≥k+1,an&lt;k+11\leq k\leq t-1,a_k\ge k+1,a_n&lt;k+11≤k≤t−1,ak​≥k+1,an​<k+1,设rrr为最小的整数满足at+r+1&lt;k+1a_{t+r+1}&lt;k+1at+r+1​<k+1,可知t+r+1≤n,∑i=t+r+1nai&gt;0t+r+1\leq n,\sum_{i=t+r+1}^{n}a_i&gt;0t+r+1≤n,∑i=t+r+1n​ai​>0,由于at−1=ak−1≥ka_t-1=a_k-1\ge kat​−1=ak​−1≥k,因此不等式右边只会由于Dn′=an−1&lt;kD^{\ '}_n=a_n-1&lt;kDn ′​=an​−1<k而减少111

考虑反证法,若有原不等式组成立,但存在一条新不等式当(e)(e)(e)情况时不成立,则由于右边只会减少111,左边不变,因此此不等式对应的原不等式必有:

∑i=1kai=kak=k(k−1)+∑i=k+1nmin(ai,k)=k(k−1)+k(t+r−k)+∑i=t+r+1nai=(t+r−1)k+∑i=t+r+1nai\sum_{i=1}^{k}a_i=ka_k=k(k-1)+\sum_{i=k+1}^{n}{min(a_i,k)}=k(k-1)+k(t+r-k)+\sum_{i=t+r+1}^{n}a_i=(t+r-1)k+\sum_{i=t+r+1}^{n}a_i∑i=1k​ai​=kak​=k(k−1)+∑i=k+1n​min(ai​,k)=k(k−1)+k(t+r−k)+∑i=t+r+1n​ai​=(t+r−1)k+∑i=t+r+1n​ai​

则有:∑i=1k+1ai=(k+1)ak=(k+1)(t+r−1)+k+1k∑i=t+r+1nai&gt;(k+1)k+(k+1)(t+r−k−1)+∑i=t+r+1nai=(k+1)k+∑i=k+2nai\sum_{i=1}^{k+1}a_i=(k+1)a_k=(k+1)(t+r-1)+\frac{k+1}{k}\sum_{i=t+r+1}^{n}a_i&gt;(k+1)k+(k+1)(t+r-k-1)+\sum_{i=t+r+1}^{n}a_i=(k+1)k+\sum_{i=k+2}^{n}a_i∑i=1k+1​ai​=(k+1)ak​=(k+1)(t+r−1)+kk+1​∑i=t+r+1n​ai​>(k+1)k+(k+1)(t+r−k−1)+∑i=t+r+1n​ai​=(k+1)k+∑i=k+2n​ai​

第k+1k+1k+1条不等式不成立,与条件矛盾,因此不可能存在一条新不等式不成立。

综上所述,s(D)=2(k+1)s(D)=2(k+1)s(D)=2(k+1)且不等式成立→\rightarrow→ D′D^{\ '}D ′满足不等式→∃G\rightarrow \exist G→∃G满足D′D^{\ '}D ′序列:

若edge(t,n)notinGedge(t,n)\ not\ in Gedge(t,n) not inG则在图中加入这条边,即可构造出满足DDD序列的简单无向图

若edge(t,n)⊂Gedge(t,n)\subset Gedge(t,n)⊂G,则此时:先再加入一条edge(t,n)edge(t,n)edge(t,n)得到新图G′G^{\ '}G ′,使其满足DDD,此时图中有两条edge(t,n)edge(t,n)edge(t,n)重边,下面进行调整:首先由不等式可得at=a1&lt;na_t=a_1&lt;nat​=a1​<n,由于edge(t,n)edge(t,n)edge(t,n)已经占据ttt的两个度数,因此真正与ttt相邻的点最多只有n−2n-2n−2个,不失普遍性,我们设n&gt;3n&gt;3n>3,此时就可以用类似havel−hakimihavel-hakimihavel−hakimi算法类似的方法进行调整:∃k,edge(t,k)notinG′,ak≥an,∃p≠t,edge(p,k)⊂G′,edge(p,n)notinG′\exist k,edge(t,k) not\ in\ G^{\ '},a_k\ge a_n,\exist p\neq t,edge(p,k)\subset G^{\ '},edge(p,n)\ not\ in\ G^{\ '}∃k,edge(t,k)not in G ′,ak​≥an​,∃p̸​=t,edge(p,k)⊂G ′,edge(p,n) not in G ′

此时删去一条edge(t,n)edge(t,n)edge(t,n),并加入edge(t,k),edge(n,p)edge(t,k),edge(n,p)edge(t,k),edge(n,p),删去edge(p,k)edge(p,k)edge(p,k),即可在保持度数矩阵不变的情况下将此图变为简单无向图,因此∀D,s(D)=2(k+1),D\forall D,s(D)=2(k+1),D∀D,s(D)=2(k+1),D能可视化,根据数学归纳法,充分性即证。

Erdos–GallaiErdos–GallaiErdos–Gallai定理也给我们提供了一种新的构造合法图的思路,也就是按照上面的过程每次找出ttt,将s(D)s(D)s(D)减小,每一层在上一步的基础上进行调整递归进行构造,这种构造方法效率不如havel−hakimihavel-hakimihavel−hakimi算法,递归层数是O(m)O(m)O(m)

例题:codeforces1091Ecodeforces\ 1091\ Ecodeforces 1091 E

最困难的部分是对Erdos–GallaiErdos–GallaiErdos–Gallai定理充分性的证明,上文是目前最简单的一种证明,此外还有最初Erdos–GallaiErdos–GallaiErdos–Gallai较为冗长的证明以及choudumchoudumchoudum基于网络流的证明(网络流证明待补)

图的可视化问题、havel-hakimi算法、Erdős–Gallai定理相关推荐

  1. Havel–Hakimi算法学习笔记(哈维尔算法)详细【Python】

    问题 来源离散数学的图论中 第一个接触到的算法:Havel–Hakimi算法 (哈维尔算法) 判断一个非负序列是否为某无向简单图的度数列的方法(Pyhton代码) 前提提要 1.无向简单图 首先先了解 ...

  2. Codeforces 1091E New Year and the Acquaintance Estimation Erdős–Gallai定理

    题目链接:E - New Year and the Acquaintance Estimation 题解参考: Havel–Hakimi algorithm 和 Erdős–Gallai theore ...

  3. R语言plotly可视化:使用PCA算法进行数据降维、使用plotly可视化PCA所有的主成分绘制散点图矩阵、降维后的两个(三个)核心主成分的二维、三维可视化图形、方差解释的量、载荷图等

    R语言plotly可视化:使用PCA算法进行数据降维.使用plotly可视化PCA所有的主成分绘制散点图矩阵.降维后的两个(三个)核心主成分的二维.三维可视化图形.方差解释的量.载荷图等 目录

  4. ML之LiRLasso:基于datasets糖尿病数据集利用LiR和Lasso算法进行(9→1)回归预测(三维图散点图可视化)

    ML之LiR&Lasso:基于datasets糖尿病数据集利用LiR和Lasso算法进行(9→1)回归预测(三维图散点图可视化) 目录 基于datasets糖尿病数据集利用LiR和Lasso算 ...

  5. DL之CNN可视化:利用SimpleConvNet算法【3层,im2col优化】基于mnist数据集训练并对卷积层输出进行可视化

    DL之CNN可视化:利用SimpleConvNet算法[3层,im2col优化]基于mnist数据集训练并对卷积层输出进行可视化 导读 利用SimpleConvNet算法基于mnist数据集训练并对卷 ...

  6. 特征图注意力_从数据结构到算法:图网络方法初探

    作者 | 朱梓豪 来源 | 机器之心 原文 | 从数据结构到算法:图网络方法初探 如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入. ...

  7. 如何在R语言中建立六边形矩阵热图heatmap可视化

    原文链接:http://tecdat.cn/?p=18879 这是一个六边形热图可视化程序,主要用到的知识RColorBrewer,fields,也就是R中的可视化绘图库(点击文末"阅读原文 ...

  8. 怎么做3D可视化?NebulaGraph Explorer 的图数据库可视化实践告诉你答案

    前言 图数据可视化是现代 Web 可视化技术中比较常见的一种展示方式,NebulaGraph Explorer 作为基于 NebulaGraph 的可视化产品,在可视化图数据领域积累了许多经验,尤其是 ...

  9. python使用matplotlib可视化阶梯图、使用step函数可视化阶梯图、可视化时间序列数据的波动周期和规律

    python使用matplotlib可视化阶梯图.使用step函数可视化阶梯图.可视化时间序列数据的波动周期和规律 目录

最新文章

  1. android 高德地图纠偏,高德地图纠偏算法(android ,ios)
  2. 简明python教程百度云-网易云课堂 - 我的职业课堂
  3. c++ 纯虚成员函数+抽象基类
  4. android 继承dialog自定义对话框
  5. C语言strchr()函数(字符串中查找子字符)
  6. linux下Vim和Terminal配色
  7. 打印管理 php,window_强化Windows Server 2008下的打印管理,  打印管理从来都是Windows Se - phpStudy...
  8. 利用maven命令将外部jar包导进maven仓库
  9. 整合nagios+cacti遇到问题及解决办法
  10. C语言printf()输出格式大全
  11. php 爬虫 执行js,使用PyV8在Python爬虫中执行js代码
  12. 隐藏APP图标并通过代码启动
  13. jQuery图片播放插件ColorBox使用方法
  14. C语言计算抛硬币问题
  15. 笔记:三维重建大作业1-相机标定
  16. 情人节送什么礼物好呢?实用又有纪念意义的礼物推荐
  17. 高数--函数--初等函数
  18. [译] 使用 Espresso 隔离测试视图
  19. Cortex-M4和M3处理器,究竟哪个市场更大?
  20. 月结4 - GR/IR重分类(Regroup) [F.19/OBYP]

热门文章

  1. 开心网外挂辅助营销推广工具2010新版!!!
  2. 微风:UI设计需要学习哪些软件?
  3. [洛谷 P1647]锁 --- 规律 + 二进制
  4. (附源码)SSM学生社团管理系统JAVA计算机毕业设计项目
  5. 上海亚商投顾:两市震荡引分化 汽车产业链获青睐
  6. 易中天讲座免费在线学习 免费下载
  7. 主流的第三方直播SDK对比(腾讯云、即构、阿里云、声网、网易云信、网宿)
  8. 嘀嗒出行再闯IPO:千军万马我无懈
  9. Excel表格 |两列数据(多列)合并一列且自动换行
  10. ios 开发证书导出p12文件_如何生成苹果开发者证书及描述文件