很多人学算法卡在同一个地方:能背出深度优先和广度优先的定义,能默写快速排序的模板,但一旦被问"这两种遍历到底差在哪、什么场景该用哪个",就只能含糊其辞。纸上推演和脑子里的想象之间,隔着一道看不见的墙。这门课要干的事,就是把这道墙拆掉——让算法的每一步执行都变成屏幕上能看见的东西,而不是藏在递归调用栈里的黑箱。

需要先说清楚:这不是一门从零讲数据结构的课,也不会带你刷几百道题。它的重点落在"看得见"三个字上,走的是可视化这条路,用七个具体应用把递归、遍历、随机模拟、分形生成这些核心思想摊开来讲。所以它更适合已经接触过算法、但概念始终没真正落地的人,而不是完全没写过循环和数组的初学者。

它到底解决什么问题

第一个要解决的问题是"递归恐惧症"。绝大多数人第一次写深度优先搜索时,都会在脑子里模拟调用栈,模拟到第三层就乱了。这门课不让你硬想,而是把递归过程一步步画出来——每一步走到哪、回溯到哪、当前路径是什么,全部实时呈现。当你能看见递归函数"下去又上来"的完整轨迹,再回头看那些绕人的题目,思路会清楚很多。走迷宫这一块就是专门干这个的,从读入迷宫数据、把迷宫画到界面上,到递归深度优先、非递归深度优先、广度优先三种解法的对比,一层层推进。有意思的是,它最后会把深度优先和广度优先放在一起讲它们的内在联系,这个角度是很多教材一笔带过的。

第二个要解决的问题是"算法和直觉脱节"。概率模拟那一部分很典型:蒙特卡洛方法求圆周率、三门问题、抽奖概率,这些问题的答案往往和人的第一直觉相反。光看公式推导印象不深,但如果你自己写代码跑十万次模拟,看着结果一点点逼近理论值,那种"原来是这样"的感受是看十遍书也换不来的。课程里还专门讲了不依赖可视化界面的纯计算版本,提醒你可视化只是手段,核心还是算法本身。

第三个问题是"不知道怎么把算法用出去"。学了一堆排序查找,却不知道能拿来做什么。分形图的绘制这一块给了很直接的回答:递归不只能遍历树,还能生成Sierpinski三角形、Koch雪花、Vicsek图形和分形树。这些图形背后是同一种递归思想,代码不长,效果却很直观,很适合拿来理解"自相似"这个概念。

适合什么基础的人

如果你完全没写过面向对象代码,直接上手会有点吃力。课程用的是Java,界面部分从JFrame讲起,会涉及继承、类、事件处理这些内容。所以最低限度的前提是:能读懂Java的基本语法,知道类和对象是怎么回事,写过一个带主函数的程序。如果之前只写过Python或者C,语法差异不是大问题,但要愿意花点时间适应Java的写法。

算法方面,你需要知道数组、栈、队列这些基础数据结构长什么样,听说过递归但可能不太熟练。课程不会花大篇幅重新讲这些,而是默认你有概念,然后直接用在具体例子里。如果你连"递归是什么"都要从头问,建议先补一点基础再回来,否则会跟不上节奏。

图形界面部分同样如此。GUI编程那一章讲的是怎么设置画布、怎么画基本图形、怎么做动画、抗锯齿和双缓存是什么、MVC在可视化里怎么落地。这些内容如果你之前完全没碰过,需要认真看,因为后面所有可视化的例子都建立在这套工具之上。好在它讲得比较实用,不是泛泛介绍API,而是围绕"怎么把算法画出来"这个目标来组织的。

建议先看哪几块

顺序很重要,别跳着看。第一章是热场和整体介绍,花不了多少时间,但能让你知道这门课大致要完成哪些项目,心里有个谱。第二章是GUI基础,看起来和算法没关系,其实是后面所有内容的地基。画布怎么建、图形怎么画、动画怎么动,这些不搞明白,后面走迷宫和分形就没法跟。特别是整理绘制工具类那一节,把重复的绘图代码抽出来,后面会反复用到。

第三章概率模拟可以先作为"甜点"看,因为它对GUI的依赖相对小一些。分钱问题的模拟、蒙特卡洛求PI、三门问题,这些例子独立性强,理解门槛不高,适合在啃完GUI基础后换换脑子,同时体会"随机"这种看似简单的概念能玩出多少花样。

第五章走迷宫是这门课的重头戏,建议放在第三章之后认真看。它把图的遍历讲得非常透彻:先处理迷宫文件、把迷宫可视化,再依次用递归深度优先、非递归深度优先、广度优先三种方式求解,最后对比它们的联系。这一块看懂了,图论入门就稳了。

