【图分析】逼近(Approximation)

本文深入探讨了图论中的核心概念,包括图的连通性(K-Components)、最大分团(Clique)、支配集(Dominating Set)以及著名的旅行商问题(Travelling Salesman Problem)。同时介绍了群聚系数、树宽、匹配等重要指标,展示了图在网络分析、社交网络和优化问题中的广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Connectivity

计算图 G G G的连通性,或者是 G G G中点与点之间的连通性。

K-Components

K - 连通分量,计算图 G G G中存在的1-连通分量,2-连通分量,…,k-连通分量。

{"1": [["p6", "p7", "p5", "p2", "p4", "p3", "p1"]], "2": [["p6", "p7", "p5"], ["p3", "p2", "p1", "p4"]]}

Clique,apx-maximum independent set

独立集,图 G G G中任意两个顶点都不相连的顶点集合,例如二分图:
在这里插入图片描述
{1,2,3}、{4,5,6}等等,而{1,2}也是独立集,但不是最大的独立集。

Clique,max clique

最大分团指的是图 G = ( V , E ) G=(V,E) G=(V,E),的最大子集 C C C,这个子集中的每个节点都是两两相连的(完全图)。

Clustering,clustering_coefficient

群聚系数用来描述图中的顶点之间集结成团的程度的系数。也就是一个点的相邻点之间相互连接的程度。

global clustering coefficient(全局集聚系数)
假设有图 G = ( V , E ) G=(V,E) G=(V,E) L ( i ) L(i) L(i)表示与节点 v i v_i vi相连的边的集合: L ( i ) = { v j : e i j ∈ E ∩ e j i ∈ E } L(i)=\{v_j:e_{ij}\in E\cap e_{ji}\in E \} L(i)={vj:eijEejiE} L ( i ) L(i) L(i)里边的数量就是节点 v i v_i vi的度,记作 k i : k i = ∣ L ( i ) ∣ k_i:k_i=|L(i)| ki:ki=L(i)
如果用 C t o t a l ( G ) C_{total}(G) Ctotal(G)表示全局集聚系数, G Δ G_\Delta GΔ表示闭三元组的个数, G ∧ G_\wedge G表示开三元组的个数(一个三元组是其中有两条(开三元组)或三条(闭三元组)无向边连接的三个结点)。全局集聚系数是所有三元组(包括开和闭的)中封闭三元组数目的比例:
C t o t a l ( G ) = 3 ∗ G Δ 3 ∗ G Δ + 2 ∗ G ∧ C_{total}(G)=\frac{3*G_\Delta}{3*G_\Delta+2*G_\wedge} Ctotal(G)=3GΔ+2G3GΔ

local clustering coefficient(局部集聚系数)
图中一个节点的局部集聚系数表示它的相邻节点形成一个团(完全图)的紧密程度。结点 v i v_i vi的局部集聚系数 C i C_i Ci是它的相邻结点之间的连接数与它们所有可能存在连接的数量的比值。有向图的局部集聚系数为
C i = ∣ { e j k } ∣ k i ( k i − 1 ) , v j , v k ∈ N i , e j k ∈ E C_i=\frac{|\{e_{jk}\}|}{k_i(k_i-1)},v_j,v_k\in N_i,e_{jk}\in E Ci=ki(ki1){ejk},vj,vkNi,ejkE
其中, N i N_i Ni是节点 v i v_i vi的相邻节点。无向图的局部集聚系数为
C i = 2 ∣ { e j k } ∣ k i ( k i − 1 ) , v j , v k ∈ N i , e j k ∈ E C_i=\frac{2|\{e_{jk}\}|}{k_i(k_i-1)},v_j,v_k\in N_i,e_{jk}\in E Ci=ki(ki1)2∣{ejk},vj,vkNi,ejkE
average clustering coefficient(平均集聚系数)
定义为所有节点的局部集聚系数的均值
C ‾ = 1 n ∑ i = 1 n C i \overline{C}=\frac{1}{n}\displaystyle\sum_{i=1}^{n}C_i C=n1i=1nCi
有更高平均集聚系数的 G G G有着模块结构,在不同节点间有更小的平均距离。

Diameter

可以使用2-sweep算法计算无向图的直径,而使用2-dSweep算法计算有向图的直径。

Dominating Set

点支配集(dominating set)
假设 G = ( V , E ) G=(V,E) G=(V,E)是一个简单无向图, S ⊆ V , S ≠ ∅ S\subseteq V,S\neq\varnothing SV,S=,如果 ∀ v ∈ V − S \forall v\in V-S vVS S S S都有至少一个节点与 v v v相邻,则称 S S S G G G的支配集(dominating set)

边支配集(edge dominating set)
假设 G = ( V , E ) G=(V,E) G=(V,E)是一个简单无向图, F ⊆ E , F ≠ ∅ F\subseteq E,F\neq\varnothing FE,F=,如果 ∀ e ∈ E − F \forall e\in E-F eEF F F F都有至少一条边的节点与 e e e的节点重合。则称 F F F G G G的边支配集(edge dominating set)

Matching

minimum maximal matching
在一个无向图 G G G中,找到一个边集 S S S,这个边集拥有最少的边,这些边能够覆盖 G G G中尽可能多的节点。这些边不会共有某个节点。
在这里插入图片描述

Ramsey

待补充

Steiner Tree

metric closure
metric closure(度量闭包)是关于 G G G的一个完全图(每个节点都与其他节点相连),这个图的每一条边的权重都由原图 G G G的权重计算得到(networkx里是weight属性)。
如下原数据

