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

如何从邻接表与类型谱系构建嵌套邻接表?

如何从邻接表与类型谱系构建嵌套邻接表?

嘿,先给你理清楚目前的基础情况哈:
首先我们有一个普通的图邻接表,结构是这样的:

{
    1: [2, 3, 4],
    2: [5],
    3: [6, 9],
    4: [3],
    5: [3],
    6: [7, 8],
    7: [],
    8: [],
    9: []
}

对应的图结构大概是:节点1连着2、3、4三个节点;节点2只连了5;节点3下面挂着6和9;节点4又连回了3;节点5也连回3;节点6的子节点是7和8;7、8、9都是没子节点的叶子节点。

不过现在每个节点还带着一个「类型谱系(type ancestry)」——看起来你没把这部分的具体内容写完?不过没关系,我给你唠唠核心的解决思路,你套自己的具体类型数据就行:

要把普通邻接表结合类型谱系转成嵌套邻接表,核心就是先靠类型谱系给节点搭好类型层级框架,再把原邻接表的节点连接关系,精准映射到这个类型框架里,同时保留每个节点自身的子节点链路。

我给你举个模拟的例子,假设类型谱系是:节点1属于「根类型A」,节点2、3、4属于「子类型B」,节点5、6属于「子类型C」,7、8、9属于「子类型D」。那最终生成的嵌套邻接表,会先把类型的层级搭起来,再把每个类型下的节点按原邻接表的关系嵌套进去,大概长这样:

{
    "类型A": {
        "节点1": [
            {
                "类型B": {
                    "节点2": [
                        {
                            "类型C": {
                                "节点5": [
                                    {
                                        "类型B": {
                                            "节点3": [
                                                {
                                                    "类型C": {
                                                        "节点6": [
                                                            {
                                                                "类型D": {"节点7": [], "节点8": []}
                                                            }
                                                        ]
                                                    },
                                                    "类型D": {"节点9": []}
                                                }
                                            ]
                                        }
                                    }
                                ]
                            }
                        }
                    ],
                    "节点3": [
                        {
                            "类型C": {
                                "节点6": [
                                    {"类型D": {"节点7": [], "节点8": []}}
                                ]
                            },
                            "类型D": {"节点9": []}
                        }
                    ],
                    "节点4": [
                        {
                            "类型B": {
                                "节点3": [
                                    {
                                        "类型C": {
                                            "节点6": [
                                                {"类型D": {"节点7": [], "节点8": []}}
                                            ]
                                        },
                                        "类型D": {"节点9": []}
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    }
}

具体操作可以拆成这几步来做:

  • 第一步:先把所有节点的类型谱系整理成一个类型路径映射表,比如每个节点对应它从根类型到自身类型的完整路径(比如节点5的路径是「类型A→类型B→类型C」)
  • 第二步:遍历原邻接表的每个节点,先根据它的类型路径,把节点放到对应的类型嵌套结构里
  • 第三步:把原邻接表中这个节点的所有子节点,也按照各自的类型路径,嵌套到当前节点的结构下面,确保类型层级和原有的节点连接关系都不丢
  • 第四步:最后合并一下相同类型的节点组,避免出现重复的类型结构,让整个嵌套表更简洁

如果之后你把具体的类型谱系内容补全,我可以给你更贴合实际的代码实现和细节调整建议哦!

备注:内容来源于stack exchange,提问作者Sachin Hosmani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:40:28