第九章分形图绘制可以在最后看。它是对递归的另一种应用,从基础的递归绘制讲起,到Sierpinski、Koch雪花、Vicsek、分形树,加上交互控制。如果你对"算法能创造视觉美感"这件事感兴趣,这一章会很过瘾。

学完之后你能独立做什么

最直接的能力,是你能自己动手把一个算法过程可视化出来。给你一道迷宫题,你不光能写出求解代码,还能把它画在界面上,让人一眼看懂搜索过程。这个能力在面试里其实很加分——当别人只能白板推演时,你能说清楚每一步的执行细节。

其次,你能独立实现几种经典的随机模拟。蒙特卡洛方法求面积、三门问题的验证、简单抽奖模型,这些都能自己从零写出来,并且知道什么时候该用模拟、什么时候该用解析解。这种判断力比会写代码更重要。

再进一步,你能用递归生成分形图形。这不是炫技,而是真正理解递归的一个标志:当你能自如地控制递归的深度、分支和终止条件,去画出想要的图案,说明递归思维已经内化了。以后遇到树形结构、回溯问题、分治算法,都会轻松很多。

最后,你会对深度优先和广度优先有本质性的理解,而不只是记住两个名字。什么情况下深度优先会爆栈、什么时候广度优先更合适、它们为什么会产生不同的搜索顺序,这些问题你都能结合自己写过的可视化程序说清楚。

资料怎么配合练习

看视频只是第一步,光看不练等于没学。建议每看完一个小节,就自己动手把代码敲一遍,不要直接复制。尤其是走迷宫那一章,自己从读文件开始写起,哪怕写错了、界面画歪了,调试的过程本身就是学习。可视化最大的好处就是错了能立刻看出来,这是你在纯算法练习里享受不到的反馈速度。

概率模拟部分,可以故意改参数做实验。比如蒙特卡洛模拟的次数从一万改到一百万,看结果收敛的速度变化;三门问题里改成四扇门、五扇门,看结论还成不成立。这种改动会逼你真正理解代码在干什么,而不是照着抄一遍完事。

分形部分适合当成小项目来做。先照着实现一遍基本图形,然后试着改参数、加交互、换颜色,甚至自己设计一个新分形。GUI部分整理出来的工具类要反复用,用熟了写起来会很顺手。

遇到卡壳的地方,别急着往下看答案,先自己对着可视化的界面调。既然算法是"看得见"的,那就让画面告诉你哪里出了问题。这种边写边看、边看边改的循环,才是这门课最该有的学习方式。

课程目录

