2021秋季《离散数学》_图的度与同构

省流小助手:

  • 判定度数列可否化为简单无向图,以及由度数列作图

顶点的度数与握手定理

无向图中,称 v i v_i vi作为边的端点的次数之和为 v i v_i vi度数(度),记为 d G ( v i ) d_G(v_i) dG(vi),或简写为 d ( v i ) d(v_i) d(vi).

每个环提供给它的端点2度。

有向图中,

  • v i v_i vi作为边的始点的次数之和为 v i v_i vi出度,记为 d D − ( v i ) d_D^{-}(v_i) dD(vi),或简写为 d − ( v i ) d^-(v_i) d(vi).
  • v i v_i vi作为边的始点的次数之和为 v i v_i vi入度,记为 d D + ( v i ) d_D^{+}(v_i) dD+(vi),或简写为 d + ( v i ) d^+(v_i) d+(vi).
  • 度: d D ( v i ) d_D(v_i) dD(vi),或简写为 d ( v i ) = d − ( v i ) + d + ( v i ) d(v_i)=d^-(v_i)+d^+(v_i) d(vi)=d(vi)+d+(vi).

最大度和最小度

最大度 Δ ( G ) = max ⁡ { d ( v ) ∣ v ∈ V } \Delta(G)=\max \{d(v)|v\in V\} Δ(G)=max{d(v)vV},简写为 Δ \Delta Δ.

最小度 δ ( G ) = min ⁡ { d ( v ) ∣ v ∈ V } \delta(G)=\min\{d(v)|v\in V\} δ(G)=min{d(v)vV},简写为 δ \delta δ.

同理定义最大/小出/入度。

握手定理

G = < V , E > G=<V,E> G=<V,E>为任意一图(有向的或无向的), V = { v 1 , v 2 , ⋯   , v n } V=\{v_1,v_2,\cdots,v_n\} V={v1,v2,,vn},边的条数 ∣ E ∣ = m |E|=m E=m,则
∑ i = 1 n d ( v i ) = 2 m \sum_{i=1}^n d(v_i)=2m i=1nd(vi)=2m

推论

任何图(有向的或无向的)中,度数为奇数的顶点个数是偶数。

有向图

∑ i = 1 n d + ( v i ) = ∑ i = 1 n d − ( v i ) = m \sum_{i=1}^n d^+(v_i)=\sum_{i=1}^n d^-(v_i)=m i=1nd+(vi)=i=1nd(vi)=m

特殊的图

简单图

既无环也无平行边
0 ≤ Δ ( G ) ≤ n − 1 0\leq \Delta(G)\leq n-1 0Δ(G)n1

可简单图化

充要条件
H a v e l {\rm Havel} Havel定理

设非负整数列 d = { d 1 , d 2 , ⋯   , d n } d=\{d_1,d_2,\cdots,d_n\} d={d1,d2,,dn}满足:
d 1 + d 2 + ⋯ + d n ≡ 0 ( m o d    2 ) d_1+d_2+\cdots+d_n\equiv 0 (\mod 2) d1+d2++dn0(mod2)

n − 1 ≥ d 1 ≥ d 2 ≥ ⋯ ≥ d n ≥ 0 n-1\geq d_1\geq d_2\geq\cdots\geq d_n\geq 0 n1d1d2dn0

d d d可简单图化 ⇔ \Leftrightarrow
d ′ = ( d 2 − 1 , d 3 − 1 , ⋯   , d d 1 + 1 − 1 , d d 1 + 2 , ⋯   , d n ) d'=(d_2-1,d_3-1,\cdots ,d_{d_1+1}-1,d_{d_1+2},\cdots,d_n) d=(d21,d31,,dd1+11,dd1+2,,dn)
可简单图化。

在这里插入图片描述

画图

在这里插入图片描述

P . E r d o ¨ s , T . G a l l a i , 1960 {\rm P.Erd\ddot{o}s,T.Gallai,1960} P.Erdo¨s,T.Gallai,1960

设非负整数列 d = { d 1 , d 2 , ⋯   , d n } d=\{d_1,d_2,\cdots,d_n\} d={d1,d2,,dn}满足:
d 1 + d 2 + ⋯ + d n ≡ 0 ( m o d    2 ) d_1+d_2+\cdots+d_n\equiv 0 (\mod 2) d1+d2++dn0(mod2)

n − 1 ≥ d 1 ≥ d 2 ≥ ⋯ ≥ d n ≥ 0 n-1\geq d_1\geq d_2\geq\cdots\geq d_n\geq 0 n1d1d2dn0

d d d可简单图化 ⇔ \Leftrightarrow

r = 1 , 2 , ⋯   , r=1,2,\cdots, r=1,2,,== n − 1 n-1 n1==有
d 1 + d 2 + ⋯ + d r ≤ r ( r − 1 ) + min ⁡ { r , d r + 1 } + min ⁡ { r , d r + 2 } + ⋯ + min ⁡ { r , d n } d_1+d_2+\cdots+d_r\leq r(r-1)+\min\{r,d_{r+1}\}+\min\{r,d_{r+2}\}+\cdots+\min\{r,d_{n}\} d1+d2++drr(r1)+min{r,dr+1}+min{r,dr+2}++min{r,dn}

等价形式

设非负整数列 d = { d 1 , d 2 , ⋯   , d n } d=\{d_1,d_2,\cdots,d_n\} d={d1,d2,,dn}满足:
d 1 + d 2 + ⋯ + d n ≡ 0 ( m o d    2 ) d_1+d_2+\cdots+d_n\equiv 0 (\mod 2) d1+d2++dn0(mod2)
d d d可简单图化 ⇔ \Leftrightarrow

