青训营X豆包MarsCode 技术训练营 学习方法与心得1| 豆包MarsCode AI 刷题

32 阅读5分钟

前言

以前的我一直以为编程时想到怎么实现就怎么写,只要测试样例最终没有错误,就是成功。但我错了!!

前辈们体系化地去归纳了各种代码实例,其中可能包含了许多数学方法,最终形成了一个个抽象出来的算法模型。这些都是需要我们去学习,去掌握,以及在实践中积累经验的——这也是成为一名合格的程序员所必须经历的。

算法的意义就这样体现出来了。

本篇笔记主要包括以下两方面内容:

  • 梳理总结一些我在使用豆包MarsCode AI刷题的过程中学习、使用到的算法模型。
  • 提出对其他入门同学的学习建议。

梳理总结算法模型

  1. 动态规划(Dynamic Programming)

    • 动态规划是一种通过将复杂问题分解为更小的子问题来解决问题的方法。它通常用于优化问题,其中每个子问题的解都被存储起来,以便在后续的计算中重复使用。
    • 动态规划的关键在于找到问题的最优子结构和重叠子问题。
    • 常用于解决背包问题、最长公共子序列、最短路径等问题。
  2. 贪心算法(Greedy Algorithm)

    • 贪心算法是一种在每一步选择中都采取当前状态下最优的选择,以期望得到全局最优解的算法。
    • 贪心算法并不总是能得到全局最优解,但在某些问题上,它可以非常高效地找到近似最优解。
    • 常用于解决找零钱、活动选择、哈夫曼编码等问题。
  3. 分治算法(Divide and Conquer)

    • 分治算法是一种将问题分解为更小的子问题,然后递归地解决这些子问题,最后将子问题的解合并以得到原问题的解的方法。
    • 分治算法的典型例子包括归并排序和快速排序。
    • 常用于解决排序、查找、图的遍历等问题。
  4. 回溯算法(Backtracking)

    • 回溯算法是一种通过尝试所有可能的解决方案来找到问题的解的方法。
    • 它通常用于解决组合优化问题,如八皇后问题和数独。
    • 常用于解决组合、排列、子集等问题。
  5. 深度优先搜索(Depth-First Search, DFS)  

    广度优先搜索(Breadth-First Search, BFS)

    • DFS 和 BFS 是图遍历算法,用于访问图中的所有节点。
    • DFS 通过递归或栈来实现,而 BFS 使用队列来实现。
    • 这两种算法在搜索图或树时非常有用,例如在迷宫问题或网络路由中。常用于解决图的遍历、连通性、最短路径等问题。
  6. 双指针算法(Two Pointers)

    • 双指针算法是一种使用两个指针来遍历数组或链表的方法。它通常用于解决需要在有序数据结构中查找或操作元素的问题,如排序数组中的两数之和。
    • 常用于解决数组、链表、字符串等问题。
  7. 滑动窗口(Sliding Window)

    • 滑动窗口是一种在数组或字符串上维护一个固定大小的窗口,并在窗口内进行操作的方法。它通常用于解决需要在连续数据中查找特定模式或子串的问题,如最长不重复子串。
    • 常用于解决字符串、数组等问题。
  8. 并查集(Union-Find)

    • 并查集是一种用于处理不相交集合的数据结构。它通常用于解决图的连通性问题,如判断图中是否存在环。
    • 常用于解决图的连通性、集合合并等问题。
  9. KMP 算法(Knuth-Morris-Pratt Algorithm)

    • KMP 算法是一种用于在字符串中查找模式的高效算法。它通过预处理模式字符串来避免不必要的比较,从而提高查找效率。
    • 常用于解决字符串匹配、文本搜索等问题。
  10. 快速傅里叶变换(Fast Fourier Transform, FFT)

    • FFT 是一种用于计算离散傅里叶变换(DFT)及其逆变换的高效算法。
    • 它在信号处理、图像处理和数据压缩等领域有着广泛的应用。
    • 常用于解决信号处理、图像处理等问题。

这些算法模型在编程题中都很常见,掌握它们可以帮助我们更高效地解决问题。在实际应用中,我们不能只生搬硬套,应该具体问题具体分析,按情况选择合适的算法模型。

入门学习建议

其实所有学科专业的学习方法都是有共同之处的,下面我提出的这几条建议就是……虽然或许有些浅薄,甚至都是老生常谈了,但这些确实是我在入门学习时真真切切得出的经验。

  1. 系统学习

系统的、体系化的学习是十分必要的。新手入门时总会有些茫然,但系统的学习能够指明方向,知道自己正在沿着哪个路线学习,明确当下能收获到什么,并梳理成一套有逻辑的知识图谱。

  1. 有目的的学习

带着目的去学习才能更好地收获,不会迷茫。

  1. 多学多看多实践,常练常新

这一点就是一个“勤”字。请永远保持认真学习的态度。

  1. 脚踏实地,不能急于求成

掌握一种知识,掌握一项技能——这样简单的结果是经历了无数努力、挫折、反思和进步的。路要一步一步走,脚踏实地才能把知识、技术拿得稳稳当当的。

总而言之就是,要知道在学什么?为什么学?怎么学才能学得扎实?学了之后用到哪里去?