📁 第5章 走迷宫
5-3 迷宫问题和图的遍历.mp4  [27.7 MB]
5-4 深度优先递归走迷宫.mp4  [62.1 MB]
5-6 非递归深度优先走迷宫.mp4  [34.5 MB]
5-8 广度优先走迷宫问题.mp4  [23.6 MB]
5-7  非递归深度优先走迷宫求解最终路径.mp4  [46.2 MB]
5-5 迷宫问题与回溯法.mp4  [40.9 MB]
5-1 处理迷宫文件.mp4  [59.9 MB]
5-2 迷宫可视化.mp4  [39.4 MB]
5-9 深度优先遍历和广度优先遍历的内在联系.mp4  [10.8 MB]
📁 第1章 欢迎来到看得见的算法
1-4  更多学习本课程的注意事项.mp4  [15.9 MB]
1-1 欢迎来到看得见的算法.mp4  [27.0 MB]
1-3 关于本课程的编程环境.mp4  [47.4 MB]
1-2 学习这个课程将完成什么项目?.mp4  [83.8 MB]
📁 第3章 概率模拟算法
3-5  不需要可视化的蒙特卡洛模拟.mp4  [27.8 MB]
3-6 三门问题【不易整理‖请关注:CunWorkNoteS】.mp4  [36.6 MB]
3-3 蒙特卡洛算法.mp4  [60.2 MB]
3-1 一个有意思的分钱模拟问题.mp4  [37.4 MB]
3-7 你一定能中奖吗?.mp4  [23.7 MB]
3-2 深入随机分钱问题.mp4  [41.4 MB]
3-4  使用蒙特卡洛算法求PI值.mp4  [91.9 MB]
📁 第9章 分形图的绘制:计算机生成艺术
9-8 利用分形绘制树.mp4  [42.0 MB]
9-6 Sierpinski 三角形.mp4  [51.1 MB]
9-4 为分形绘制添加交互.mp4  [33.7 MB]
9-7 编写Koch雪花分形.mp4  [30.5 MB]
9-1 分形到底是什么鬼.mp4  [55.1 MB]
9-5 Sierpinski 分形绘制.mp4  [56.9 MB]
9-3 Vicsek 分形图的绘制.mp4  [41.4 MB]
9-2 递归绘制基础-.mp4  [45.1 MB]
📁 第2章 要想看得见,先要搞定GUI编程
2-8 算法可视化中的MVC.mp4  [34.7 MB]
2-6 高级绘制特性:抗锯齿和双缓存.mp4  [38.0 MB]
2-3 设置画布与图形绘制基础.mp4  [39.7 MB]
2-7 动画基础.mp4  [79.0 MB]
2-1 使用JFrame.mp4  [32.7 MB]
2-5  整理绘制工具类【更多精选‖公众号:CunWorknotes】  .mp4  [41.8 MB]
2-2 创建属于自己的第一个JFrame子类.mp4  [20.4 MB]
2-9 键盘事件.mp4  [30.7 MB]
2-4 使用Graphics2D.mp4  [39.3 MB]
2-10 鼠标事件.mp4  [63.3 MB]
2-11 课程所使用的GUI编程模板.mp4  [43.4 MB]
📁 第4章 排序算法可视化
4-11 堆排序算法可视化【不易整理‖请关注:CunWorkNoteS】.mp4  [17.2 MB]
4-3 插入排序可视化..mp4  [32.5 MB]
4-8 在快速排序中随机选取标定点.mp4  [48.8 MB]
4-10 三路快速排序算法可视化.mp4  [35.8 MB]
4-4 在近乎有序的数据上测试插入排序算法.【持续更新‖免费提供:CunworknoteS】.mp4  [38.8 MB]
4-1 选择排序算法可视化..mp4  [34.2 MB]
4-6 归并排序算法可视化..mp4  [55.6 MB]
4-2 为可视化添加更多效果.mp4  [62.9 MB]
4-5  通过归并排序算法深入理解递归.mp4  [39.0 MB]
4-9 双路快速排序算法可视化.mp4  [35.5 MB]
4-7 快速排序算法可视化.mp4  [38.6 MB]
📁 第6章 随机迷宫生成
6-3 深度优先遍历生成迷宫.mp4  [41.9 MB]
6-4  非递归深度优先遍历生成迷宫.mp4  [39.9 MB]
6-6 随机队列生成迷宫.mp4  [23.2 MB]
6-7  迷宫生成的迷雾效果【整理不易‖记得关注:CunWorKNotes】.mp4  [41.4 MB]
6-8 生成随机性更强的迷宫.mp4  [61.1 MB]
6-5  广度优先遍历生成迷宫.mp4  [24.5 MB]
6-2 生成迷宫基础.mp4  [40.7 MB]
6-1 什么是迷宫.mp4  [21.9 MB]
6-9 更多迷宫问题.mp4  [20.9 MB]
📁 第7章 自己做一个扫雷游戏
7-2  扫雷代码基础.mp4  [56.2 MB]
7-6 为扫雷程序加入交互.mp4  [81.1 MB]
7-8 更多扫雷相关和floodfill算法的应用.mp4  [21.1 MB]
7-4 验证随机生成雷区算法的随机性.mp4  [27.5 MB]
7-5  Fisher-Yates洗牌算法的应用.mp4  [16.9 MB]
7-7 扫雷与floodfill算法.mp4  [32.2 MB]
7-3  随机生成雷区.mp4  [53.5 MB]
7-1  扫雷是什么鬼?扫雷里包含什么算法?.mp4  [13.1 MB]
📁 第8章 益智游戏自动生成解 - Move the Box
8-5 处理箱子掉落过程.mp4  [38.4 MB]
8-3 求解Move the Box的渲染【公重号:CunWorkNotes】.mp4  [126.8 MB]
8-2 求解Move the Box的数据架构.mp4  [106.9 MB]
8-9 更多人工智能相关【公重号:CunWorkNotes】.mp4  [20.8 MB]
8-1 玩一玩Move the Box.mp4  [127.9 MB]
8-6 处理箱子消除过程.mp4  [56.5 MB]
8-7 显示问题的解.mp4  [68.8 MB]
8-4 搜索框架.mp4  [118.8 MB]
8-8 更多搜索优化思路.mp4  [16.9 MB]
📁 第10章 看得见的算法,下季再见!
10-1 看得见的算法,下一季再见!.mp4  [9.4 MB]
project【更多精选‖公众号:CunWorknotes】  .zip  [2.3 MB]