LeetCode排序章:算法与生活的共鸣
(这份随想记录于2026.02.23,最近在整理学习笔记时再次感觉枯燥的数据结构与算法竟然也能讲解这么有意义,于是二次整理准备发出来) 新年假期将数据结构与算法的主体内容复习完毕,之后每天做几题保持手感,便不再投入过多精力于LeetCode——终于,真正开始AI与机器人领域的学习了。 最后几天读到《排序算法》章末,颇受触动。这段文字将数学原理讲得通透,又不失幽默,且意涵早已超越算法本身,引人反观生活。 二分思想部分,”一尺之捶,日取其半,logn世竭”的化用让我想到:许多被奉为人生哲理的大道理,在数学家眼中不过是可推导的逻辑,并无神秘可言。这让那些听起来格外抚慰人心的华语骤然褪色——一切皆有章法。我想,数学家的孤独或许正源于此:身心灵的慰藉在此处失效,唯有逻辑冰冷而诚实地运转。 “治”的过程被比作《活着》里的那句话:”小鸡长大了就变成了鹅,鹅长大了,就变成了羊,羊再长大了,就变成了牛……”初读只觉无厘头,下一秒却像被什么戳中了——这不就是文学版的量变引起质变吗?所有的成长都不会浪费,只要持续积累,终会有一个奇点让过往悉数兑现。 后文的猴子排序听着荒诞,却真有严谨的数学家亲自实践。一本正经地做无厘头的事,严肃得好玩。至于睡眠排序,读完后我想:若我是老板,手下员工交出这等算法,我必深吸一口气告诉自己莫激动——问题终究是能解决的,无非慢些。员工既是我招的,他们能想出如此”优秀”的算法,也有我的一份”功劳”。 最后的奇迹排序像是全章的升华。时间复杂度为正无穷的算法,竟能被写进教材,其价值已上升到人生哲理的高度。作者总结:若只是等待、什么也不做,终将一事无成。但我觉得这解读稍嫌狭隘。正如猴子排序——等待够久,说不定宇宙射线就让内存bit位翻转、数据自愈了呢?真正上过班的人或许有类似体验:一个棘手的难题搁在那儿,过段时间竟自然而然消解了,或问题本身就不复存在了。这难道不是奇迹算法的某种应用?甚至,难题放久了,工作没了,或公司没了,算不算某种维度的”解决”? 当然,最后这部分纯属开脑洞,当不得真。遇到问题,最优解仍是正面应对——就像我现在想换工作,虽然有了AI,虽然之后大部分是Vibe Coding,但是作为基本功测试必过在线测评,既然绕不开刷题,便坦然拥抱,将能做的事做到最好。与君共勉。 (排序算法章节内容节选,原文链接见文末) 归并排序: 总结起来,归并排序分成两步,一是拆分数组,二是合并数组,它是分治思想的典型应用。分治的意思是“分而治之”,分的时候体现了二分的思想,“一尺之棰,日取其半,logn 世竭”,治是一个滚雪球的过程,将 1 个数字组成的有序数组合并成一个包含 2 个数字的有序数组,再将 2 个数字组成的有序数组合并成包含 4 个数字的有序数组…如《活着》一书中的经典名句:“小鸡长大了就变成了鹅;鹅长大了,就变成了羊;羊再长大了,就变成了牛…” 猴子排序: 1913 年,法国数学家埃米尔·博雷尔出版了一本谈概率的书籍,其中介绍了「打字的猴子」概念,引发了「无限猴子定理」这个有趣的实验构想。 无限猴子定理:让一只猴子在打字机上随机地按键,当按键时间达到无穷时,几乎必然能够打出任何给定的文字,比如莎士比亚的全套著作。 这个理论说明「把一个很大但有限的数看成无限」的推论是错误的。猴子精确地通过键盘敲打出一部完整的作品发生的概率是极其低的,但并不是零。 2003 年,普利茅斯大学艺术媒体实验室课程的教师和学生使用 2,000 英镑津贴做了这个实验,结果打出了 5 张几乎全是S的纸,没有一个完整的句子。 无限猴子定理启发出了一个排序算法:把待排序的数组交给猴子,只要猴子不断地打乱数组,总会有一次排序成功!这个算法被称为猴子排序,英文名是 bogo-sort(英文名源于 Quantum bogodynamics)。其中,可以使用「快速排序」章节中介绍的洗牌算法来打乱数组。 Random random = new Random(); private void bogoSort(int[] arr) { while (true) { if (isAscendingSorted(arr)) break; shuffle(arr); } } public […]
LeetCode排序章:算法与生活的共鸣 Read More »