当前位置: 首页 > article >正文

算法基础(十一)—— 递归树如何看懂分治算法的运行时间

1. 定位导航前面已经学习了分治思想分解 → 解决 → 合并分治算法经常可以写成递归式。例如归并排序先把数组拆成左右两半 分别排序左右两半 再合并两个有序数组。它的运行时间可以粗略写成T(n)2T(n/2)n T(n) 2T(n/2) nT(n)2T(n/2)n这里的意思是2T(n/2)两个规模为n/2的子问题 n合并两个有序数组需要线性时间。问题是这个递归式最终是多少递归树就是一种非常直观的分析方法。2. 概念术语术语定义举例递归树把递归调用展开成树状结构根节点是原问题根节点原始问题规模为n的排序问题子节点递归产生的子问题两个规模为n/2的问题层数递归展开的深度每次折半大约log n层每层成本同一层所有节点成本之和归并排序每层约为n叶子节点递归基对应的问题规模为 1 的子数组总成本所有层成本之和n n ... n关键澄清递归树不是执行流程图而是成本分析图。每个节点代表一个子问题的工作量。分析时不能只看树有多深还要看每一层总成本。最后要把所有层的成本加起来。3. 什么是递归树递归树就是把递归式不断展开。比如T(n)2T(n/2)n T(n) 2T(n/2) nT(n)2T(n/2)n可以理解为一个规模 n 的问题 拆成两个规模 n/2 的问题 每个 n/2 又继续拆成两个 n/4 直到规模变成 1递归树的核心用途是把递归调用的总成本拆成一层一层来统计。4. 用递归树分析归并排序归并排序的递归式是T(n)2T(n/2)n T(n) 2T(n/2) nT(n)2T(n/2)n递归树如下观察这棵树第 0 层只有一个问题规模是n。合并成本是n nn第 1 层有两个问题每个规模是n/2。这一层总成本是n/2n/2n n/2 n/2 nn/2n/2n第 2 层有四个问题每个规模是n/4。这一层总成本是4×n/4n 4 \times n/4 n4×n/4n可以发现每一层总成本都是 n。5. 动态推演递归树如何逐层展开下面用动态图看递归树展开过程。展开过程可以理解为根节点表示原问题规模是n第一层拆成两个n/2第二层拆成四个n/4一直拆到规模为 1 的叶子每一层总成本约为n层数约为log n。6. 每层成本如何计算对于归并排序第k层有2k 2^k2k个子问题。每个子问题规模是n2k \frac{n}{2^k}2kn​所以第k层总成本是2k×n2kn 2^k \times \frac{n}{2^k} n2k×2kn​n这就是为什么归并排序每一层总成本都约为n。7. 总成本如何求和既然每层成本都是n那只需要知道有多少层。每次问题规模折半n → n/2 → n/4 → n/8 → ... → 1要折半多少次才能到 1答案大约是log⁡2n \log_2 nlog2​n所以总成本是nnn⋯n n n n \cdots nnnn⋯n一共有约log n层因此T(n)O(nlog⁡n) T(n) O(n \log n)T(n)O(nlogn)这就是递归树分析的核心套路总成本 每层成本 × 层数8. 常见递归式的递归树直觉递归树不仅能分析归并排序还能帮助理解很多递归式。8.1 T(n)T(n/2)1每层只递归到一个子问题每层额外成本是常数。层数是log n所以总成本是O(log⁡n) O(\log n)O(logn)典型例子是二分查找。8.2 T(n)2T(n/2)n每层总成本是n层数是log n。所以总成本是O(nlog⁡n) O(n \log n)O(nlogn)典型例子是归并排序。8.3 T(n)2T(n/2)1每个节点成本是常数但节点数量会越来越多。整棵树节点数大约是O(n) O(n)O(n)所以总成本是O(n) O(n)O(n)8.4 T(n)4T(n/2)n每层子问题数量增长更快。叶子层成本会变得非常大通常最后得到平方级O(n2) O(n^2)O(n2)9. 代码实践打印递归层级成本下面用 Python 模拟归并排序的递归层级成本。defrecursion_tree_cost(n):level0sizen nodes1whilesize1:cost_per_nodesize level_costnodes*cost_per_nodeprint(f第{level}层: f节点数{nodes:4}f单节点规模{size:4}f本层成本{level_cost})ifsize1:breaklevel1nodes*2size//2recursion_tree_cost(16)可能输出第 0 层: 节点数1 单节点规模16 本层成本16 第 1 层: 节点数2 单节点规模8 本层成本16 第 2 层: 节点数4 单节点规模4 本层成本16 第 3 层: 节点数8 单节点规模2 本层成本16 第 4 层: 节点数16 单节点规模1 本层成本16可以看到每层成本都是 16。如果输入规模是 16层数是log⁡2164 \log_2 16 4log2​164算上叶子层总共大约 5 层。所以总成本接近16 × 5这和n log n的直觉是一致的。10. 常见误区误区一只看递归深度递归深度只是层数不是总成本。还要看每一层做多少工作。误区二只看节点数量节点数量多不一定每层成本就大。因为子问题规模也在变小。误区三忘记叶子层成本有些递归式中叶子层可能贡献主要成本。不能随便忽略。误区四层数算错如果问题规模每次折半层数通常是O(log⁡n) O(\log n)O(logn)不是O(n)。11. 现代延伸递归树分析在实际工程里也有很多影子。场景递归树视角归并排序每层合并成本相同二分查找每层只保留一半问题快速排序递归树是否平衡决定性能并行任务拆分任务树的深度和每层负载决定吞吐MapReduce分片处理再汇总类似多层聚合大文件归并多路归并可以看成分层合并分布式查询子查询树决定整体成本比如快速排序如果每次划分都很均匀递归树比较平衡性能通常很好。但如果每次都极端不均匀递归树会退化成链状结构运行时间就会变差。这就是为什么递归树不仅能分析“总成本”也能帮助我们观察算法是否稳定。12. 思考题为什么归并排序每一层总成本都是n为什么问题每次折半时层数是log nT(n)T(n/2)1为什么是O(log n)T(n)2T(n/2)1为什么是O(n)快速排序在极端不平衡时递归树会变成什么形状13. 本篇小结本篇讲清楚了递归树分析方法。核心结论是递归树把递归式展开成层级结构每个节点代表一个子问题的成本每一层的节点成本相加就是这一层的总成本所有层成本相加就是递归算法总成本归并排序的递归式是T(n)2T(n/2)n它每层成本约为n层数约为log n所以总复杂度是O(n log n)。以后看到递归式可以先尝试问三个问题每层有多少个子问题 每个子问题规模是多少 所有层加起来是多少这就是递归树分析的主线。

