如何判断一个度数数列能否构成简单图

基于“Havel Hakimi”算法的判断是否构成简单图的方法

第一步

观察度数为奇数的数列是不是偶数个,例如2,3,3,1这个数列的度数为奇数的数有奇数个,不能构成简单图

如果满足进入第二步

第二步

数列中有n个元素,则度数最大值不能超过n-1,例如1,3,这样的数列就无法构成简单图

如果满足进入第三步

第三步

首先将S={d1,d2,d3,d4,...,dn}进行降序排序

然后删除第一个元素,即最大的元素d[i],然后对后面的前d[i]个元素都减去一,以此递归下去

如果最后的数都是零的话,就可以构成简单图,如果出现负数或度数大于剩余点数的个数即无法构成简单图

例子

例如 1 1 1 2 3.

观察度数为奇数的有1,1,1,3 有四个,满足第一步

观察最大度数为3,小于5-1,故满足第二步

将数列降序排列 3 2 1 1 1

删去最大元素3,剩下的前3个元素减一,得到 1 0 0 1

再重新排序

1 1 0 0 

删去最大元素1 剩下的前1个减去一,得到 0 0 0

故都是零向量,所以是简单图

再例如1, 2,3,4,5,5

同理前两步判断这个数列也满足

进行第三步

先排序

5,5,4,3,2,1

删去最大元素5,剩下的前5个元素减去一,得到4,3,2,1,0

排序后 删去最大元素4,剩下的前4个元素减去一, 2,1,0,-1 出现负数,故无法构成简单图

  • 18
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值