遇到同样的问题,在豆瓣上转过来记录下。

以下内容转自:http://book.douban.com/annotation/16409380/

-------------------分割线--------------------------------------

最近钻研CLRS,以求在数据结构与算法方面更进一步学习,着实发现国外教材的严谨,全面,严奶奶着实不及。也发现前路漫漫,其修远兮,我必须上下而求索。也发现了一些中外教材定义上不一致的地方,尤以树这个方面比较突出。

一些差别:

1.深度,高度的定义

在严教材中,对深度和高度有如下定义(P120):

结点的层次从根开始定义起,根为第一层,根的孩子为第二层。若某结点在第l层,则其子树的根就在第l+1层。......树中结点的最大层次称为树的深度或高度。

而在CLRS中,却有不同的定义(附录B.5.2,P672):

从根r到结点x的路径长度称为x在T中的深度。结点在树中的高度是从结点向下到某个叶结点最长简单路径中边的条数。而树的高度也等于树中结点的最大深度。

严版的定义深度和高度等价,作为树的属性。而CLRS中深度与高度“互补”其和为树的深度(高度),对于树,也有高度的属性。

2.满二叉树与完全二叉树的定义

严教材中满二叉树定义如下(P124):

一棵深度为k且有2^k - 1个结点的二叉树称为满二叉树。

而在CLRS中,则有严重的差别(附录B.5.3 P672):

满二叉树:每个结点或者是叶结点,或度数为2,不存在度为1的结点。

对于完全二叉树,严教材定义为(P124):

可对满二叉树的结点进行编号,约定从根结点起,从左向右,从上至下。深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应时,称之为完全二叉树。(备注写道此定义版本众多,本书以此为准)。

CLRS中则为(附录B.5.3 P673):

完全二叉树是所有的叶子结点都有相同深度,且所有内部结点度都为2.

在Wikipedia中,完全二叉树与国内定义一致,与CLRS中不同,如下:

A complete binary tree is a binary tree in which every level, except possibly the last, is completely filled, and all nodes are as far left as possible.

Wikipedia对perfect binary tree(完美二叉树)定义与国内的满二叉树相同,即:

A perfect binary tree is a full binary tree in which all leaves are at the same depth or same level, and in which every parent has two children.[1] (This is ambiguously also called a complete binary tree.)

CLRS英文版中对完全k叉树定义为:

A complete k-ary tree is a k-ary tree in which all leaves have the same depth and all internal nodes have degree k.

对于这些差别,其实:

然而,许多这些差别是由于翻译问题造成的,请听我道来:

在Wikipedia中,完全二叉树与国内定义一致,如下:

A complete binary tree is a binary tree in which every level, except possibly the last, is completely filled, and all nodes are    as far left as possible.

Wikipedia对perfect binary tree(完美二叉树)定义与国内的满二叉树相同,即:

A perfect binary tree is a full binary tree in which all leaves are at the same depth or same level, and in which every parent    has two children.[1] (This is ambiguously also called a complete binary tree.)

CLRS英文版中对完全k叉树定义为:

A complete k-ary tree is a k-ary tree in which all leaves have the same depth and all internal nodes have degree k.

CLRS的译者们对complete的翻译没有考虑道英文定义中本来存在的歧义还有国内约定俗成的定义的忽视,造成了这样的混乱。国内的定义中满二叉树即为perfect binary tree,其翻译与full binary tree相近,wikipedia中对full binary tree的定义与CLRS中一致,即:

A full binary tree (sometimes proper binary tree or 2-tree or strictly binary tree) is a tree in which every node other than the   leaves has two children.Sometimes a full tree is ambiguously defined as a perfect tree.

但CLRS直接将 full binary tree翻译为满二叉树,与国内约定俗成的满二叉树(perfect binary tree)相冲突。这同样是忽略了国外定义存在的争议和国内约定俗成的说法而进行翻译。

总结一下对应关系:

  国内  国外

  完全二叉树<--->a complete binary tree

  满二叉树 <--->a perfect binary tree(a complete binary tree [ambiguously])

  无对应名称,即全部结点度数要么为2,要么为0的二叉树<--->a full binary tree(sometimes called a perfect binary tree[ambiguously])

我想说的:

物理学与计算机科学都与数学有着最紧密的关系。但与物理学基于客观存在的、不随主观意志改变的宇宙不同,计算机科学是关于我们千千万万的程序员、计算机科学家、黑客们创造的新的世界运行规律的科学,这些规律,具体表现为形形色色的协议、算法,是我们人类制定的。所以争议一直会存在。许多没有实质差别的争议,如大端法与小端法,如从0开始计数和从1开始,只是一个标准问题。

CLRS是一部庞大的书,英文版有近1000页,翻译的难度与工作量可想而知。但也希望译者们能充分考虑到英文定义中本来存在的争议和国内相关约定俗成的说法,为一份标准献一份力量。

