§ 4·CS 地基5 prompts

数据结构与算法

所有代码人绕不过的部分。但不应试的话,*不是*手撕 LeetCode 难题。目标:AI 写完你*抄一遍*,至少看懂在写什么。

先读这部分
§ 4

数据结构与算法

所有代码人绕不过的部分。但不应试的话,*不是*手撕 LeetCode 难题。目标:AI 写完你*抄一遍*,至少看懂在写什么。

必须会(数学基础)
  • 模运算(a * b) % 9 = ((a % 9) * (b % 9)) % 9 这种基本法则。
  • 时间复杂度 / 空间复杂度。必须学会。O(n)、O(n²)、O(n log n) 是常用档位。
  • 摊还分析。了解概念:有些操作单次很贵但平均下来很便宜。
扫一眼就能过的
  • 表、栈、队列、优先队列,知道有这些东西,大概是啥,不用会写。
  • 算法设计思路:贪婪、分治、动态规划、搜索、排序、树、图
补充:找工作的同学

想面试转行的同学需要自己刷 LeetCode、上点难度。不转开发的话,知道概念即可。

动手做 · 提示词卡

把这段知识变成一段可执行的练习

以下 5 张卡,每张都是一段可复制的提示词。打开 Claude Code(或任何 LLM 终端),把卡里的提示词粘进去,AI 会陪你完成这一步。遇到不会的概念,把 AI 的回答贴回 卡里继续问下一步。可以一次做完,也可以分几次。

4 操作1 混合
Prompt 01操作★★

哈希 vs 数组 O(1) 对比

为什么要学数据一大慢得离谱。不知道哈希存在 = 让 AI 写垃圾代码。
打个比方找朋友电话:翻通讯录 vs 喊一声'小张',差 1000 倍。
VibeCoder 场景Claude Code 写循环里嵌套查列表,1 万数据卡死,你不知原因。

你听说哈希查找是 O(1),但没数据感受过到底快多少。

前置本地装好 Python 3
  1. 01AI 给代码,自己 python 跑。
  2. 02看两个耗时数字差几倍。
  3. 03把数据量从 10 万改成 100 万再跑一次。
  4. 04用一句话总结你看到的现象。
粘贴到 Claude Code(或任何 LLM 终端)
给我一段 Python 代码:生成 10 万个随机整数,分别放进 list 和 set,然后随机抽 1000 个数查找,分别测两种结构的耗时,最后打印 'list 平均查找毫秒' 和 'set 平均查找毫秒'。代码不要超过 30 行,加 5 行注释解释为什么 set 是 O(1)、list 是 O(n)。用 timeit 模块测时间,不要用 time.time。
✓ 完成判据控制台打印两个毫秒数;100 万规模时 list 比 set 至少慢 100 倍。
用 time.time() 测毫秒级会有抖动,必须让 AI 用 timeit。
Prompt 02操作★★

三种排序 10K 对比

为什么要学不懂算法复杂度,AI 写的快排你看不出和插入排序差几个数量级。
打个比方整理 1 万张扑克:一张张插 vs 分两堆合并,快慢悬殊。
VibeCoder 场景Claude Code 给你排序函数,10K 数据要 1 分钟,你不知是哪种算法。

你想直观感受插入排序、归并排序、快速排序在 10K 数据上的速度差。

前置本地装好 Python 3
  1. 01AI 给代码自己跑。
  2. 02看三个耗时数字。
  3. 03把长度改成 50000 再跑,看插入排序是不是飙得离谱。
  4. 04让 AI 解释为什么插入排序在长数据上拉胯。
粘贴到 Claude Code(或任何 LLM 终端)
写一段 Python 代码:生成一个长度 10000 的随机整数列表,分别用插入排序、归并排序、快速排序对它排序,并打印每种的耗时(毫秒)。每种排序函数自己实现,不能调内置的 sorted。最后打印一行对比,告诉我谁最快、谁最慢、慢多少倍。代码控制在 80 行内,加每种排序 1 行注释说时间复杂度。
✓ 完成判据三个耗时数字打印出来;50000 时插入排序明显慢于归并、快排。
Python 递归默认 1000 层,归并和快排在 10000 数据上可能要 sys.setrecursionlimit。
Prompt 03操作★★