相关文章:

算法基础(十一)—— 递归树如何看懂分治算法的运行时间

1. 定位导航 前面已经学习了分治思想: 分解 → 解决 → 合并分治算法经常可以写成递归式。 例如归并排序: 先把数组拆成左右两半; 分别排序左右两半; 再合并两个有序数组。它的运行时间可以粗略写成: T(n)2T(n/2)n T(n…...

Home Assistant新手避坑实录:搞定易微联Sonoff插座的devicekey和那些奇怪的Python报错

Home Assistant实战:易微联Sonoff插座接入全流程与疑难解析 第一次打开Home Assistant后台时,那个简洁的界面让我误以为智能家居搭建会像拼乐高一样简单——直到遇见易微联Sonoff插座。这个白色的小方块成了我智能家居之路上的第一块绊脚石,…...

Bluekit AI钓鱼工具包深度解析:40+品牌DOM级复刻+98%2FA绕过率的工业化攻击革命

摘要 2026年4月底,安全厂商Varonis曝光了一款名为Bluekit的AI驱动全链路工业化钓鱼工具包,它标志着网络钓鱼攻击正式进入"零门槛、高成功率、大规模量产"的AI工业化时代。本文将从技术原理、攻击流程、反检测机制三个维度深度解析Bluekit的核…...

All-in-One Telegram机器人:加密货币监控与多功能集成部署指南

1. 项目概述 如果你和我一样,是个喜欢折腾各种效率工具,同时又对加密货币市场保持关注的玩家,那你肯定也经历过这样的场景:手机里塞满了各种功能的机器人——一个用来监控币价,一个用来下载视频,一个用来处…...

基于Ubuntu与Docker构建私有化文档协同平台:DzzOffice集成OnlyOffice实战

1. 为什么需要私有化文档协同平台 最近几年,越来越多的企业开始重视数据安全和隐私保护。我接触过不少中小企业客户,他们最头疼的问题就是:既想要像Google Docs那样的实时协作体验,又担心把商业文档存在第三方云平台的风险。这就是…...

终极指南:如何使用Chrome插件markdownReader提升Markdown阅读体验

终极指南:如何使用Chrome插件markdownReader提升Markdown阅读体验 【免费下载链接】markdownReader markdownReader is a extention for chrome, used for reading markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownReader 还在为浏览器…...

如何利用TortoiseSVN高效生成分支对比与历史变更的差异报告

1. TortoiseSVN简介与差异报告的价值 版本控制系统就像代码的时光机,它能完整记录每次修改的"快照"。我在团队协作中深刻体会到,没有比清晰的变更记录更能提高代码审查效率的工具了。TortoiseSVN作为Subversion的Windows客户端,最…...

基于Python的分布式抖音内容下载引擎:架构解析与技术实现

基于Python的分布式抖音内容下载引擎:架构解析与技术实现 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

高版本MATLAB机器人工具箱plot/teach视图兼容性修复实战

1. 问题现象与背景分析 最近在MATLAB 2019b上使用机器人工具箱(Robotics Toolbox)时遇到了一个奇怪的问题。当我像往常一样调用robot.plot()或者robot.teach()函数时,控制台突然报错:"索引超出数组元素数目(4)"。这个错…...

OpenCV和numpy版本打架?一个pip命令同时安装opencv-python和contrib的避坑实践

OpenCV与NumPy版本冲突全攻略:精准配对安装与兼容性验证 当你兴致勃勃地准备开始一个计算机视觉项目,却在导入OpenCV时遭遇numpy.core.multiarray failed to import这样的错误提示,那种挫败感我深有体会。这种问题通常发生在Python数据科学和…...

政府AI决策透明度如何影响公众信任?实证研究揭示关键机制

1. 项目概述:当算法成为“看不见的法官”在公共服务的数字化转型浪潮中,人工智能(AI)正从辅助工具演变为核心决策者。想象一下这样的场景:你提交了一份社会福利申请,原本需要数周的人工审核,现在…...

直面2026检测算法:英文论文降AI实战,3款工具深度避坑盘点

赶稿季来临,英文长稿的AI率到底该怎么降?不少同学愁的头都要秃了,不要再一个词一个词的扣了,这不仅慢,还会把好好的学术英语改得支离破碎。 坦率的讲,真正聪明的降ai,绝对不是机械替换&#xf…...

如何快速安装HS2汉化补丁:完整游戏优化指南

如何快速安装HS2汉化补丁:完整游戏优化指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF Patch是HoneySelect2玩家的终极解决方案&#xf…...

FastbootEnhance:Windows平台终极Android刷机工具箱完整指南

FastbootEnhance:Windows平台终极Android刷机工具箱完整指南 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 在Android设备刷机和定制…...

别再硬编码数据了!用QAbstractTableModel+QTableView打造你的第一个Qt桌面表格应用(附完整源码)

从零构建Qt桌面表格应用:实战学生信息管理系统 在桌面应用开发领域,数据展示与交互一直是核心需求。无论是企业内部的员工管理系统,还是学校里的成绩统计工具,一个高效、美观的表格界面往往能极大提升工作效率。对于C开发者而言&a…...

如何一站式破解Widevine DRM加密视频:智能解密工具完全指南

如何一站式破解Widevine DRM加密视频:智能解密工具完全指南 【免费下载链接】video_decrypter Decrypt video from a streaming site with MPEG-DASH Widevine DRM encryption. 项目地址: https://gitcode.com/gh_mirrors/vi/video_decrypter 还在为付费视频…...

3步告别CAD重复劳动:Python自动化绘图终极指南

3步告别CAD重复劳动:Python自动化绘图终极指南 【免费下载链接】pyautocad AutoCAD Automation for Python ⛺ 项目地址: https://gitcode.com/gh_mirrors/py/pyautocad 还在为AutoCAD中那些重复、机械的绘图任务感到疲惫吗?每天花费数小时手动绘…...

SteamCleaner技术架构深度解析:多平台游戏缓存清理系统的设计哲学与实践

SteamCleaner技术架构深度解析:多平台游戏缓存清理系统的设计哲学与实践 【免费下载链接】SteamCleaner :us: A PC utility for restoring disk space from various game clients like Origin, Steam, Uplay, Battle.net, GoG and Nexon :us: 项目地址: https://g…...

别再只盯着Modbus了!聊聊MBUS总线在智慧水务中的那些坑与最佳实践

MBUS总线在智慧水务中的实战指南:从协议解析到避坑实践 当智慧水务项目进入实施阶段,技术选型团队往往会陷入协议选择的困境。Modbus以其通用性成为首选,LoRa凭借无线优势占据一席之地,而MBUS(Meter-Bus)这…...

收藏!小白也能入局:2026年高薪AI大模型应用开发工程师详解

2026年AI行业重心转向大模型应用开发,AI岗位数量激增,成为企业刚需。AI大模型应用开发工程师通过二次开发,将现成大模型转化为实用产品,如智能客服、知识库问答等。该岗位薪资高、需求旺,技能门槛相对较低,…...

AI编程助手上下文压缩引擎:降低Token成本60-99%的智能解决方案

1. 项目概述:一个为AI编程工具设计的上下文压缩引擎如果你每天都在用Cursor、Claude Code或者GitHub Copilot这类AI编程助手,那你肯定对“上下文窗口”和“Token消耗”这两个词不陌生。每次你让AI助手“看看这个文件”、“运行一下git status”或者“检查…...

BetterNCM安装器:3分钟解锁网易云音乐隐藏功能

BetterNCM安装器:3分钟解锁网易云音乐隐藏功能 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐PC版功能单一而烦恼?BetterNCM安装器就是你需要…...

CTFshow F5杯 逆向与隐写实战解析 超详细

1. CTFshow F5杯逆向与隐写技术全景解析 去年参加F5杯时,我对着那道LSB隐写题折腾到凌晨三点。当终于从图片噪点中提取出flag那一刻,突然理解了什么叫做"数字世界的考古学"。逆向工程和隐写术就像侦探破案,需要同时具备技术功底和发…...

娱乐圈天降紫微星承载使命,海棠山铁哥扛起原创影视复兴大旗

一、乱世先声每一个时代的乱象,都需要一位天命者终结。 每一次行业的沉沦,都需要一束紫微星光破暗。当下影视行业,早已偏离创作初心,走入本末倒置的绝境。 翻拍泛滥成灾IP套皮横行情怀反复透支流水线作品扎堆 资本只求快速变现&am…...

神经渲染新范式:体素网格技术全解析与实战指南

神经渲染新范式:体素网格技术全解析与实战指南 引言 在追求极致真实感与实时交互的3D数字世界中,神经渲染技术正掀起一场革命。其中,神经体素网格作为神经辐射场(NeRF)与显式体素表示融合的产物,以其在高…...

Visual C++ 运行库全家桶:一键解决Windows软件运行问题的终极方案

Visual C 运行库全家桶:一键解决Windows软件运行问题的终极方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 还在为"应用程序无法启动"…...

Codeg:统一管理多AI编码助手,打造企业级远程开发工作空间

1. 项目概述:Codeg,一个企业级的多智能体编码工作空间如果你和我一样,每天的工作流里同时开着Claude Code、Codex CLI、OpenCode等好几个AI编码助手,在终端、IDE和浏览器之间来回切换,只为查看不同智能体的对话记录、管…...

深入解析:NRF24L01如何“伪装”成蓝牙设备?STM32实战代码拆解

深入解析:NRF24L01如何“伪装”成蓝牙设备?STM32实战代码拆解 在物联网设备爆炸式增长的今天,2.4GHz频段已成为无线通信的主战场。NRF24L01作为一款经典的射频芯片,以其低廉的价格和稳定的性能赢得了大量开发者的青睐。而蓝牙技术…...

DDrawCompat完整教程:Windows 11上经典游戏DirectDraw兼容性修复终极指南

DDrawCompat完整教程:Windows 11上经典游戏DirectDraw兼容性修复终极指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh…...

从概念验证到生产环境:Keep开源告警管理平台的5步完整实战部署指南

从概念验证到生产环境:Keep开源告警管理平台的5步完整实战部署指南 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 在当今复杂的云原生环境中,告警管理已成…...