似乎计算机数据结构中存在一个明显的“技术断层”?

2020-04-15 09:01:22 +08:00
 abcbuzhiming
计算机的数据结构这个东西,看起来东西不多,但是里面有一些很突兀的存在。绝大部分书也好,教程也好,介绍数据结构的时候,套路都是 数组 链表 Map(table) ,队列,栈。然后就会出现两个画风(难度)和之前的东西截然不同的存在——树和图。
我搞这行的时间也不算短了,也接触了不少人,发现 树和图 对于大部分人来说都是难以理解的存在,包括我自己也是。不是说他们的表现形式难以理解,而是指附加其上的计算行为,很复杂,有多重变种。和在他们之前的那些数据结构比起来,感觉他们的复杂度猛然抬了个台阶起来。非常的显眼而且突兀。
我注意到这点越久,就越怀疑这两个东西存在的“合理性”,他们就像塞进耗子窝里的大象那么显眼。这中间是不是缺少了什么,我们知道计算机的一切往上追溯都来自于数学,数学能解释这两个东西如此突兀的现象吗,还是说历史埋葬了一些东西,在 树和图 之前其实存在某些“前置科技”,只是因为种种原因,“前置科技”的功能被后来者覆盖了,就消失在历史长河里了
15795 次点击
所在节点    程序员
136 条回复
puncsky
2020-04-15 09:03:45 +08:00
别闹了,树和图到处都是,你 new 一个稍微深点儿的 object,它不是图么?
xyjincan
2020-04-15 09:05:23 +08:00
结构理解起来简单,但是编程实现+各种操作,,,
ipoh
2020-04-15 09:07:24 +08:00
99.9%的人只要知道怎么用就行了 能看懂文档会调用 api 就 ok
duwan
2020-04-15 09:11:58 +08:00
链表不也可以看作是个树嘛。。
dilu
2020-04-15 09:12:22 +08:00
互联网风口造成的,只要知道怎么用不需要知道原理,不需要知道原理,也不需要懂多高深的技术

写代码本质上跟搬砖没有什么不一样,可以说 99.9%的人都只是在搬砖罢了

我们不是出卖技术换钱,我们是出卖时间在换钱而已
abcbuzhiming
2020-04-15 09:12:41 +08:00
@puncsky 你没看懂我在说什么

@ipoh 很显然,我这里不是要讨论你说的这点
chendy
2020-04-15 09:13:46 +08:00
复杂度和维度之间的关系本来也不是线性的
dilu
2020-04-15 09:14:28 +08:00
可能我的理解有错误,lz 是想表达在计算机体系中存在断层?
nnqijiu
2020-04-15 09:16:25 +08:00
其实链表就是一种特殊的树,树就是一种特殊的图
alphatoad
2020-04-15 09:16:44 +08:00
我的理解是,楼主指树、图这类数据结构依靠指针、内存地址,和别的连续内存的数据结构不一样,这个意思吗?
yaphets666
2020-04-15 09:17:27 +08:00
这个断层中内容可能只存在于科学家的脑海中或者草图中
moonsn
2020-04-15 09:20:47 +08:00
没有断啊,
点,线,立方体
单一数据单元,数组,图
一维,二维,多维关系
不知道比喻的恰当不。
marcong95
2020-04-15 09:23:16 +08:00
数组、链表、Map(table)、队列、栈不都是线性表么。。。

然后图是“二维线性表”,树是个无环图

所以并不是什么存在前置科技,的的确确就是两个维度。。
luckyrayyy
2020-04-15 09:23:26 +08:00
链表一对一,树一对多,图多对多,这不是很自然的递进关系么....还少啥?建议楼主不要钻到奇怪的胡同里...
boileryao
2020-04-15 09:25:10 +08:00
小学我第一次学除法也感觉特别突兀,咋也学不会,总不能说除法和加减法有“技术断层”吧。当然也不排除是教材问题,一本好的教材认真看的话应该不会特别突兀。

链表加个叉 -> 树,
分支判断 -> 决策树 -> 树,
大部分 O(lgN)算法的执行过程差不多都是一次砍掉半拉树,
树是特殊的一种图——有向无环图,图的话大概社交关系、路由算法、科学计算?等等场景用的比较多,没啥需求的话简单了解就好,没必要难为自己。
lower
2020-04-15 09:26:32 +08:00
我觉得主要是在 目前的计算机体系结构上要实现(表现)这些数据结构和算法比较麻烦吧,要考虑内存寻址、计算什么的。
另外链表里其实也有(实现或操作)比较复杂一些的数据结构吧,比如双向链表 /跳表之类的。
CEBBCAT
2020-04-15 09:27:10 +08:00
@dilu
@alphatoad
楼主的意思应该是链表、数组算法的难度和图、树算法的难度不在一个量级上,假如说链表算法的难度是:wq,那么树算法的难度就是 100@m 了(后边这个是寄存器,要我用错了别拍我)
CEBBCAT
2020-04-15 09:28:21 +08:00
@CEBBCAT 我寻思楼主写得挺明白的,我当时还想夸夸楼主行文挺不错呢。至少算是矮子里面拔将军
ww940521
2020-04-15 09:31:21 +08:00
我也是这么觉得,树怎么都搞不懂。
Cabana
2020-04-15 09:31:27 +08:00
@boileryao 除法不就是连续减嘛🐶

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

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

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

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

© 2021 V2EX