跳转至

学习指南

如何使用本学习系统

作者: 誌 更新日期: 2025-01-25


📚 文件结构说明

Text Only
算法/
├── README.md                      # 总览和学习路线
├── progress.md                    # 学习进度追踪
├── 学习指南.md             # 本文件:学习指南
├── 01-基础/                 # 基础准备阶段
│   ├── 01-复杂度分析.md # 复杂度分析
│   ├── 02-数组.md      # 数组详解
│   ├── 03-链表.md # 链表详解
│   ├── 04-栈.md      # 栈完全详解
│   ├── 05-队列.md      # 队列完全详解
│   ├── 06-哈希表.md # 哈希表完全详解
│   └── 07-树.md       # 树完全详解
├── 02-核心算法/            # 核心算法阶段
│   ├── 01-排序算法.md    # 排序算法完全指南
│   ├── 02-搜索算法.md  # 搜索算法完全详解
│   └── 03-动态规划.md         # 动态规划完全指南
├── 03-高级算法/        # 进阶算法阶段
│   ├── 01-图算法.md    # 图算法完全详解
│   ├── 02-贪心算法.md              # 贪心算法完全详解
│   ├── 03-字符串算法.md   # 字符串算法完全详解
│   ├── 04-回溯算法.md        # 回溯算法完全详解
│   ├── 05-并查集.md          # 并查集完全详解
│   ├── 06-字典树.md                # Trie树完全详解
│   ├── 07-线段树.md        # 线段树完全详解
│   └── 08-数学算法.md     # 数学算法完全详解
├── 04-实战练习/                   # 实战练习
│   ├── 01-LeetCode精选100题.md                 # LeetCode 100+题详解
│   ├── 02-大厂面试题.md       # 大厂面试专项讲解
│   ├── 03-AI与ML应用.md           # AI/ML中的算法应用
│   ├── 04-代码优化.md            # 代码优化完全指南
│   └── 05-设计模式.md     # 设计模式完全详解
└── 模板/                     # 代码模板
    ├── Python模板.md       # Python算法模板(Markdown格式)
    └── C++模板.md          # C++算法模板(Markdown格式)

🚀 快速开始

第一步:了解学习路线

README.md 开始,了解整个学习路径和各阶段目标。

第二步:开始学习

  1. 打开 01-基础/01-复杂度分析.md
  2. 阅读概念和示例
  3. 运行代码示例
  4. 完成练习题

第三步:记录进度

学习进度.md 中记录你的学习进度。

第四步:使用模板

复制 模板/ 中的模板代码,修改并运行。


📖 学习方法

三遍学习法

对于每个算法,建议学习三遍:

第一遍:理解概念 - 阅读理论解释 - 理解算法思想 - 看懂示例代码

第二遍:手写实现 - 不看资料,自己实现算法 - 对比参考代码,找差距 - 理解每一步的作用

第三遍:优化应用 - 尝试优化代码 - 应用到实际问题 - 总结经验教训

练习方法

  1. 先自己想:看到题目,先思考5-10分钟
  2. 再看题解:如果不会,再看参考答案
  3. 理解后重写:理解题解后,自己重新写一遍
  4. 隔天再写:第二天再重新写一遍,检验是否真正掌握
  5. 总结规律:记录解题思路和易错点

使用AI工具

不要: - 直接让AI写代码 - 复制粘贴不理解

应该: - 让AI解释你不理解的概念 - 让AI检查你的代码逻辑 - 让AI给出变式题目 - 让AI分析代码的时间复杂度

示例对话

Text Only
❌ 错误用法:
用户:帮我写一个快速排序
AI:(给出代码)
用户:(复制粘贴,不理解)

✅ 正确用法:
用户:这是我写的快速排序代码,帮我看看有没有问题
[代码]
AI:你的代码有这些问题...
用户:能解释一下为什么这里要用i而不是i+1吗?
AI:因为...

📅 学习计划

每日学习建议

工作日(每天1-2小时): - 30分钟:阅读学习资料 - 30分钟:手写代码实现 - 30分钟:LeetCode练习(1-2题)

周末(每天2-3小时): - 60分钟:复习本周内容 - 60分钟:总结整理笔记 - 60分钟:刷题(3-5题)

学习周期

阶段 时间 内容
阶段一 2-3周 基础准备(复杂度、数据结构)
阶段二 4-6周 核心算法(排序、搜索、DP)
阶段三 4-6周 进阶算法(图、贪心、字符串)
阶段四 持续 实战强化(刷题、应用)

总计:约3-4个月完成基础学习,之后持续练习。


🎯 学习检查点

每完成一个主题,问自己:

  1. 理解检查:我能用自己的话解释这个算法吗?
  2. 代码检查:我能不看资料手写出代码吗?
  3. 应用检查:我能说出这个算法的至少一个应用场景吗?
  4. 变式检查:我能解决这个算法的变体问题吗?

如果以上都是"是",恭喜你掌握了!可以进入下一个主题。


💡 学习技巧

技巧1:画图理解

遇到难理解的算法,画图!

