手写红黑树是不可能完成的任务么?

tinyfool 发布于 2017年03月01日
无人欣赏。

红黑树确实很复杂,以我目前的能力要对照课本写才能写的出来,手写,你可以做到么?

在黑板上写呢?

共5条回复
董一凡 回复于 2017年03月01日

我觉得快速排序都是一个不可能完成的任务。 Corner case 太多了,当我知道选择中点不能用相加除于2的时候,当时就吓到了。

pinxue 回复于 2017年03月01日

发明一个算法是挺难的,实现一个算法就是普通人也能做的工作了,写一个比较好的实现则需要相当的经验。

如果描述只有一个名字,写的人正好又没记住对应的是什么,相当于要人发明这个算法。

如果这人只记得或者收到了算法原理的描述,那么只是推导一个实现。为难之处主要就是各种边界条件处理要周全,以及找出较为优化的实现方式。例如,看似简单的二分查找算法发布之后,没有 bug 的实现12年之后才搞出来。

如果这个人正好刚学过或者才折腾过,能记住详情,那就只是个体力活罢了。

tutulyy 回复于 2017年03月01日

这个要分情况讨论。

1、对于算法不了解。 这个难点在于删除节点和增加节点的时候,二叉树的调整方式。往往可能前一秒看资料的时候懂了,但是隔半个月就忘了,主要还是不熟练、使用频次太低造成的。

2、对于语言操作不熟练。 这个说白了就是逻辑性复杂的代码写太少。大脑对于存放指针、索引这些东西的堆栈溢出了,说通俗点就是脑子不够用了。就像下棋和打牌,如果你习惯了算后3步,但是突然有一天让你算后6步就会算不过来,感觉脑子很累。

最后讲一下红黑树,个人认为红黑树是对于AVL平衡树的一种剪枝,如果能手写出AVL平衡树然后再去手写红黑树会比较简单。

ffeitian 回复于 2017年03月03日

这个对我来说是高难的内容,对高手来说是入门的内容

希望有一天可以掌握AVL树,红黑树,B树,B+树等

pinxue 回复于 2017年03月03日

4楼 @ffeitian 不用有一天,理解这些数据结构和相应算法并没多难,甚至不需要会写程序。问题是,满足于知道个新名词或者上来给自己设置个“这很难”的心理障碍,就真的难喽。

登录 或者 注册