r = 1 , 2 , ⋯   , r=1,2,\cdots, r=1,2,,== n n n==有
d 1 + d 2 + ⋯ + d r ≤ r ( r − 1 ) + min ⁡ { r , d r + 1 } + min ⁡ { r , d r + 2 } + ⋯ + min ⁡ { r , d n } d_1+d_2+\cdots+d_r\leq r(r-1)+\min\{r,d_{r+1}\}+\min\{r,d_{r+2}\}+\cdots+\min\{r,d_{n}\} d1+d2++drr(r1)+min{r,dr+1}+min{r,dr+2}++min{r,dn}

k-正则图

所有顶点的度数都是 k k k

完全图

无向完全图: K n K_n Kn

有向完全图没有符号。

彼得森图

在这里插入图片描述

经常用来举反例(证明不充分/不必要)

r部图

顶点可以被分为 r r r个部分的无向图 V = V 1 ∪ V 2 ∪ ⋯ ∪ V r , V i ∩ V j = ∅ ( i ≠ j ) , E ⊆ i ≠ j = U ( V i & V j ) V=V_1\cup V_2\cup \cdots\cup V_r,V_i\cap V_j=\empty(i\neq j),E\subseteq_{i\neq j}=U(V_i\&V_j) V=V1V2Vr,ViVj=(i=j),Ei=j=U(Vi&Vj),也记作 G = < V 1 , V 2 , ⋯   , V r ; E > G=<V_1,V_2,\cdots, V_r;E> G=<V1,V2,,Vr;E>.

偶图(2部图)

G = < V 1 , V 2 ; E > G=<V_1,V_2;E> G=<V1,V2;E>

条件
  • V = V 1 ∪ V 2 , V 1 ∩ V 2 = ∅ V=V_1\cup V_2,V_1\cap V_2=\empty V=V1V2,V1V2=
  • ∀ e ∈ E , ∣ e ∩ V 1 ∣ = ∣ e ∩ V 2 ∣ = 1 \forall e\in E,|e\cap V_1|=|e\cap V_2|=1 eE,eV1=eV2=1

常给资源分配问题建立模型

完全偶图

K ∣ V 1 ∣ , ∣ V 2 ∣ K_{|V_1|,|V_2|} KV1,V2

容易证明 K ∣ V 1 ∣ , ∣ V 2 ∣ K_{|V_1|,|V_2|} KV1,V2 ∣ V 1 ∣ ∣ V 2 ∣ |V_1||V_2| V1V2条边。

超立方体图

Q n Q_n Qn

  • 2 n 2^n 2n个顶点

  • 将两个 Q n − 1 Q_{n-1} Qn1的对应顶点连接,可得 Q n Q_n Qn

在并行计算和超级计算中运用(处理器和处理器之间的连接)

子图

导出子图

选定顶点后需要带出所有的边/选定边后需要带出所有的顶点

图同构

无向图中,若存在双射 f : V 1 → V 2 f:V_1\rightarrow V_2 f:V1V2,满足 ∀ u , v ∈ V 1 , ( u , v ) ∈ E 1 ↔ ( f ( u ) , f ( v ) ) ∈ E 2 \forall u,v\in V_1,(u,v)\in E_1\leftrightarrow(f(u),f(v))\in E_2 u,vV1,(u,v)E1(f(u),f(v))E2,则称 G 1 , G 2 G_1,G_2 G1,G2同构,记作 G 1 ≅ G 2 G_1\cong G_2 G1G2.

有向图中,若存在双射 f : V 1 → V 2 f:V_1\rightarrow V_2 f:V1V2,满足 ∀ u , v ∈ V 1 , < u , v > ∈ E 1 ↔ < f ( u ) , f ( v ) > ∈ E 2 \forall u,v\in V_1,<u,v>\in E_1\leftrightarrow<f(u),f(v)>\in E_2 u,vV1,<u,v>E1<f(u),f(v)>E2,则称 D 1 , D 2 D_1,D_2 D1,D2同构,记作 D 1 ≅ D 2 D_1\cong D_2 D1D2.

同构的图,其图论性质完全一致。

判定

NAUTY算法是性质非常好的算法

  • 点数、边数、度数列
  • 回路由多少顶点构成
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
离散数学中,同构问题是一个经典难题,目前还没有找到一个高效的通用算法来解决。不过在特定情况下(例如小规模的),可以使用暴力枚举来判断两个是否同构。 以下是一个基于邻接矩阵表示的简单的同构判断程序的 C++ 代码示例: ```c++ #include <iostream> #include <vector> #include <cstring> using namespace std; const int MAXN = 10; // 最大顶点数 int n; // 顶点数 int a[MAXN][MAXN]; // 邻接矩阵 // 判断两个是否同构 bool isomorphism(int p[], int q[], int k) { if (k == n) { // 如果已经枚举完所有的顶点,判断两个是否同构 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (a[p[i]][p[j]] != a[q[i]][q[j]]) { return false; } } } return true; } else { // 枚举顶点的排列方式 for (int i = 0; i < k; i++) { bool flag = true; for (int j = 0; j < k; j++) { if (p[j] == i || q[j] == k - 1) { flag = false; break; } } if (flag) { p[k] = i; q[k] = k - 1; if (isomorphism(p, q, k + 1)) { return true; } } } return false; } } int main() { // 读入的信息 cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; } } // 枚举顶点的排列 int p[MAXN], q[MAXN]; memset(p, 0, sizeof(p)); memset(q, 0, sizeof(q)); if (isomorphism(p, q, 1)) { cout << "两个同构" << endl; } else { cout << "两个同构" << endl; } return 0; } ``` 该程序通过枚举两个的顶点排列方式来判断它们是否同构,时间复杂为 $O(n!)$,只适用于小规模的。在实际应用中,通常需要使用更高效的算法来解决该问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值