modification

This commit is contained in:
aleen42
2016-10-11 00:29:34 +08:00
parent 60d6e5a080
commit 2f4bc34ec1

View File

@ -601,63 +601,53 @@
- ### 平衡查找树
- 掌握至少一种平衡查找树(并懂得如何实现):
- “在各种平衡查找树当中AVL 树和2-3树已经成为了过去而红黑树red-black trees看似变得越来越受人青睐。
这种令人特别感兴趣的数据结构亦称伸展树splay tree。它可以自我管理且会使用轮换来移除任何访问过根节点的 key。
” —— Skiena
- “在各种平衡查找树当中AVL 树和2-3树已经成为了过去而红黑树red-black trees看似变得越来越受人青睐。这种令人特别感兴趣的数据结构亦称伸展树splay tree。它可以自我管理且会使用轮换来移除任何访问过根节点的 key。” —— Skiena
- 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在 Google 的面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。
- 伸展树:插入、查找、删除函数的实现
,而如果你最终实现了红黑树,那么请尝试一下:
- 伸展树:插入、查找、删除函数的实现,而如果你最终实现了红黑树,那么请尝试一下:
- 跳过删除函数,直接实现搜索和插入功能
- 我希望能阅读到更多关于 B 树的资料,因为它被广泛地应用到大型的数据中。
- [ ] [平衡二叉找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
- 我希望能阅读到更多关于 B 树的资料,因为它被广泛地应用到大型的数据库当中。
- [ ] [自平衡二叉找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
- [ ] **AVL 树**
- 实际中:
我能告诉你的事,该种树在实际中并无太多的用途,但我能看到有用的地方在哪里:
AVL 树是另一种结构,可支持时间复杂度为 O(log n) 的查询、插入及删除。它比红黑树严格意义上更要平衡,从而导致更慢的插入和删除,但遍历快。正因如此,才彰显其结构的魅力。只需要构建一次,就可以在不重新构造的情况下读取,例如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。
- 实际中:我能告诉你的是该种树并无太多的用途但我能看到有用的地方在哪里AVL 树是另一种平衡查找树结构。其可支持时间复杂度为 O(log n) 的查询、插入及删除。它比红黑树严格意义上更为平衡,从而导致插入和删除更慢,但遍历却更快。正因如此,才彰显其结构的魅力。只需要构建一次,就可以在不重新构造的情况下读取,适合于实现诸如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。
- [ ] [MIT AVL 树 / AVL 树的排序(视频)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
- [ ] [AVL 树(视频)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
- [ ] [AVL 树的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
- [ ] [分离与合并](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
- [ ] **伸展树**
- 实际中:
伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes字符串的一种替代品用于存储长串的文本字符、Windows NT虚拟内存、网络及文件系统等的实现。
- 实际中:伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes字符串的一种替代品用于存储长串的文本字符、Windows NT虚拟内存、网络及文件系统等的实现。
- [ ] [CS 61B伸展树Splay trees视频](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
- [ ] MIT 教程伸展树Splay trees
- 该教程会过于学术但请观看到最后的10分钟以确保掌握。
- [视频](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
- [ ] **2-3查找树**
- 实际中:
2-3树有着快速的插入但却有着查询慢的代价因为相比较 AVL 树来说,其高度更高)
- 你会很少用到2-3树。这是因为其实现涉及到不同类型的节点。因此人们会选择红黑树。
- 实际中:2-3树的元素插入非常快速但却有着查询慢的代价因为相比较 AVL 树来说,其高度更高)。
- 你会很少用到2-3树。这是因为其实现过程中涉及到不同类型的节点。因此人们更多地会选择红黑树
- [ ] [2-3树的直感与定义视频](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
- [ ] [2-3树的二元观点](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- [ ] [2-3树学生叙述视频](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- [ ] **2-3-4树 (亦称2-4树)**
- 实际中:
对于每一棵2-4树都有着对应的红黑树来存储同样顺序的数据元素。在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。这就是为什么许多算法引导文章都会在介绍红黑树之前先介绍2-4树尽管**2-4树在实际中并不经常使用**。
- 实际中:对于每一棵2-4树都有着对应的红黑树来存储同样顺序的数据元素。在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。这就是为什么许多算法引导文章都会在介绍红黑树之前先介绍2-4树尽管**2-4树在实际中并不经常使用**。
- [ ] [CS 61B Lecture 26平衡查找树视频](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C)
- [ ] [自底向上的2-4树视频](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- [ ] [自顶向下的2-4树视频](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
- [ ] **B 树**
- 有趣的是:为啥叫 B 仍然是一个神秘因为 B 可代表波音Boeing、平衡Balanced或 Bayer联合创造者
- 实际中:
B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。
- 有趣的是:为啥叫 B 仍然是一个神秘因为 B 可代表波音Boeing、平衡Balanced或 Bayer联合创造者
- 实际中:B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。
- [ ] [B 树](https://en.wikipedia.org/wiki/B-tree)
- [ ] [B 树的介绍(视频)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
- [ ] [B 树的定义及其插入操作(视频)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- [ ] [B 树的删除操作(视频)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- [ ] [MIT 6.851 —— 内存层次模块Memory Hierarchy Models视频](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
- 覆盖有高速缓存参数无关型cache-oblivious B 树和非常有趣的数据结构
- 覆盖有高速缓存参数无关型cache-obliviousB 树和非常有趣的数据结构
- 头37分钟讲述的很专业或许可以跳过B 指块的大小、即缓存行的大小)
- [ ] **红黑树**
- 实际中:
红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用。而且,还对在其他数据结构中构建块非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 系统所采用的完全公平调度器the Completely Fair Scheduler也使用到了该种树。在 Java 的版本8中红黑树也被用于存储哈希列表集合中相同的数据而不是使用链表及哈希码。
- 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用,还对在其他数据结构中块的构建非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 系统所采用的完全公平调度器the Completely Fair Scheduler也使用到了该种树。在 Java 8中红黑树也被用于存储哈希列表集合中相同的数据而不是使用链表及哈希码。
- [ ] [Aduni —— 算法 —— 课程4该链接直接跳到开始部分视频](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
- [ ] [Aduni —— 算法 —— 课程5视频](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
- [ ] [黑树Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)