树深度 log 验证

为什么要学不懂树查找为啥快。AI 说二叉树你点头,实则心里画问号。
打个比方字典找词:翻到中间砍一半,再砍一半,1 万词只翻 14 次。
VibeCoder 场景Claude Code 用 SortedList 存数据,你不知道为啥比 list 快。

你听说平衡二叉树 1000 节点深度大概 10,想自己看到这个数。

前置本地装好 Python 3
  1. 01AI 给代码自己跑。
  2. 02看 1000、10 万、100 万对应的深度。
  3. 03自己心算 log2(1000) ≈ 10、log2(10 万) ≈ 17、log2(100 万) ≈ 20。
  4. 04对照打印结果,验证关系成立。
粘贴到 Claude Code(或任何 LLM 终端)
写一段 Python 代码:用 sortedcontainers 库的 SortedList,或者你自己实现的简单平衡二叉树,依次插入 1000 个随机数,最后打印这棵树的最大深度。然后把节点数改成 100000、1000000,分别打印深度。最后告诉我 '深度 ≈ log2(节点数)' 这个关系成立不成立。代码不超过 50 行。
✓ 完成判据三个深度数字与你心算的 log2 值差距 < 3。
如果用普通二叉搜索树插入有序数据会退化成链表,深度会爆炸;必须用平衡的。
Prompt 04操作★★

并查集 1000 节点

为什么要学连通性问题 AI 给 DFS,1 万节点就爆栈,你不知道有更好的。
打个比方朋友圈:问'你认识张三吗',看你们是否同一群,不用一个个查。
VibeCoder 场景Claude Code 判社交分组用低效算法,你不知道该提'并查集'。

你想自己写一个并查集感受'近似 O(1)'的连通性查询。

前置本地装好 Python 3
  1. 01AI 给代码自己跑。
  2. 02看 50 次查询的耗时。
  3. 03把节点数和 union 数都乘 10,再跑一次。
  4. 04对比耗时增长是接近线性(≈ 10 倍)还是接近平方。
粘贴到 Claude Code(或任何 LLM 终端)
写一段 Python 代码实现一个并查集(按秩合并 + 路径压缩),支持 union(a,b) 和 find(a)。代码内自测:1000 个节点,随机 union 500 次,然后查询任意两点是否连通,打印 50 次查询的总耗时(微秒)。代码控制在 50 行内,加 3 行注释解释路径压缩在做什么。
✓ 完成判据耗时打印;10 倍数据规模耗时大概是 10 倍而不是 100 倍。
没有路径压缩的版本最坏情况会退化到 O(n),对比一下你就懂为啥要压缩。
Prompt 05混合★★★

AI 改 LeetCode hard

为什么要学你不刷题,但要会判断 AI 给的算法是否够用——不然抄到 O(n²) 都不知。
打个比方不当厨子也得知道菜难不难做,不然餐厅老板坑你也不懂。
VibeCoder 场景Claude Code 给你算法答案,你想知道有没有更优的,但不会自己写。

你不刷题不想转开发,但想体验一次 AI 改 hard 题的过程。

  1. 01AI 给你 O(n+m) 版本。
  2. 02自己 python 跑 3 个测试用例,看是否全过。
  3. 03全过就让 AI 用一段话讲最优解的二分思想。
  4. 04不要求自己实现最优解,懂思路就停。
粘贴到 Claude Code(或任何 LLM 终端)
我要做 LeetCode 第 4 题 寻找两个正序数组的中位数。请你扮演一个面试官:1. 用 3 行中文描述题意。2. 写一个能跑通但不最优(O(n+m))的 Python 版本,加注释解释思路。3. 告诉我最优解(O(log min(n,m)))的关键思想,但不要写代码。4. 给我 3 个测试用例(含 1 个边界用例),让我用第二步代码自测。最后告诉我作为非求职者,这道题让我理解'算法设计'这件事的最大收获是什么。
✓ 完成判据三个测试用例全过;你能用一句话复述最优解的思路。
不要让 AI 直接给最优解代码,那样你抄完啥都不懂。