你们现在还能写红黑树, b 树的各种操作吗?

2016-09-25 17:24:49 +08:00
 twogoods
学生党,在看算法导论,感觉有点晦涩难懂,是不是我太笨了⊙︿⊙,有没有好的教程
12404 次点击
所在节点    程序员
60 条回复
anexplore
2016-09-25 17:28:50 +08:00
已经忘记了,也就知道操作的时间复杂度了
raysonx
2016-09-25 17:34:35 +08:00
b 树需要画画图,红黑树太复杂,得对着文档才能写,
Tink
2016-09-25 17:37:58 +08:00
cant
20015jjw
2016-09-25 17:40:56 +08:00
ucsf 的可视化 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 可能可以帮助理解吧 反正我的数据结构用了一点这个
messyidea
2016-09-25 17:41:43 +08:00
可能中文翻译不怎么样,可以看看英文的原版,或者看看别人的博客,比如下面两篇
http://blog.csdn.net/spch2008/article/details/9338919
http://blog.csdn.net/spch2008/article/details/9338923
kingoldlucky
2016-09-25 17:49:53 +08:00
从来就不能完整写过,不是现在
livc
2016-09-25 17:51:53 +08:00
从未写过
yidinghe
2016-09-25 17:52:43 +08:00
虽然是计算机专业毕业,但从来就没写过,也不会写。
Nexvar
2016-09-25 17:53:44 +08:00
已经失去这个能力
Marfal
2016-09-25 17:54:07 +08:00
@messyidea 醉了,你认为英文版算法导论比中文更易读?

入门别用算法导论啊。
Nexvar
2016-09-25 17:54:10 +08:00
但要捡起来,也还是比没学过简单
moyang
2016-09-25 17:54:39 +08:00
上学的时候实现过一次红黑树,心理阴影
messyidea
2016-09-25 18:00:10 +08:00
@Marfal 所以说可能 = =,我有本第二版的中文,记得当时红黑树删除那块实在看不下去了,那些博客容易理解多了
mko0okmko0
2016-09-25 18:19:31 +08:00
会用不会写.记住时间复杂度跟用法就好.
学校考写出红黑没用.除非要先搞学术.
出社会第一件事情就是活用现有演算法.
有现成的东西一堆.重点要会用
Mistwave
2016-09-25 18:26:37 +08:00
算导适合算法分析 学算法推荐 sedgewick 的算法第四版 不过这本书覆盖面有限 dp 啥的没讲 看完可以看 数据结构与算法分析: c 语言描述
Mistwave
2016-09-25 18:28:21 +08:00
拿红黑树为例 算法第四版是从 2-3 树的角度切入的 十分好懂
而且还有配套视频( coursera ) 十分推荐
TaoQAQ
2016-09-25 18:29:01 +08:00
诶,面试怎么办,校招怎么办
h4x3rotab
2016-09-25 18:32:29 +08:00
那么多平衡树,知道各个的原理,能写出一两个就好了
yangff
2016-09-25 18:34:25 +08:00
复盘一下思想,推一推就好了嘛……
q397064399
2016-09-25 18:47:33 +08:00
重要的是思想以及特性,还有运用场景,一个算法的完整实现,没有 github 面试官 你特么让我怎么写?



例如
红黑树 多线程,插入 删除 等操作,都要加锁,这是其数据结构的特性所致,不加锁就会产生竞争
但是涉及到数据的有序性,你又不能不使用红黑树,我目前没有看到一个数据结构能实现
快速插入 删除等操作 还能保持有序性,红黑树在这种场景是首选

HashMap 多线程的话,只要正在读写的那根链表加锁就可以了,其它的链表是完全可以释放给其它线程使用的,
如果有多线程性能需求的话, HashMap 是首选,另外还要学会针对不同的数据选择 Hash 算法保持桶的板最好平衡

针对超长且部分有序顺序表, 快速排序并不比归并排序快,


其它还有一些例子我就不举了,

新算法的研究从来都不是工程师的事情

工程师的能力在于了解算法的特性以及大致实现,并在合适的场景选择合适的算法,而不是把每个算法给背下来,你背了那么多算法,让你手写一个 HashMap QuickSort 就一定比 Java util 中的快?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/308850

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX