You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于NetworkX实现Laakso图的递归构造技术问询

用NetworkX递归构造Laakso图$L_k$的实现方案

核心思路

递归构造的关键是避免节点重名,每条边替换为4环时,必须为中间节点生成唯一标识。这里采用嵌套元组作为节点名称,元组包含该节点所属的父边信息,确保不同替换分支的节点不会冲突。

实现代码

import networkx as nx

def build_laakso_graph(k):
    # 基线情况:L1,仅两个节点一条边
    if k == 1:
        G = nx.Graph()
        G.add_edge(0, 1)
        return G
    
    # 递归获取上一级Laakso图
    prev_graph = build_laakso_graph(k - 1)
    new_graph = nx.Graph()
    
    # 遍历上一级图的所有边,替换为标准4环
    for u, v in prev_graph.edges():
        # 生成当前边对应的唯一中间节点
        mid1 = (u, v, "mid1")
        mid2 = (u, v, "mid2")
        
        # 添加4环的四条边(构成u-mid1-v-mid2-u的环结构)
        new_graph.add_edges_from([
            (u, mid1),
            (mid1, v),
            (v, mid2),
            (mid2, u)
        ])
    
    return new_graph

关键细节说明

  • 节点唯一性保证:用(u, v, "mid1")这类嵌套元组命名中间节点,元组包含该节点所替换的边的两个端点,确保递归过程中每个节点的标识都是唯一的,不会和其他分支的节点重名。
  • 递归替换逻辑:从L1开始,每一层递归都将上一级图的每条边替换为4环结构,严格遵循Laakso图的定义。
  • NetworkX自动节点管理:NetworkX在添加边时会自动将不存在的节点加入图中,无需手动创建原节点u、v。

测试与可视化

可以用以下代码生成并可视化L3:

import matplotlib.pyplot as plt

# 构造L3
laakso_l3 = build_laakso_graph(3)
# 绘制图形(关闭标签避免杂乱)
nx.draw(laakso_l3, with_labels=False, node_size=10)
plt.show()

内容的提问来源于stack exchange,提问作者pyridoxal_trigeminus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:35:10