《算法导论》学习总结 — 7.第八章(1) 决策树
建议先看看前言 : http://www.cnblogs.com/tanky_woo/archive/2011/04/09/2010263.html
第八章将介绍几种非比较排序—计数排序,基数排序,桶排序,这三种排序都在线性时间下运行的。
这一节决策树其实是对前面的堆排序,快排等是最优的比较算法的证明,
首先说下《算法导论》上对决策树的定义:一棵决策树是一棵满二叉树(注意看下面解释),表示某排序算法作用于给定输入所做的所有比较,而控制结构,移动等都被忽略了。
注意:这里个人认为定义是错误的,决策树不是一棵满二叉树,连完全二叉树都不是。(不知道有没有朋友看到这里和我想法一样?)
首先看看只有三个元素时,决策树的图:
在决策树中,每个内结点都用i:j表示比较下标为i数组元素与下标为j的数组元素的大小。每一个叶结点是一个n个元素的全排列。
所以排序算法的执行对应于遍历一条从树的根到叶结点的路径!
因为有n个结点,根据高中学的组合排列知识,知道有n!个情况,也就是n!个叶子结点。
在决策树中,从根到任意一个可达叶结点之间的最长路径的长度,表示对应的排序算法中最坏情况下的比较次数。这样,一个比较算法的最坏情况的比较次数就是其决策树的高度。
定理8.1证明了任意一个比较算法在最坏情况下都需要做Ω(n lg n)次的比较。这个证明比较简单,可以看看书上的证明过程。
这一节其实没什么内容,就是一点基本的概念,以及了解比较算法可以通过转换为决策树这个模型去理解。
在我独立博客上的原文:http://www.wutianqi.com/?p=2372
欢迎大家互相学习,互相探讨。posted on 2011-04-21 13:42 Tanky Woo 阅读(3434) 评论(3) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述