AHU 算法详解:原理、实现与应用
1. 什么是 AHU 算法AHU 算法Aho-Hopcroft-Ullman 算法是一种用于判断两棵无根树是否同构的经典算法。该算法由 Alfred V. Aho、John E. Hopcroft 和 Jeffrey D. Ullman 三位计算机科学家在 1974 年提出是图同构问题在树结构上的一个高效解决方案。树同构问题在编译器设计、化学分子结构分析、网络拓扑匹配等领域有着广泛的应用。AHU 算法通过为树的每个节点计算一个唯一的“规范编码”Canonical Encoding使得两棵同构的树具有完全相同的编码从而可以在 O(n) 时间复杂度内完成判断。2. 算法核心思想AHU 算法的核心思想是递归地计算树的“括号表示法”并将其规范化。选定根节点对于无根树需要先确定一个“中心”作为根。通常选择树的重心Centroid或直径的中点作为根以确保编码的唯一性。递归编码从叶子节点开始为每个节点计算其子树的编码。编码规则是将子节点的编码按字典序排序后用括号包裹并拼接。规范化通过排序确保同一节点的不同子节点顺序不会影响最终编码从而得到唯一的规范形式。比较比较两棵树的根节点编码是否完全相同。若相同则两棵树同构否则不同构。3. 算法步骤详解3.1 预处理寻找树的根对于无根树 T执行以下步骤确定根计算树的所有重心。一棵树最多有两个重心。如果只有一个重心则以该重心为根。如果有两个重心则在这两个重心之间添加一个虚拟节点作为新的根原两个重心作为其子节点。3.2 递归编码函数 encode(u)定义函数encode(u)返回以节点 u 为根的子树的标准编码如果 u 是叶子节点返回()。否则对于 u 的每个子节点 v递归计算encode(v)。将所有子节点的编码放入一个列表中按字典序排序。将排序后的编码拼接成一个字符串并在其前后加上括号即( sorted_encodings.join() )。3.3 主算法def ahu_isomorphic(tree1, tree2): # 1. 构建邻接表 adj1 build_adjacency(tree1_edges) adj2 build_adjacency(tree2_edges) # 2. 寻找重心作为根 centroids1 find_centroids(adj1) centroids2 find_centroids(adj2) # 3. 为每棵树生成所有可能的根编码考虑可能有两个重心 encodings1 set() for root in centroids1: encoding encode(root, adj1, parent-1) encodings1.add(encoding) encodings2 set() for root in centroids2: encoding encode(root, adj2, parent-1) encodings2.add(encoding) # 4. 比较编码集合是否有交集 return len(encodings1 encodings2) 04. 时间复杂度与空间复杂度时间复杂度O(n)其中 n 是树的节点数。每个节点被访问一次排序子节点编码的总成本可以通过使用基数排序优化到 O(n)。空间复杂度O(n)用于存储邻接表、递归栈和编码字符串。5. 应用场景编译器设计与代码优化识别语法树的结构等价性。化学信息学判断分子结构图是否同构。网络拓扑分析比较不同网络的连接结构。数据聚类与模式识别将结构相似的数据归类。6. 总结AHU 算法是解决树同构问题的经典且高效的方法。它通过递归计算规范编码将复杂的结构比较转化为字符串比较。理解其重心定根、递归编码和字典序排序的核心步骤是掌握该算法的关键。在实际应用中需要注意处理无根树、多重心等边界情况并可根据具体场景对编码方式进行微调。

相关新闻

Windows 11 25H2安装华为eNSP完整指南与排错

Windows 11 25H2安装华为eNSP完整指南与排错

1. 华为eNSP在Windows 11 25H2环境下的完整安装指南作为一名网络工程师,我最近在Windows 11 25H2系统上安装华为eNSP时遇到了不少坑。经过多次尝试和调试,终于找到了一套稳定可靠的安装方案。本文将详细记录整个安装过程,特别针对25H2版本的系…

