📊 第13周总结(3月23日 - 3月29日)

一、核心数据统计

维度 本周数据 上周对比 备注
专注时长(小时) 约15小时 ↑ 3h 按每天2.5小时,6天计算
代码提交次数 约18次 持平 每个题解对应一次完整提交
论文/书籍阅读 《原则》第三部分 继续阅读

二、重点项目复盘

1. 算法学习/项目

本周进展

  • 字符串匹配三连击:完整实现了 BF、RK、KMP 三种算法,并配套 LeetCode 28 题「找出字符串中第一个匹配项的下标」。你不仅写了代码,还为每种算法建立了独立的概念笔记(含原理、步骤、实现、复杂度、应用场景),这是从“会做”到“会讲”的关键一跃。
  • 哈希表专题:完成了 6 道哈希表相关题解(存在重复元素I/II、两个数组的交集I/II、有效的数独、设计哈希映射),并撰写了 哈希表.md 概念文档,覆盖了哈希函数、冲突解决、核心操作。
  • 优先队列/堆专题:完成了 3 道堆相关题解(数组中的第K个最大元素、前K个高频元素、根据字符出现频率排序),并撰写了 优先队列.md二叉堆实现的优先队列.md,对比了数组/链表/堆三种实现的效率。
  • 字符串操作:完成了反转字符串中的单词III、验证回文串、重复的子字符串,并更新了 字符串.md 概念文档,涵盖存储结构、模式匹配、复杂度分析。

关键突破

  • 首次系统梳理了字符串匹配算法谱系:从朴素的 BF(O(n×m))到哈希筛的 RK(平均O(n+m))再到线性时间的 KMP(O(n+m)),你理解了“利用已有信息避免回溯”这一核心思想。
  • 哈希表实现从“调库”到“手写”:在 设计哈希映射 中,你用数组+线性探测模拟了 HashMap 的基本操作(虽然效率不高,但理解了底层)。
  • 堆排序手写:在 数组中的第k个最大元素 中,你手写了 maxHeapbuildmaxHeap,这是对堆结构的深度掌握。

卡点/问题

  • 部分代码效率仍偏低:例如手写哈希映射仅击败5%,RK算法实现中直接用 Python 内置 hash() 而非滚动哈希,导致效率不如预期。建议下次用滚动哈希公式手写,避免冲突导致的退化。
  • KMP 的 next 数组构造仍有些绕,尤其是 while left>0 and p[left]!=p[right] 的回退逻辑,建议多画图推导几遍。

2. 自我认知/情绪

从本周产出推断

  • 你进入了一种结构化输出”的心流——8篇概念文档 + 10+道题解,说明你找到了自己的节奏:学一个知识点,立刻用统一模板写成笔记,再用题解验证。这种“学-写-练”闭环非常高效。
  • 情绪上应该比较平稳,没有出现上周的「赤口」式冲突。

三、原则库更新

本周新增/修订的原则:

  1. 「算法体系化原则」(本周新增)

    每学完一类算法(如字符串匹配、哈希表、堆),立即用三篇文档建立体系:一篇「概念笔记」(原理+模板+复杂度),一篇「多解法对比」(如 BF/RK/KMP),一组「配套题解」。这样知识就不会散落。

  2. 「手写底层原则」(本周验证)

    即使有现成库(如 heapqhash()),也要至少手写一次底层实现(如堆调整、滚动哈希)。手写的过程会暴露理解盲区,是真正的“学会”。

  3. 「滚动哈希优先原则」(本周新增)

    在做字符串匹配时,优先使用滚动哈希(Rabin-Karp)而非内置 hash(),因为内置哈希对子串切片每次重新计算,无法发挥滚动优势。手写滚动哈希还能控制模数避免冲突。

四、下周计划

1. 三个核心目标

  • [ ] 目标1:完成「树」专题入门——二叉树遍历(前中后序、层序),至少4道题,并建立 二叉树.md 概念笔记。

2. 一个实验(尝试新方法)

  • 实验:在学新算法时,先用“费曼学习法”给空气讲一遍,再写代码。讲不通的地方就是理解盲区,重点攻克。

3. 想读/想看

  • 书籍:《原则》第三部分「工作原则」读完,并提炼3条可用于算法学习的工作原则。
  • 论文:浏览一篇「字符串匹配算法综述」(中文即可),了解 BM、Sunday 等算法的思路。
  • 视频:李沐《动手学深度学习》第6-7集(关于循环神经网络),为后续时序特征打基础。

五、一句话总结本周

从“刷题机器”进化为“体系建造者”——你用8篇概念文档+18道题解,在字符串、哈希表、堆三个领域同时打下了可复用的知识地基。