/algorithm

算法学习记录

Primary LanguageRust

算法

概要/进展

算法是一个需要长期学习才能熟练掌握的能力,而我却希望能够在短期(一个月)内实现掌握能够进行面试的算法,这两个目标是存在冲突的,我需要决定究竟选择怎样的路线进行学习,是广泛和深入但缓慢的整体学习,还是明确和直接但是表面的面试学习。整体的学习会从阅读算法导论和完成MIT的课程开始,而对于具体的面试学习大概率会从前期收集的链接中进行完成。 March 28, 2022

算法导论有 1300 页,根据 2020 年的 MIT 算法视频至少就需要花费 40 小时了,这还不涉及的练习,按照 Rust 的学习节奏,我认为一天最多能完成一个视频的内容,这还要涉及对每日内容的练习规划。面试的练习内容主要包含,LeetCode 的练习和相关算法的学习,至少存在 100 题,假定存在 10 个左右的主流算法, 那么按照两天一个算法,这需要三周的时间,如果一个算法需要 3 天,那么也就是一个月的时间。这两个路线并不是直接冲突的,但是必须要有一个侧重点,如果侧重在系统性的算法学习,那么面试的针对性就不足了,如果侧重于面试那么很可能就不能系统性的学习算法, 学习的持久性可能会问题。 March 28, 2022

我认为就我目前的状态,暂时最好的方式还是针对面试题进行算法的学习,然后根据具体的算法进行系统性的扩展,例如在学习到动态规划的时候,如果初步的学习还是无法实现纯熟,那么就可以考虑进一步的学习,通过算法导论和各种的公开课进行巩固,然后再回顾学习。类似于 Rust 中的一边视频初步学习、中间练习和二遍视频巩固。 March 28, 2022

本来当前页面是仅仅用来记录在公开课的学习内容,但是2022年经过部分面试时不好的算法和数据结构结果,我决定重新分配用作记录自己的算法学习历程。近期更新较多的部分应该是2022年为了面试而学习的部分,而其中又包含两个部分LeetCode和剑指Offer,可以看出这个安排是围绕着算法题而安排的。除了面试学习的部分,可能后续还会记录一系列的算法公开课和算法书籍等的阅读。

写完 LeetCode 53 题的时候,我意识到算法的分析不仅仅只有时间复杂度和空间复杂度,实际上还有一个难以描述的复杂度,那就是对于使用者的复杂度,也就是说不同的算法使用上是存在不同的复杂程度的,当时间复杂度和空间复杂度越低的时候,使用上可能要注意的问题就越多。就好像暴力的算法一般都是最为直接明了的,但是很可能这个程序永远也无法结束。复杂度低的算法不意味简单,所以学习算法实际上就是在提升编程的难度,可能享受学习算法的感觉,就和玩魂系列游戏一样。 September 14, 2022

学习方法

March 28, 2022 暂时最好的方式还是针对面试题进行算法的学习和练习,然后根据具体的算法进行系统性的扩展,具体的学习方法见面试部分学习中的学习方法。

2022 针对面试的算法学习

March 28, 2022 确定了针对面试是这个阶段算法学的主要方法,但是材料众多,我需要确定一个主要的材料进行完成。techinterviewhandbook 的链接看似十分丰富,但是页面非常混乱,而且涉及很多的广告内容,所以我还是选择直接利用 leetcode 的列表作为练习列表。后续的学习材料包括,Rust 的算法实现源代码、算法导论英文版、MIT的课程、剑指 Offer 中的相关内容。

August 29, 2022 开始尝试完成 blind-75

练习记录

最初这个部分的记录是期望根据具体题目所属类别而进行划分记录,但是最后实践的时候还是统一记录 blind-75 的练习比较好。参见 blind_75_leetcode

参考

  1. https://leetcode.com/discuss/general-discussion/460599/blind-75-leetcode-questions
  2. https://www.techinterviewhandbook.org/introduction
  3. https://github.com/SeanPrashad/leetcode-patterns
  4. https://seanprashad.com/leetcode-patterns/
  5. https://interview-science.org/
  6. https://github.com/TheAlgorithms/Rust
  7. Introduction to Algorithms
  8. MIT 6.006 Introduction to Algorithms, Spring 2020
  9. 剑指 Offer

算法公开课

部分学习过的算法,但是都没有完成,即使完成的部分也没有勤于练习,所以仅用作备份留存。

  1. algorithms-princeton: princeton algorithms
    1. last updated:April 16, 2021
  2. algorithms-mit6006: mit 6.006 introduction to algorithms
    1. last updated: April 14, 2019

相关阅读

  1. Learn to Code by Solving Problems
  2. Introduction to Algorithms
  3. 剑指 Offer