示例:快速排序的分区过程

Text Only
数组: [3, 6, 8, 10, 1, 2, 1]
pivot = 1

[3, 6, 8, 10, 1, 2, 1]
 ↑              ↑
 i              j

分区后: [1] | 1 | [6, 8, 10, 2]

技巧2:用例子验证

用具体例子验证你的理解。

示例:动态规划的状态转移

Python
# 理论:dp[i] = dp[i-1] + dp[i-2]
# 实例:
dp[0] = 1
dp[1] = 1
dp[2] = dp[1] + dp[0] = 1 + 1 = 2 
dp[3] = dp[2] + dp[1] = 2 + 1 = 3 

技巧3:对比记忆

对比相似算法,记住区别。

示例:BFS vs DFS

特性 BFS DFS
数据结构 队列
最短路径
内存

技巧4:建立模板库

为每类算法建立通用模板。

示例:二分搜索模板

Python
def binary_search(arr, target):
    left, right = 0, len(arr) - 1

    while left <= right:
        mid = left + (right - left) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1

    return -1

技巧5:记录错误

记录常见错误,避免重复。

错误记录模板

Markdown
### 错误1:二分搜索的边界条件
- **错误代码**:mid = (left + right) // 2
- **问题**:可能整数溢出
- **正确写法**:mid = left + (right - left) // 2
- **日期**:2025-01-25

📝 笔记建议

记什么?

  1. 核心概念:用自己的话解释
  2. 算法步骤:分步骤记录
  3. 代码模板:通用模板
  4. 易错点:常犯的错误
  5. 应用场景:实际应用例子

怎么记?

使用Markdown格式,便于检索:

Markdown
## 算法名称

**核心思想**- 要点1
- 要点2

**算法步骤**1. 第一步
2. 第二步

**代码模板**```text
# 代码
```

**易错点**- 错误1
- 错误2

**应用场景**- 场景1
- 场景2

🔗 推荐资源

书籍

  1. 《算法(第4版)》 - Sedgewick
  2. 适合初学者
  3. Java实现,图解丰富

  4. 《算法导论》 - CLRS

  5. 理论深入
  6. 适合进阶

  7. 《剑指Offer》 - 何海涛

  8. 面试导向
  9. 中文,实用

在线资源

  1. LeetCode中国https://leetcode.cn/
  2. 刷题平台
  3. 中文题解

  4. VisuAlgohttps://visualgo.net/zh

  5. 算法可视化
  6. 理解算法过程

  7. 代码随想录https://programmercarl.com/

  8. 系统讲解
  9. 中文教程

视频课程

  1. Coursera:Algorithms (Princeton)
  2. 英文授课
  3. 理论扎实

  4. B站:尚硅谷、左程云算法课

  5. 中文授课
  6. 适合面试

🎓 进阶建议

学完基础后

  1. 专项突破:选择一个方向深入
  2. 字符串算法
  3. 图算法
  4. 动态规划进阶

  5. 实战项目:应用到实际项目

  6. 优化现有代码
  7. 参与开源项目

  8. 参加竞赛:提升算法能力

  9. LeetCode周赛
  10. Codeforces
  11. ACM/ICPC

持续学习

  • 每周:刷题10-15道
  • 每月:总结学习内容
  • 每季度:复习基础算法

💬 学习社区

推荐社区

  1. LeetCode讨论区:看别人的题解
  2. 知乎:算法学习经验分享
  3. GitHub:优秀的算法仓库
  4. Discord/微信群:找学习伙伴

交流技巧

  • 分享你的解法:教别人是最好的学习
  • 提问具体:不要问"怎么写",问"为什么"
  • 记录总结:形成自己的知识体系

📞 遇到问题怎么办?

问题排查流程

  1. 先看文档:检查是否遗漏关键信息
  2. 画图理解:画图帮助理解
  3. 搜索资料:Google/Stack Overflow
  4. 请教AI:让AI解释概念(不是直接要代码)
  5. 社区求助:在LeetCode/知乎提问

提问模板

Text Only
## 问题描述
我正在学习XX算法,遇到了XX问题

## 我的理解
我认为...(描述你的理解)

## 我的尝试
我尝试了...(描述你的尝试)
代码如下:
```text
# 你的代码
```

## 我的困惑
我不明白为什么...(具体问题)

## 我已经尝试过的方法
1. ...
2. ...

🎉 最后的建议

成功要素

  1. 坚持:每天进步一点点
  2. 实践:多写代码,多刷题
  3. 总结:及时复习和总结
  4. 交流:与他人讨论学习

心态调整

  • ❌ 不要:和其他人比进度
  • ✅ 应该:和昨天的自己比

  • ❌ 不要:追求题量不求质量

  • ✅ 应该:理解透彻每道题

  • ❌ 不要:死记硬背代码

  • ✅ 应该:理解算法思想

祝你学习顺利!加油!💪

如有问题,随时查看本指南或查阅相关资料。

记住:算法学习是一个长期过程,不要急于求成。坚持练习,你会看到进步!