摘要: 读书笔记 本小节介绍了向红黑树插入元素的过程: 将新元素普通地插入二叉树; 调整二叉树使其符合红黑树的性质; 插入元素到二叉树 RB-INSERT(T, z) y = T.nil x = T.root while x != T.nil y = x if z.key < x.key x = x.lef 阅读全文
posted @ 2021-01-15 11:48 ijkzen 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 读书笔记 本小节介绍了旋转方法来修改搜索树; 如果按照普通二叉搜索树的方式去插入和删除元素,必定会破坏红黑树的性质; 为了维护红黑树的性质,必须要改变书中某些节点的颜色和指针结构; 指针结构的修改是通过旋转实现的,分为左旋和右旋,具体操作如下图: 其中左旋的伪代码如下: LEFT-ROTATE(T, 阅读全文
posted @ 2021-01-15 11:46 ijkzen 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 读书笔记 本小节介绍了红黑树的一些性质,具体的实现方法在之后的章节中讲述。 红黑树解决的问题 普通的二叉搜索树所有的操作都依赖于树的高度,但是树高又依赖于数据,极不稳定; 红黑树使得元素分布相对平衡,来使得树高为$O(\lg)$,减少操作时间。 红黑树的性质 每个节点或是红色,或是黑色。 根节点是黑 阅读全文
posted @ 2021-01-15 11:45 ijkzen 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 读书笔记 本小节介绍了二叉搜索树的插入和删除,至于修改只要先删除后插入就好; 插入 插入的过程和搜索的过程有些相似,先找到合适的位置然后将元素插入; 伪代码如下: TREE-INSERT(T, z) y = NIL x = T.root while x != NIL y = x if z.key < 阅读全文
posted @ 2021-01-15 11:43 ijkzen 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 读书笔记 本小节介绍了二叉搜索树的查询操作,包括$SEARCH, MINIMUM,MAXIMUM, SUCCESSOR, PREDECESSOR$这$5$个操作,这五个操作均可以在$O(h)$,$h$是当前二叉树的高度。 搜索 递归实现: TREE-SEARCH(x, k) if x == NIL 阅读全文
posted @ 2021-01-15 11:40 ijkzen 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 读书笔记 本小节介绍了二叉搜索树,二叉搜索树就是左子节点比父节点的值要小,右子节点的值比父节点大的二叉树;这里的小于/大于还包括等于。 INORDER-TREE-WALK(X) if x != NIL INORDER-TREE-WALK(x, left) print x.key INORDER-TR 阅读全文
posted @ 2021-01-15 11:37 ijkzen 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 读书笔记 本小节介绍了散列表的灵魂--散列函数; 一个好的散列函数应满足简单均匀散列假设:每个关键字都被等可能地散列到$m$个槽位中的任何一个,并与其他关键字已散列到哪个槽位无关。 虽然上述假设难以实现,但是可以作为衡量其他散列函数的标准。 有一些动态集合的元素关键字并不是自然数,我们需要使用各种各 阅读全文
posted @ 2021-01-15 11:35 ijkzen 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 读书笔记 虽然直接寻址表的所有字典操作能在$O(1)$时间内完成,但是它的缺点也同样明显; 如果某一个元素的关键字特别大,但是动态集合的元素数量又相对少,这就会造成极大的内存浪费;此外,直接寻址表对拥有同样关键字的元素缺乏合理的处理; 散列表改善了直接寻址表的上述缺点: 原本元素在直接寻址表的位置依 阅读全文
posted @ 2021-01-15 11:33 ijkzen 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 读书笔记 本小节介绍了直接寻址表,其实也就是数组; 为一个动态集合创建一个数组,这个数组长度大于等于这个动态集合的长度,将数组下标作为集合元素的关键字,进行直接寻址,这样的数组被称为直接寻址表。 课后习题 11.1-1 假设一动态集合$S$用一个长度为$m$的直接寻址表$T$来表示。请给出一个查找$ 阅读全文
posted @ 2021-01-15 11:31 ijkzen 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 读书笔记 本小姐介绍了两种有根树的实现方法,二叉树和分支无限制的有根树; 二叉树 二叉树的单个节点有三个指针$p, left, right$,其中$p$指向父节点,如果一个节点为根节点,则其父节点指向空;$left, right$分别指向左子节点和右子节点; 分支无限制的有根树 上面的二叉树虽然好用 阅读全文
posted @ 2021-01-15 11:28 ijkzen 阅读(92) 评论(0) 推荐(0) 编辑