1、复杂网络的连通性
1.1、无向网络中的巨片
首先考虑地球上所有人类组成的社会网络的连通性;很显然整个网络是不连通的,因为只要有一个人没有朋友或者说只要有一小群人没有除了这群人之外的朋友那么整个网络就不连通。
由此可见,对于大规模网络来说,连通性非常脆弱,只要单个节点或者小部分节点的行为都有可能破坏连通性。
我们可以看出大规模复杂网络可能会出现一个大的连通片,这个连通片包含整个网络中的大部分节点,那么称这个连通片为巨片
1.2、有向网络中的蝴蝶结结构
1、强连通核(Strongly Connected Core,SCC):也成为强连通巨片,位于网络中心。SCC中任意两个节点之间都是强连通的,即存在从任意节点到另一节点的有向路径。
2、入部(IN):
3、出部(OUT):
4、卷须(Tendrils):
5、管子(Tube):
2、节点的度与网络稀疏性
2.1、 度与平均度
度(Degree)是刻画单个节点属性的最简单而又最重要的概念之一。
无向网络中节点 i 的度定义为与节点 i 直接相连的边的数目。
网络中所有节点的度的平均值成为网络的平均度(average degree),记为 <k> 。
import networkx as nx
#生成一个n=1000,起始节点为3的BA无标度网络
G = nx.random_graphs.barabasi_albert_graph(1000,3)
#返回某个节点的度
G.degree(0)
#返回所有节点的度
G.degree()
#返回图中所有节点的度分布序列(从1至最大度的出现频次)
nx.degree_histogram(G)
#可返回单个节点的度,也可返回所有节点的度
def degree(G, nbunch=None, weight=None):
"""Returns a degree view of single node or of nbunch of nodes.
If nbunch is omitted, then return degrees of *all* nodes.
"""
return G.degree(nbunch, weight)
#返回图中所有节点的度分布序列(从1至最大度的出现频次)
def degree_histogram(G):
"""Returns a list of the frequency of each degree value.
Parameters
----------
G : Networkx graph
A graph
Returns
-------
hist : list
A list of frequencies of degrees.
The degree values are the index in the list.
Notes
-----
Note: the bins are width one, hence len(list) can be large
(Order(number_of_edges))
"""
counts = Counter(d for n, d in G.degree())
return [counts.get(i, 0) for i in range(max(counts) + 1)]
2.2、出度与入度
有向网络中节点的度包括出度和入度
节点 i 的出度是指从节点 i 指向其他节点的边的数目
'''
通过邻接矩阵来表示
'''
i的出度
k_out = 0
i = 任意节点数
for j in num_of_node:
if a[i][j] != 0:
k_out = a[i][j] + 1
节点 i 的入度是指从其他节点指向节点 i 的边的数目
'''
通过邻接矩阵来表示
'''
i的入度
k_in = 0
i = 任意节点数
for j in num_of_node:
if a[j][i] != 0:
k_out = a[j][i] + 1
2.3、网络稀疏性与稠密化
一个包含N个节点的网络的密度(Density)ρ定义为网络中实际存在的边数M与最大可能边数之比。对于无向网络,我们有:
ρ
=
M
1
2
N
(
N
−
1
)
ρ=\frac{M}{\frac{1}{2}N(N - 1)}
ρ=21N(N−1)M
平均度和网络密度之间的关系:
<
k
>
=
2
M
N
=
(
N
−
1
)
ρ
≈
N
ρ
<k> = \frac{2M}{N} = (N - 1)ρ ≈ Nρ
<k>=N2M=(N−1)ρ≈Nρ
将t时刻的网络中的节点数和边数分别记为N(t),M(t),如果两者呈线性比例关系,即N(t) ~ M(t),