{
  "node_title": ["id","name","age"],
  "node_title_type": ["string","string","string"],
  "nodes": [
    ["p1","Tayler","32"],
    ["p2","Marco","31"],
    ["p3","Mike","30"],
    ["p4","Lily","26"],
    ["p5","Andy","24"],
    ["p6","Anne","24"],
    ["p7","Ardy","24"],
    ["p8","Andis","24"]
  ],
  "link_title": ["src","dst","name","weight","sdate","edate"],
  "link_title_type": ["string","string","int","string","date","date"],
  "links": [
    ["p1","p2","friend",30,"2010-08-09","2021-08-09"],
    ["p1","p3","friend",25,"2010-08-09","2021-08-09"],
    ["p2","p4","friend",20,"2010-08-09","2021-08-09"],
    ["p4","p5","friend",36,"2010-08-09","2021-08-09"],
    ["p3","p4","friend",40,"2010-08-09","2021-08-09"],
    ["p5","p6","friend",40,"2010-08-09","2021-08-09"],
    ["p6","p7","friend",40,"2010-08-09","2021-08-09"],
    ["p5","p7","friend",40,"2010-08-09","2021-08-09"],
    ["p6","p8","friend",40,"2010-08-09","2021-08-09"]
  ]
}

计算得到的完成图的边的值为:

{
    "p1":{
        "p4":{
            "distance":50,
            "path":["p1","p2","p4"]
        },
        "p2":{
            "distance":30,
            "path":["p1","p2"]
        },
   
        ...............
    }
}

从结果来看,p1和p4之间的边的权重(distance)由原图 G G G ( p 1 , p 2 ) (p1,p2) (p1,p2)的权重 w p 1 p 2 w_{p1p2} wp1p2 ( p 2 , p 4 ) (p2,p4) (p2,p4)的权重 w p 2 p 4 w_{p2p4} wp2p4相加得到。

steiner tree

最小斯坦纳树(the minimum Steiner tree)是图 G G G中的一棵树,这棵树覆盖了指定的一些点(一般作为参数传入,称为terminal nodes),并且这棵树覆盖的边的权重和最小。

Traveling Salesman

Travelling Salesman Problem(TSP)

TSP问题是希望从图 G G G中寻找一条路径,salesman通过这条路径行走可以经过 G G G中的所有节点。路径需要满足以下条件:
(1)路径的距离最短。
(2)这条路径起始点和终点是同一个节点。
(3)salesman在行走时只会经过一次节点。
求解TSP问题有四种方法,christofides,greedy_tsp,simulated_annealing_tsp,threshold_accepting_tsp。

christofides 算法
在这里插入图片描述

greedy_tsp算法
greedy指的是贪心算法(greedy algorithm),该算法是指:在对问题求解时,总是做出当前情况下的最好选择。这种最好的选择一般都是局部最优解,不具备后效性,针对TSP问题,贪心算法的求解过程为:
(1)从某一个城市开始,每次选择一个城市,直到走完所有的城市。
(2)每次在选择下一个城市的时候,只考虑当前情况,保证当前经过的路径总距离最小。
假设城市使用数字编号来表示: 1 , 2... , N 1,2...,N 1,2...,N,任何两个城市的距离记录在数组 d [ i , j ] d[i,j] d[i,j]中。依次访问过的城市编号被记录在 s [ 1 ] , s [ 2 ] , . . . , s [ N ] s[1],s[2],...,s[N] s[1],s[2],...,s[N]中,即第 i i i次访问的城市记录在 s [ i ] s[i] s[i]中。
算法的伪代码如下:

(1)s[1]=1
(2)sum=0
(3)initialize the distance array d[i,j]
(4)i=2
(5)search the nearest city j(unvisited) to s[i-1],get d[i,j]
(6)sum = sum + d[i,j]
(7)s[i]=j
(8)i=i+1
(9) if i<=N,goto(5),else,goto(10)
(10)print s[N]
(11)print sum

simulated_annealing_tsp算法
待补充

threshold_accepting_tsp算法
待补充

Treewidth

图的树分解及树宽
G ( V , E ) G(V,E) G(V,E)是一个无向图,则图 G G G的树分解由树 T T T T T T的每一个节点 t t t关联的子集 X t ⊆ V X_t\subseteq V XtV构成(此时可称这些子集 X t X_t Xt是树分解的片段)。树 T T T和片段集 { X t , t ∈ T } \{X_t,t\in T\} {Xt,tT}满足以下3个条件:

(1) ⋃ ( X t , t ∈ T ) = V \bigcup (X_t,t\in T)=V (Xt,tT)=V,即全部片段集 X t X_t Xt中包含的节点涵盖了图 G G G的所有节点,或者说图 G G G的每个节点至少属于某一个片段 X t X_t Xt
(2)对图 G G G的每一条边 e ∈ E e\in E eE,至少存在一个片段 X t X_t Xt,包含 e e e的两个端点。
(3)若 t 1 , t 2 , t 3 t_1,t_2,t_3 t1,t2,t3是树 T T T的3个节点,其中 t 2 t_2 t2 t 1 t_1 t1 t 3 t_3 t3的路径上,那么,若 G G G的节点 v v v属于 X t 1 X_{t1} Xt1 X t 3 X_{t3} Xt3,则 v v v一定属于 X t 2 X_{t2} Xt2

树分解的宽度等于 m a x ( ∣ X t ∣ − 1 , t ∈ T ) max(|X_t|-1,t\in T) max(Xt1,tT)。图 G G G的树宽就是 G G G的最小树分解的宽度,即在图 G G G的所有树分解中,具有最小宽度的树分解的宽度称为图 G G G的树宽。

Vertex Cover

待补充

Max Cut

待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值