要实现Barabasi-Albert生成器,可以按照以下步骤进行:
import networkx as nx
import random
def BarabasiAlbertGenerator(n, m):
# 创建一个空图
G = nx.Graph()
# 添加初始节点
G.add_node(0)
# 初始化每个节点的度数
degrees = [0]
# 从节点1开始逐个添加节点
for i in range(1, n):
# 添加节点i
G.add_node(i)
# 选择m个节点作为节点i的邻居
neighbors = random.choices(list(G.nodes()), k=m)
# 添加节点i与邻居节点之间的边
for neighbor in neighbors:
G.add_edge(i, neighbor)
# 更新节点i的度数和所有节点的度数
degrees.append(m)
for neighbor in neighbors:
degrees[neighbor] += 1
return G
G = BarabasiAlbertGenerator(100, 3)
这个示例代码可以生成一个包含100个节点的Barabasi-Albert图,每个新节点连接到3个已经存在的节点。你可以根据需要调整参数n和m来生成不同大小和结构的图。