从中也能看出国内教材往往立意较浅,从实用角度介绍了许多重要的数据结构,严教材充斥着略显蹩脚的C代码,语言也有些晦涩,也是国内大学的氛围所致,但作为入门级读物已经是非常不错,它的练习册也很好。而CLRS则从数学的根基开始力图构建一个涉及广泛的重要的结构和算法的高楼大厦,从实际效果看,他成功达到了他的目标。他严谨,稳重,甚至稍有笨重。希望对结构与算法,对计算机科学有心趣的同学能够跟我一起学习。在此推荐一个豆列:http://book.douban.com/doulist/229594/ 希望对你有所帮助。

												

《算法导论》笔记---附录 B.5 树的更多相关文章

  1. MIT算法导论笔记

    详细MIT算法导论笔记 (网络链接) 第一讲:课程简介及算法分析 (Sheridan) 第二讲:渐近符号.递归及解法  (Sheridan) 第三讲:分治法(1)(Sheridan) 第四讲:快排及随 ...

  2. 算法导论第十八章 B树

    一.高级数据结构 本章以后到第21章(并查集)隶属于高级数据结构的内容.前面还留了两章:贪心算法和摊还分析,打算后面再来补充.之前的章节讨论的支持动态数据集上的操作,如查找.插入.删除等都是基于简单的 ...

  3. 算法导论笔记:18B树

    磁盘作为辅存,它的容量要比内存大得多,但是速度也要慢许多,下面就是磁盘的的结构图: 磁盘驱动器由一个或多个盘片组成,它们以固定的速度绕着主轴旋转,数据存储于盘片的表面,磁盘驱动器通过磁臂末尾的磁头来读 ...

  4. 算法导论笔记——第二十章 van Emde Boas树

    当关键字是有界范围内的整数时,能够规避Ω(lglgn)下界的限制,那么在类似的场景下,我们应弄清楚o(lgn)时间内是否可以完成优先队列的每个操作.在本章中,我们将看到:van Emde Boas树支 ...

  5. 算法导论笔记——第十八章 B树

    18.1 B树的定义  18.2 B树的基本操作 与一棵二叉搜索树一样,可以在从树根到叶子这个单程向下过程中将一个新的关键字插入B树中.为了做到这一点,当沿着树向下查找新的关键字所属位置时,就分裂沿途 ...

  6. MIT公开课:算法导论 笔记(一)

    课程链接:http://open.163.com/special/opencourse/algorithms.html 第一课:算法分析基础 1.介绍插入排序与归并排序,计算并比较最坏运行时间 2.算 ...

  7. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  8. "《算法导论》之‘树’":二叉查找树

    树的介绍部分摘取自博文二叉查找树(一).二叉查找树(二).二叉查找树. 1. 树的介绍 1.1 树的定义 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合. 把它叫做“ ...

  9. 算法导论:Trie字典树

    1. 概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. Trie一词来自retrieve,发音为/tr ...

随机推荐

  1. FLASH CC 2015 CANVAS 中 createjs 移除绑定事件

    myBtn.addEventListener("click", function(evt) { // do stuff... evt.remove(); // removes th ...

  2. NYOJ 士兵杀敌(三)

    描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌 ...

  3. iOS - UIView

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIView : UIResponder <NSCoding, UIAppearance, UIAppeara ...

  4. 强行替换exe图标的方法

    说句实话,要想用普通的方法来替换图标,不是完全不可行,当然也不是完全可行.这个看似简单的问题并不是想象中那么容易解决,为什么有人修改exe的图标总是失败,其实他忽视了exe和图标的复杂性,用简单的方法 ...

  5. Linux配置全局环境变量的方法

    总结3种方法: 1.修改/etc/profile    1.1 :首先在此文件中设置环境变量;    1.2:export  设置好的环境变量.  #view /etc/profile export ...

  6. 使用火狐的restclient发送http接口post及get请求

    1.在firefox安装restclient插件,具体参照http://jingyan.baidu.com/article/1876c8529b07e3890b137623.html: —.发送pos ...

  7. CSS3_边框属性之圆角

    一.border-radius是向元素添加圆角边框: border-radius的值不仅能用px单位,你还可以用百分比或者em,但兼容性目前还不太好.(都不能是负值) 1.border-radius ...

  8. fedora 14安装经验

    初学linux系统,在win7 系统上安装VMware9.0,并用虚拟机安装fedora.安装了好几次,虽然还是没有彻底通透,但也有一点点心得,特地分享一下: 我安装fedora用于嵌入式ARM开发练 ...

  9. dshow,Sample Grabber 从摄像头采集

    char* CCameraDS::QueryFrame() { long evCode, size = 0; #if CALLBACKMODE static double lastSampleTime ...

  10. toolbar

    toolbar= (Toolbar) findViewById(R.id.toolbar_mainactivity); // 设置主标题及其颜色 toolbar.setTitle("Andr ...