怎么样系统性地学习数据结构与算法(和 ACM 有关的)?

2022-04-07 12:52:40 +08:00
 featureoverload

如果只说数据结构和算法的话,肯定会有《算法导论》这个回答。

但是就算完全看完《算法导论》,很多 LeetCode 题目应该还是不会做吧?

比如说有些用到单调栈的数据结构来解题的,《算法导论》中有吗?

我确实不清楚,不然也不会问这个问题了,下同。

比如有些使用滑窗思想的(双指针、快慢指针),

比如求解 [最长子序列] ,将暴力 O(n^2) 解法,通过 Patient Sorting 算法,降为 O(nlogn),

等等等...

当然,从刷题可以逐步地接触到这些算法;

但是从我个人的角度触发,刷题接触算法太零散了,就算将使用相同的数据结构、算法、思路放到一起归类, 还是很零散,就感觉有些看到某个算法,你不知道这个算法和其它算法有什么“血源”关系。

因为,我感觉一个没学过的算法,不肯能是从石头里蹦出来的吧?

重归和某些其它算法有一些什么逻辑关系。

所以,我的意思就是,基于类似这中逻辑关系脉络,来系统性地学习数据结构与算法,有什么资料、途径和方法吗?

3031 次点击
所在节点    程序员
12 条回复
Itoktsnhc
2022-04-07 13:19:29 +08:00
https://oi-wiki.org/
然后还看 AcWing 的一些视频
Itoktsnhc
2022-04-07 13:20:32 +08:00
@Itoktsnhc 我是为了刷 LeetCode 效率高点,所以买了 Acwing 的基础课、提高课和 leetcode 相关的
jiezhi
2022-04-07 13:24:50 +08:00
Leetcode 里 Explore 不错啊,按主题练习也有讲解。然后再结合着书巩固。

但总会有书里涉及不到的知识点,再结合题解学习。
xiaochangchang
2022-04-07 13:42:24 +08:00
推荐台湾师范大学网站 演算法笔记: https://web.ntnu.edu.tw/~algo/

“就算完全看完《算法导论》,很多 LeetCode 题目应该还是不会做吧?”——是的没错,如果是学 ACM 有关的,还是要多做题。

“但是从我个人的角度触发,刷题接触算法太零散了”——完全正确。到哪里系统地了解整个脉络呢?很多 ACM 的前辈都是比较乐于分享的,可以搜他们的博客来了解学习路线。我随便翻了一个供你参考: https://www.cnblogs.com/qscqesze/p/4363195.html
MoYi123
2022-04-07 14:59:23 +08:00
推荐一个 B 站 up 我是小蜗蜗
现在主要有 2 个人在发视频, 一个是施韩原, 一个是杜瑜皓,你网上查一下就知道他们有多 nb 了.
可以考虑去报名参加一下他们组织的课程.
soupu626
2022-04-07 15:16:52 +08:00
《算法竞赛入门经典》 俗称紫书,基本就是针对竞赛的书了
soupu626
2022-04-07 15:22:51 +08:00
https://oi-wiki.org/ 还有这个也适合查阅
Volekingsg
2022-04-07 15:39:09 +08:00
还有《挑战程序设计竞赛》,个人觉得写的是最清楚的,代码风格也好
aneostart173
2022-04-07 16:32:43 +08:00
多练多想。
dialtcp
2022-04-08 05:44:53 +08:00
《算法竞赛进阶指南》,看书名是进阶,其实是入门和进阶都可以看的好书,可以配合 acwing 课程服用
angryfish
2022-04-08 08:49:21 +08:00
作为曾经的 acm 渣渣,个人觉得这玩意真的在努力的基础下,离不开天赋。推荐刘汝佳系列的数。
workingonescape
2022-04-08 14:14:34 +08:00
@Itoktsnhc acwing 上好像是 c 语言写的答案。。。

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

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

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

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

© 2021 V2EX