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 自动保存图片到文 ...
随机推荐
- 1.9(java学习笔记)object类及toString()与equals()方法
object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...
- js常用功能总结
1,手机号的校验 //手机号的判断 function checktel() { //手机号不为空,格式校验 var tel = $(".uidbtp").val(); if(tel ...
- 焦点改变事件OnFocusChangeListener
效果图 1.MainActivity.java package com.example.app2; import android.support.v7.app.AppCompatActivity; i ...
- SpringMVC学习记录(七)--拦截器的使用
SpringMVC的请求如以下这样的图所看到的: 能够看出全部的请求都要通过Dispatherservlet来接收,然后通过Handlermapping来决定使用哪个控制器,再依据ViewResolv ...
- java中遍历Map几种方法
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点. 先初始化一个map: publ ...
- http://blog.csdn.net/pet8766/article/details/8186955
http://blog.csdn.net/pet8766/article/details/8186955
- 2017.11.21 查询某个字段为null的记录
注意,不使用 = null, 而是 is null. select fd_username, fd_tenantid, fd_validity from t_user WHERE fd_validit ...
- WCF报错
1."没有终结点在侦听可以接受消息的 http://localhost:8084/Service1.svc.这通常是由于不正确的地址或者 SOAP 操作导致的.如果存在此情况,请参见 Inn ...
- 两列布局(浮动、定位、flex)和三列布局(圣杯、双飞翼、flex)
demo 各种布局演示 https://jsfiddle.net/mayufo/qp890peq/1/ 两栏布局 浮动 <div class="box1"> <d ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC3
右击Tasks,添加一个新的Task 可以为这个线程设置自定义的扫描周期 然后在项目上右击添加Referenced Task 在TaskSub1上右击添加现有项,把之气写好的PRG程序绑定 ...