Day02 图理论基础笔记2

文章探讨了图论中的基本概念,如最短路径(无权和有权)、直径、子图、连通分量与连通图,以及聚类系数(包括平均聚类系数)和接近中心性(closenesscentrality)。通过空手道俱乐部图实例,展示了如何计算这些指标。
摘要由CSDN通过智能技术生成

图的性质

距离(distance) :两点之间最短路径。

最短路径

无权图:一个顶点到另一个顶点所经过的边数最少的那条路径。

有权图:带权长度最短,所经过的边的权值之和为该路径的带权路径长度。

直径(diameter) :所有节点对之间的最短路径的最大值。

子图(subgraph) :节点集和边集分别是某一图的节点集的子集和边集的子集的图。

连通分量(connected component) :无向图的极大连通子图。

连通图(connected graph) :一个图只包含一个连通分量,即其自身 。

聚类系数(Clustering Coefficient):邻域互连紧密度。$C=\frac{1}{N}\sum_i C_i$

网络的聚类系数即平均聚类系数。

案例:求节点的集聚系数的平均值

average_clustering()

import matplotlib.pyplot as plt
import networkx as nx


# 绘制空手道俱乐部图
def draw_karate_club_graph():
    # 创建空手道俱乐部图
    G = nx.karate_club_graph()
    # 显示图的类型
    print(type(G))
    # 绘制图,并显示节点标签
    nx.draw(G, with_labels=True)
    plt.show()
    return G


def average_clustering_coefficient(G):
    # 计算图G的每个节点的聚类系数
    avg_cluster_coef = nx.average_clustering(G)
    # 保留两位小数
    avg_cluster_coef = round(avg_cluster_coef, 2)
    # 返回平均聚类系数
    return avg_cluster_coef


# 调用函数绘制空手道俱乐部图
G = draw_karate_club_graph()

# 计算并打印空手道俱乐部网络的平均度
avg_cluster_coef = average_clustering_coefficient(G)
print("空手道俱乐部网络平均聚类系数:{}".format(avg_cluster_coef))
<class 'networkx.classes.graph.Graph'>
空手道俱乐部网络平均聚类系数:0.57

接近中心性(closeness centrality):该节点与图中所有其他节点之间的最短路径长度之和的倒数

$c(v) = \frac{1}{\sum_{u \neq v}\text{shortest path length between } u \text{ and } v}$

案例:求接近中心度

import matplotlib.pyplot as plt
import networkx as nx


# 绘制空手道俱乐部图
def draw_karate_club_graph():
    # 创建空手道俱乐部图
    G = nx.karate_club_graph()
    # 绘制图,并显示节点标签
    nx.draw(G, with_labels=True)
    plt.show()
    return G


def closeness_centrality(G, node=5):
    path_length_total = 0
    for path in list(nx.single_source_shortest_path(G, node).values())[1:]:
        path_length_total += len(path) - 1

    closeness = 1 / path_length_total
    closeness = round(closeness, 2)

    return closeness


node = 5

# 调用函数绘制空手道俱乐部图
G = draw_karate_club_graph()
closeness = closeness_centrality(G, node=node)
print("接近中心度 {:.2f}".format(closeness))
closeness = nx.closeness_centrality(G, node)
print("接近中心度(归一){:.2f}".format(closeness))
接近中心度 0.01
接近中心度(归一)0.38

  • 27
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值