封闭条件下的局部最优解
我确实看过一个北大本科生写的 C 红黑树教程,不过不是计算机的,是生物工程的。有些地方很有重复发明创造的美:比如什么“数组型红黑树”,这个有专门的名词叫游标实现(相对于指针实现而言),而且通行的做法是对分配和访问做抽象层,而不是硬编码重写算法逻辑。
现代C++的标准做法就是用模板把算法逻辑和底层存储/访问方式解耦——STL本身就是这个思想的产物。容器负责内存管理,迭代器负责访问抽象,算法只跟迭代器交互,完全不关心底层是堆上分配的指针链表还是数组池里的游标索引还是内存映射文件里的偏移量。具体到红黑树这个场景,如果你要做 cursor-based implementation,现代的做法就是把node的引用类型做成模板参数或者通过 traits/policy class抽象出来——比如一个NodeTraits里定义reference_type是指针还是数组下标,定义get_left()/get_right()/get_parent()的具体实现,然后红黑树的旋转、插入、删除这些算法逻辑完全用这些抽象接口写,一行都不需要改。这就是 policy-based design,Alexandrescu 在 Modern C++ Design 里系统化阐述的那套思路。
看一个人凭自己的智力从零推导出一个已知结论,那个推导过程本身是有思维力量的。但同时这种美也带着一丝悲凉,因为它的本质是信息获取效率的失败。如果他读过Sedgewick的Algorithms,或者看过任何一本覆盖cursor-based implementation的教材,他可以在十分钟内知道这个东西叫什么、标准做法是什么,然后把自己的智力投入到真正未解决的问题上去。
所以我后来看高考也是和看这位一个感想。你说水平不高?他确实又能想到。你说水平高?那从效果上来看未必。高考和那位北大同学的红黑树教程,底层确实是同一个悖论——在封闭条件下的高强度智力表演。
高考数学压轴题就是一个典型:出题人在一个极度受限的知识范围内(高中数学大纲),设计出需要极高技巧性的题目,考生也在这个封闭空间内发展出极精致的解题策略。你说这些人不聪明?解法确实巧妙,思维密度很高。你说这些人水平高?他们花了三年时间精研的那些技巧,在大学数学的视角下往往就是一个已知定理的trivial special case。比如高考里那些令人窒息的不等式放缩技巧,本质上就是在不允许使用微积分的条件下硬做微积分该做的事。从某个角度看这很惊艳——你在被绑住一只手的情况下还能打拳。但从效率角度看,为什么不直接解绑那只手?
这就是“水平不高但能想到”的本质:在人为制造的约束下发展出的局部最优解。信息环境决定了智力的产出效率。封闭系统能够筛选出在封闭条件下的强者,但这个”强”的定义本身是被封闭条件扭曲的。 高考筛选出的是“在不允许用高等工具的前提下最能做数学体操的人”,知乎筛选出的是“在约束内最能写的人”,那位同学展示的是“在信息隔离下最能独立推导的人”。每一种都是真实的能力,但每一种都在被约束条件浪费着。同样的智力,在信息充裕的环境里可以站在巨人肩膀上往前推进,在信息贫乏的环境里只能花大量精力重新铺设别人已经铺好的路。
所以人的水平高低,其实不太取决于多刻苦,而取决于他所在的信息环境。好比很多人的圈子其实从来接触不到土地财政、条块分割、便利化额度这些东西,他们也理解不了税基和流动性是什么;很多技术人认为只有网络环境有区别,这就是一种无知:他们没有资产做配置、没有事业要运营,你没有办法给你认知以外的东西定价。所以很多人只会说铁饭碗、稳定,而有个更准确的词他们不会用,叫国家信用背书。