2026/8/11 11:35:33 阅读更多 →
LLM工具实战指南:从环境适配到批量任务部署

LLM工具实战指南:从环境适配到批量任务部署

这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来。llmfit 这个项目,从名字看是围绕大语言模型(LLM)做适配或优化的工具,但具体是解决模型微调、推理加速、资源适配还是格式转换,需要先…

2026/8/8 16:12:22 阅读更多 →
AI学术写作工具:六维提升研究效率与质量

AI学术写作工具:六维提升研究效率与质量

1. 项目概述:AI如何重塑学术写作体验去年指导本科生论文时,我发现一个有趣现象:90%的学生把80%时间花在格式调整、文献引用和语言润色上,真正用于思考研究问题的时间不足20%。这种现象催生了"书匠策AI"的雏形——一个专…

2026/8/6 7:39:07 阅读更多 →

最新新闻

3 个被低估的合同相对方风险,正在悄悄拖垮回款

3 个被低估的合同相对方风险,正在悄悄拖垮回款

一、合同签了,风险才刚开始 很多企业把"合同签完"当成风险的终点,其实恰恰相反。签约对象是谁、对方还在不在经营、签字的人到底有没有权限,这些隐患往往在回款吃紧时才暴露。对中小企业来说,一笔坏账可能吞掉一整季利润…

2026/8/11 17:50:22 阅读更多 →
训练预算有限:先缩实验空间,还是先换算力

训练预算有限:先缩实验空间,还是先换算力

训练预算有限:先缩实验空间,还是先换算力文中的事故链路和数值均为说明性场景,不对应特定线上事件;上线标准应按实际压测和业务约束确定。在卡资源有限的环境里做模型训练,最大的敌人往往不是算法本身,而是…

2026/8/11 17:50:22 阅读更多 →
Browser-Use:3分钟学会让AI成为你的网页自动化助手

Browser-Use:3分钟学会让AI成为你的网页自动化助手

Browser-Use:3分钟学会让AI成为你的网页自动化助手 【免费下载链接】browser-use 🌐 Make websites accessible for AI agents. Automate tasks online with ease. 项目地址: https://gitcode.com/GitHub_Trending/br/browser-use 还在为重复的网…

2026/8/11 17:50:22 阅读更多 →
Open Claw:开源机械爪如何重塑机器人交互方式

Open Claw:开源机械爪如何重塑机器人交互方式

一个开源的机械爪设计项目是Open Claw, 其向着机器人领域去提供一个低成本、可定制化的末端执行器解决办法。自从该项目发布了以后, 在机器人爱好者、教育机构以及中小型研发团队当中引发了广泛的关注。 机械爪是机器人系统核心组件当中的一个, 它有着抓取物件的这种重要作用, …

2026/8/11 17:50:22 阅读更多 →
glfw-rs核心功能解析:从窗口管理到事件处理的终极指南

glfw-rs核心功能解析:从窗口管理到事件处理的终极指南

glfw-rs核心功能解析:从窗口管理到事件处理的终极指南 【免费下载链接】glfw-rs GLFW3 bindings and idiomatic wrapper for Rust. 项目地址: https://gitcode.com/gh_mirrors/gl/glfw-rs glfw-rs是GLFW3的Rust绑定和惯用包装器,为开发者提供了创…

2026/8/11 17:50:19 阅读更多 →
基于Kimi K3与RTX 3090的本地实时语音对话系统构建指南

基于Kimi K3与RTX 3090的本地实时语音对话系统构建指南

最近在B站AI创造公开赛上,一个名为“良子 峰哥”的实时语音唠嗑系统火了。它不是什么大厂产品,而是一位开发者用一张消费级RTX 3090显卡,结合月之暗面推出的Kimi K3模型,自己捣鼓出来的。这个项目最吸引人的地方在于,…

2026/8/11 17:49:17 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →