数据结构算法思路整理
最近不是忙着找工作么,找工作绕不过去的就是数据结构和算法了, 尤其是大厂的面试必须得上机编程,所以把相关的知识梳理并实践,准备的过程也是学习和精进的过程。我的计划大致如下:
1.准备资料:这是必不可少的:我先做个铺垫,找本通俗易懂的书迅速帮我回忆起算法和数据结构,我还真找到了一本适合我阅读的书,通俗易懂,图形结合,外加UP主网站和视频辅助,重温经典读物《剑指offer》找一位UP主跟着学习labuladong。
2.整体思路:我是B站重度用户,还是找一位有经验的Up主,看看别人是怎么学习的吧。工欲善其事必先利其器,在学习之前有个整理的框架性的思维外加科学的训练和实践才能让人事倍功半。
3.实践部分:当然还是要用我的利器:AI学编程,我准备了豆包和KIMI两位大神级人物来辅助我学习。我先喂给他一个提示词。然后建立一个会话专题,这个会话里讨论的都是清一色的题目,不要掺杂任何别的信息,需要维护这个对话信息并命名加以区分。
4.如何去设计提示词:首先,按照我的思路理念参照《剑指offer》中的思考模式,测试用例先行,伪代码是程序的浓缩精华用伪代码来做提示,最好图形结合便于理解,外加语言精炼形象生动,开2个App,豆包因为可以语音交互,所以让他通俗易懂且形象生动的讲解C++并附上例子加以说明,把抽象的概念形象化。KIMI是个理科生,你就专注严谨有序且表达精准的写伪代码,告诉我时间复杂度和空间复杂度,在此基础上要力求精益求精代码从通俗易实现到高效率运行。
5.学习完了之后一定要温故而知新,要写博客记录解题思路和解题方法总结,这样不断总结和反思才能有提高,这里要做两件事情1.做的题目归纳一下 ,用简洁概括的话术来表示,用费曼学习法把自己整理的逻辑分享给朋友这是个思维反刍的过程。2.不断地主动回忆,回忆课程中的要点,解题中遗漏的知识点。3.把他整理成博客或者整理成视频分享到B站上。
提示词:
假设你是一名资深的算法专家,我现在正要在力扣上做算法题,你的任务是给我提供算法的解题思路并为我生成这道题目的伪代码,这个过程一定要特别注意:算法的边界值特殊情况和特殊异常处理并给出尽可能多的测试用例来佐证实现的思路,最好附上该算法的动画链接能帮助我更加形象直观的理解算法
提示词:
假设你是一名资深的C++专家,我们一起来探讨C++算法知识,我目前正在准备C++笔试, 你的任务是用通俗的语言帮助我理解C++的概念和实际开发中运用的技术,要求语言简洁通俗易懂,针对抽象的概念你可以举具体的例子来形象生动的说明抽象的概念。
经过三周的实践和反思,我已经总结出了整个方案的架构和脉络,那我基于这么多专家和UP主的经验来整理我的方法论体系:
首先,来整理下逻辑脉络:数据结构和算法分两大块:数据结构,算法设计,数据结构先学,算法穿插在其中,学习算法的过程用动画演示来理解每一步的核心要义,学习完一个算法马上刷一组题,按分类来刷,由浅入深 难度由易到难层层递进。做完之后写算法解题报告,实践的过程需要整理出常用的算法模版并反复观看动画熟悉每个模版的每句代码的含义。实现代码之前让AI生成伪代码,基于伪代码自己写代码实现并编写测试用例测试。
说到数据结构:核心的知识点压缩成两块后,数据结构就两个核心结构,数组+链表。数组的初始化,下表计算用一个excel表格画出来并标记坐标点找规律。链表需要指针和结构体或者class,当然析构每次new出来的对象不要忘记回收,这个就是成对思维,你创建对象必定要毁灭对象,成对思维的形成会让你避免遗漏。然后链表学完了,学习下递归的定义,树就自然而然的学习到了,学习递归的时候会引出一个数据结构:栈,递归算法是一种自顶向下查找的算法,这就是递,再将每一步结果feedback到上一层,这个就是归。也可以看成是回溯的过程。这个反向归的过程需要用栈这个结构去实现。栈又是可以用数组和链表来实现的, 可以按照递归定义把树创建出来,然后说到树定定义完毕后 ,把他的操作过程列出来。再学习到遍历的时候,BFS和DFS也会遇到一个新的数据结构就是队列,那学习的过程中有一个特殊到一般的过程,先学特殊的树,二叉树。二叉树又分几种特殊的形态,提到压缩会学到哈夫曼编码。在广度优先中会用到。再说到图,图是树的一种推广,然后再学下BFS,BFS和DFS有两种实现:迪杰斯特拉算法和A*算法。这两种具体算法的实现也会在寻路径等应用中有其具体的实践和应用。
说到算法:贯穿始终的有两个概念:时间复杂度和空间复杂度。时间复杂度的概念更加重要,现代计算机存储容量已经够大了,不需要再去关注空间够不够用的问题,但是特殊的嵌入式设备可能的确需要考虑。算法提到了一点:分而治之,递归就是一种分治法的实现思路,后面再学到复杂的比如神经网络中的一些算法也可以看到这些影子,决策树就是和一颗二叉树类似。递归的时间复杂度太大了,取决于节点的数量,因为这里有很多重复的计算,所以我们要优化要剪枝,剪枝其实就是用一个备忘数组把一些计算过的值给记录下避免重复计算。剪枝又会提到贪心和动态规划。动态规划最难的是写状态转移方程,提到这个点我也觉得有点困难,后面学习的过程再去针对专题做梳理和细化 。
这么一梳理之后,有了一个完整的框架性思维,就如同行云流水一般,接下去就是不断细化,这就是一个分而治之的过程,直到把题搞会作对,把测试用例Pass,而后总结又是一个不断反刍的过程,翻来覆去死去活来最后让你不断地在大脑中形成内循环让大脑不断地处于活跃的状态
转载:http://www.ideaeye.cn/index.php/2025/06/09/%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84%e5%92%8c%e7%ae%97%e6%b3%95%e6%95%b4%e7%90%86/
参考资料:https://space.bilibili.com/14089380?spm_id_from=333.337.0.0
https://space.bilibili.com/31337561?spm_id_from=333.337.0.0
剑指offer : https://blog.csdn.net/rocling/article/details/88020817