离散数学——通俗易懂的描述:可图化,可简单图画

离散数学——通俗易懂的描述:可图化,可简单图画看不懂的话就接看例子理解 然后下一张图片有我总结的步骤 按照步骤会判断就行

大家好,欢迎来到IT知识分享网。

一.基础知识部分

1可图化与可简单图画的定义

离散数学——通俗易懂的描述:可图化,可简单图画

2.判断可图化的充要条件:

其实简单一句话就是:所有度数总和为偶数,就是可图化的,反之也成立

如果还不理解就直接看例子

离散数学——通俗易懂的描述:可图化,可简单图画

3.判断可简单图化的充要条件(总共有两种办法:Havel定理和埃尔德什定理):

(1)Havel定理

看不懂的话就接看例子理解,然后下一张图片有我总结的步骤,按照步骤会判断就行

离散数学——通俗易懂的描述:可图化,可简单图画

接下来是一些例题

步骤:(1)先判断度数之和是否为偶数,即判断是否可图化

           (2)使用Havel定理,即判断是否可简单图化

               注意:使用定理过程中,若出现 1.其中一个点度数为负数  or   2.最大度数>剩下的点数

                          则可判断不可简单图画

离散数学——通俗易懂的描述:可图化,可简单图画离散数学——通俗易懂的描述:可图化,可简单图画

(2)埃尔德什定理

看不懂的话就接看例子理解,然后下一张图片有我总结的步骤,按照步骤会判断就行

离散数学——通俗易懂的描述:可图化,可简单图画

接下来是一些例题

步骤:(1)判断 最大度数 小于等于 n-1?

                     判断 最小度数 大于等于 0?

           (2)判断度数之和是否为偶数,即判断是否可图化

           (3)使用埃尔德什定理,即判断是否可简单图化

离散数学——通俗易懂的描述:可图化,可简单图画

红色笔是步骤一;绿色笔是第二步;黄色笔是第三步

离散数学——通俗易懂的描述:可图化,可简单图画离散数学——通俗易懂的描述:可图化,可简单图画离散数学——通俗易懂的描述:可图化,可简单图画离散数学——通俗易懂的描述:可图化,可简单图画离散数学——通俗易懂的描述:可图化,可简单图画

二.代码实现

1.Havel定理(解析都在注释里面了,只要看懂上面内容就肯定看得懂代码)

bool Havel_Hakimi(int arr[]){ for(int i=0; i<n-1; ++i) { sort(arr+i,arr+n);// 从第i个元素开始进行排序 if(i+arr[i] > n-1) return false;//若第i个元素+arr[i]的值超过n-1,那么不可简单图化 for(int j=i+1; j<=i+arr[i] ; ++j)//如果没有超过n-1,进入循环 { --arr[j]; if(arr[j] < 0) return false; //若出现负数,那么也不可简单化 } } if(arr[n-1]!=0) return false; //若到最后,最小度数不等于0,也不可简单化 return true; 

2.埃尔德什定理(用c语言进行测试,总是判断不对,我就用的python)

def is_graphical(sequence): max_degree = max(sequence) min_degree = min(sequence) total_sum = sum(sequence) n = len(sequence) if max_degree > n - 1 or min_degree < 0 or total_sum % 2 != 0: return False # 不可图化 return True # 可图化 def is_simple_graphical(sequence): sorted_sequence = sorted(sequence, reverse=True) n = len(sorted_sequence) prefix_sum = [0] * n for i in range(n): prefix_sum[i] = prefix_sum[i - 1] + sorted_sequence[i] if sum(sorted_sequence) % 2 != 0: return False # 序列之和为奇数,不可简单图化 while True: if sorted_sequence[0] < 0 or sorted_sequence[0] >= n: return False # 最大度数不在有效范围内,不可简单图化 for i in range(1, sorted_sequence[0] + 1): sorted_sequence[i] -= 1 sorted_sequence[0] = 0 sorted_sequence.sort(reverse=True) count = sum(1 for degree in sorted_sequence if degree == 0) if count == n: return True # 所有度数都为 0,可简单图化 if sorted_sequence[0] < 0: return False # 存在负数,不可简单图化 if __name__ == "__main__": sequence = list(map(int, input("请输入非负整数序列,以空格分隔(例如:2 2 1 1): ").split())) if not sequence: print("输入错误!") else: if is_graphical(sequence): print("非负整数序列是可图化的。") if is_simple_graphical(sequence): print("非负整数序列是可简单图化的。") else: print("非负整数序列不是可简单图化的。") else: print("非负整数序列不是可图化的。") 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113611.html

(0)
上一篇 2025-12-13 14:20
下一篇 2025-12-13 14:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信