想了解下大佬们在工作中用过的数据结构

2020-03-26 14:39:06 +08:00
 minglanyu

emmmmmm,说出来不怕丢人。

昨天无意间刷 leetcode,发现一道题解法很妙,发现了新世界一样;今天做另一道题的时候发现 emmmmm,不是那么简单,还是得动动脑子的。 所以又对数据结构和算法在工作中的实际用途产生了困惑。

平时大多数时间在用 Array 原型链上的forEach,map,filter等等,String 原型链,Object 原型链上的那一套,再搭配一些 es6+的Set(),...,Map这种等等。 偶尔遇到一些稍微复杂的会用 lodash 里的函数或者 for for,对服务端返回的数据做一些处理以供渲染。

我写 PC 端的前端中后台系统,就是上面这些东西组合起来用,平时工作也够用了,性能也没啥问题。 如果是操作 DOM,基本上也是调 API,然后也很少有抓耳挠腮的感觉,一点一点能把需求做出来。 框架用的也算是蛮熟,接入第三方开源库也很快,源码也阅读过一些。

学校里也学过数据结构,基本上就是一些数组,二叉树,链表之类等等(当前工作里用到最多的就是数组了,可能是我太菜也可能是没必要用所以后面两个几乎没用过,所以基本上忘光了)。

偶尔刷刷 leetcode,起初是为了加深对 js 的语法的掌握,现在感觉语法啥的就那么回事,数据结构才更值得自己去深入学习一下,兴许以后写个什么复杂玩意儿就用上了。

其他语言我不太懂,但是感觉下面这些很大程度简化了一些前端在数据结构和算法上花费的时间:

还有太多太多了

最近想花时间补补这方面的知识了,不仅仅是应对以后的面试,更多的是想在工作中写出优雅的代码来,毕竟一直 if else + for for 迭代 感觉有点···

所以就想问问大佬们,你们在工作中用了什么数据结构,香不香?

4677 次点击
所在节点    程序员
43 条回复
catinsides
2020-03-26 17:30:40 +08:00
想看“发现了新世界一样”的那道题
minglanyu
2020-03-26 18:41:33 +08:00
@catinsides 我夸张了一下 哈哈
no1xsyzy
2020-03-26 18:44:47 +08:00
Dict[Tuple, Any] 真香
刷到动态规划题都直接继承 dict 写个 __missing__
遇到计算顺序敏感的(即容易爆栈)再写个循环 touch 一下 result[X]
不追求极限速度就一遍过,反正 leetcode 的 Python 运行时本身连启动都很慢。

——

稍微看歪了
想想,我发现我成天在改语法结构,改到静态检查器都不认了。
minglanyu
2020-03-26 19:06:38 +08:00
@no1xsyzy 我是谁 我在哪 我在干什么 v 站果然藏龙卧虎
no1xsyzy
2020-03-26 19:31:43 +08:00
@minglanyu 是中文有偏差,如果我说的改语法结构说成 tweak with syntax 就只剩下诡异了(
also24
2020-03-26 19:33:49 +08:00
我最喜欢的数据结构还是并查集,实实在在的拓宽了思路,以至于有些不是并查集的题目,我也会用并查集来做着玩儿~~
also24
2020-03-26 19:35:27 +08:00
另外,我最不喜欢的数据结构是 Trie 树,适用的场景相对比较少,对空间也比较浪费。
ackfin01
2020-03-26 19:44:13 +08:00
除了语言自带的那些数据结构,还会用下面的

- 栈,队列
- 链表:也很常用,用过双向循环链表在 LRU 缓存里,
- 树:常用在搜索,二叉树是最基本的,还用过矩形树
- 图->最常用的:DAG,是否有环

还有很多算法真的是很有用,比如双指针,dfs,bfs,动态规划等

其实总结一下,就是遇到一个问题进行分析的时候,就会考虑这些可能的数据结构和可能的算法实现,哪种应用起来最符合,使得问题简化效率提高,简化不仅是实现上,代码可读性上,还有运行效率上。
bruce2000
2020-03-26 20:02:22 +08:00
我除了 list 和 dict 啥也不会,最复杂的也就是 list 与 dickt 的各种嵌套,楼上的大佬说的我一脸懵逼
jingcoco
2020-03-26 21:04:49 +08:00
大部分程序员不需要 CS 证书,广度很重要在小公司,基本要求你啥都做。我自己主要是也像楼主一样想提高所以自己有看些。
tingyunsay
2020-03-26 21:47:07 +08:00
布隆过滤器,个人小项目去重首选
changz
2020-03-26 22:13:24 +08:00
优先队列
yangzhezjgs
2020-03-26 23:33:05 +08:00
其实数据结构和算法使用最多的是底层的系统软件领域,一般应用开发还是 if eslse 这样的业务逻辑多
xiaochun41
2020-03-27 09:31:41 +08:00
基本很少自己实现,用的最多的大概是:队列
zjbztianya
2020-03-27 09:43:15 +08:00
@also24 web 框架的路由一般不就是用 trie 么?虽然是压缩前缀的(radix trie)...
minglanyu
2020-03-27 09:47:19 +08:00
@ackfin01
@changz
@xiaochun41 队列看起来还是蛮多的
minglanyu
2020-03-27 09:48:22 +08:00
@jingcoco
@yangzhezjgs 确实是的 做应用层很多都是业务层的东西 而且其实也蛮有学问的
RedisMasterNode
2020-03-27 09:53:32 +08:00
@tingyunsay 小项目去重应该直接 set()精确, 大项目才应该用 BloomFilter ?
tingyunsay
2020-03-27 10:57:18 +08:00
@RedisMasterNode 对,实际情况得看数据量吧,可能我自己搞得那些项目量还比较大,所以习惯用 bloom 了😹sorry 有点以偏概全了
jon
2020-03-27 11:01:28 +08:00
战马

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

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

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

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

© 2021 V2EX