Havel--Hakimi定理推断可图化 python
介绍:
哈维尔[1955]——哈吉米[1962]算法能够用来判读一个度序列d是否是可图化的。
哈维尔[1955]——哈吉米[1962]定理:
对于N > 1,长度为N的度序列d可以可图化当且仅当d*可以可图化
(d*是将d中最大的度delta删除,然后将当中delta个最大的度分别减去1得到的。
最小的可图化序列式d(1) = 0。)
证明:
充分性:
若N = 1。则是平庸的。对于N > 1。如果d为d(1) ≥ d(2) ≥ ...... ≥ d(n) 。
如果简单图G*拥有度序列d*,能够在G*中加入一个顶点V。
使得V与G*中度为d(2) - 1......d(delta+1) - 1的顶点邻接。
这些d(i)是d中的delta个最大度顶点,不一定是d*中的delta个最大度顶点。
必要性:
简单图G生成度序列d,然后G生成一个子图G*有度序列d*。让w为d中最大度delta的点。
S为delta个点的集合,当中有所期望的d(2)........d(delta + 1)。假设N(w) = S
则将w删除得到G*。
假设不然,则有些在S中的点与N(w)中的不同样,这时候。
能够通过在不改变每一个顶点的度的情况下。改变G的画法来添加| N(w) ∩ S |的个数。
因为| N(w) ∩ S |最多添加delta次。能够反复这一过程将G转化为G#
(拥有d且S中的点为w的邻接顶点)。
然后从G#中删除w得到拥有d*的G*。
因为N(w) ≠ S,能够选择点x属于S,点z∉s。且w与z有边,w与x无边。
我们希望通过在w与x之间加入边,删除w与z之间的边,但又不希望改变顶点的度。
因为d(x) ≥ d(z)而且w是z相连,则必定有一个点y与x邻接却不与z邻接。
这是採用一个2调换,加入边集{ wz, xy },删除{ wx, yz }来添加| N(w) ∩ S |。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGFuZG9yYV9tYWRhcmE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="300" height="300" alt="">
算法:
先将序列d逆序排序,得d(1) ≥ d(2) ≥ d(3) ≥ ........ ≥ d(n-1) ≥ d(n)。
delta = d1,将d1从d中删除。将d2一直到d(delta+1)的值都减去1得到新的度序列d*。
然后再将d*排序,循环。直到d*当中出现小于0的度,则不可能可图化,或者直到d*中全为0,则为可图化。
本质:
贪心算法
list1 = [ 4, 7, 7, 3, 3, 3, 2, 1 ]
list2 = [ 5, 4, 3, 3, 2, 2, 2, 1, 1, 1 ] def havel_hakimi_algo( degree_list ): degree_list.sort( reverse = True )
print degree_list
for degree in degree_list:
if degree < 0:
return False
if degree != 0:
remove_val = degree_list.pop( 0 )
for index in range( remove_val ):
degree_list[index] -= 1
havel_hakimi_algo( degree_list )
return True print havel_hakimi_algo( list1 )
print havel_hakimi_algo( list2 )
Havel--Hakimi定理推断可图化 python的更多相关文章
- POJ1659 Frogs' Neighborhood(Havel–Hakimi定理)
题意 题目链接 \(T\)组数据,给出\(n\)个点的度数,问是否可以构造出一个简单图 Sol Havel–Hakimi定理: 给定一串有限多个非负整数组成的序列,是否存在一个简单图使得其度数列恰为这 ...
- HDU 2454 Degree Sequence of Graph G(Havel定理 推断一个简单图的存在)
主题链接:pid=2454">http://acm.hdu.edu.cn/showproblem.php?pid=2454 Problem Description Wang Haiya ...
- Havel-Hakimi定理---通过度数列判断是否可图化
0.可图:一个非负整数组成的序列如果是某个无向图的度序列,则该序列是可图的. 1.度序列:Sequence Degree,若把图G所有顶点的度数排成一个序列,责成该序列为图G的一个序列.该序列可以是非 ...
- docker容器化python服务部署(supervisor-gunicorn-flask)
docker容器化python服务部署(supervisor-gunicorn-flask) 本文系作者原创,转载请注明出处: https://www.cnblogs.com/further-furt ...
- poj Transferring Sylla(怎样高速的推断一个图是否是3—连通图,求割点,割边)
Transferring Sylla 首先.什么是k连通图? k连通图就是指至少去掉k个点使之不连通的图. 题目: 题目描写叙述的非常裸.就是给你一张图要求你推断这图是否是3-连通图. 算法分析: / ...
- 14 张思维导图构建 Python 核心知识体系
ZOE是一名医学生,在自己博客分享了很多高质量的思维导图.本文中所列的 14 张思维导图(高清图见文末),是 17 年作者开始学习 Python 时所记录的,希望对大家有所帮助.原文:https:// ...
- 关于可图化序列的一点结论 NEU 1429
Graphic Sequence A graphic sequence is a sequence of numbers which can be the degree sequence of som ...
- poj 1659 Frogs' Neighborhood 度序列可图化 贪心
题意: 对一个无向图给出一个度序列,问他是否可简单图化. 分析: 依据Havel定理,直接贪心就可以. 代码: //poj 1659 //sep9 #include <iostream> ...
- 使用七牛云存储----大家自己的图床[python]
##写博客什么的总得贴图吧,图床选来选去还是七牛吧.嗯,就是你了 [OSchaina 源码] 结合FastStone Capture 简直爽歪歪. FastStone Capture 自动保存图片到文 ...
随机推荐
- linux-改变文件属主权限-chown
http://www.cnblogs.com/peida/archive/2012/12/04/2800684.html chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID: ...
- NHibernate官方文档中文版--只读实体类型(Read-only entities)
重点 NHIbernate处理只读对象的方式可能和你在别处看到的不同.不正确的使用方式可能造成不可预料的结果. 当一个实体是只读的时候: NHIbernate不会对实体的简单属性和单向关联数据检查数据 ...
- 开源用户界面和布局的套件XiaoCai.WinformUI(美化用户界面利器)
发布一款开源用户界面和布局的套件,请朋友们多提提宝贵建议! XiaoCai.WinformUI主要是解决用户界面和布局的套件,能够快速进行合理性布局,美化用户界面. 因为之前发布到谷歌里,好多朋友都说 ...
- 【MyEcplise】导入项目后,会定时弹出一下错误MyEcplise tern was unable to complete your request in time.This couble happen if your project contains several large javaScript libraies.
Myecplise弹出错误如下: 错误代码: MyEcplise tern was unable to complete your request in time.This couble happen ...
- oracle 11g jdbc jar包在哪个文件目录
一. 如果装了oracle数据库的话, 大致是这样的目录: D:\oracle\product\11.2.0\client_1\oui\jlib\classes12.jar 或者 D:\o ...
- [Git] Git 的origin和master分析
转载: http://lishicongli.blog.163.com/blog/static/1468259020132125247302/ 首先要明确一点,对git的操作是围绕3个大的步骤来展开的 ...
- javascript设定指定元素的父结点的孙子节点的属性
window.onload=function(){ var allerror_a = document.getElementsByClassName("popup_link"); ...
- $apply用法注意
Angular为我们提供了一些接口绑定JavaScript代码和数据,而绑定数据改变和更新angular则是使用$apply方法实现的. $apply 进行数据变化检查的实际上是$digest函数,但 ...
- C#之鼠标模拟技术
游戏程序的操作不外乎两种——键盘输入控制和鼠标输入控制,几乎所有游戏中都使用鼠标来改变角色的位置和方向,本文主要是讲述如何使用C#调用Windows API函数实现鼠标模拟操作的功能.首先通过结合Fi ...
- 【转】es6的拓展运算符 spread ...
原文:https://blog.csdn.net/qq_30100043/article/details/53391308 The rest parameter syntax allows us to ...