博弈论算法为何能用数学公式预测胜负从Nim博弈到极大极小算法的完整LeetCode通关指南
1901年,哈佛大学教授Charles L. Bouton在《数学年鉴》上发表了一篇论文,题为"Nim, A Game with a Complete Mathematical Theory"。这篇论文揭示了一个令人震惊的事实:一种看似需要随机应变的策略游戏,竟然可以用一个简单的数学公式完全预测胜负。这个公式就是——异或和(XOR sum)。 ...
1901年,哈佛大学教授Charles L. Bouton在《数学年鉴》上发表了一篇论文,题为"Nim, A Game with a Complete Mathematical Theory"。这篇论文揭示了一个令人震惊的事实:一种看似需要随机应变的策略游戏,竟然可以用一个简单的数学公式完全预测胜负。这个公式就是——异或和(XOR sum)。 ...
1962年,Michael Held和Richard Karp在《Journal of the Society for Industrial and Applied Mathematics》上发表了一篇论文,提出了用动态规划求解旅行商问题(TSP)的算法。这个算法的时间复杂度是 $O(n^2 \cdot 2^n)$——虽然仍然是指数级,但相比暴力枚举的 $O(n!)$,已经是一个巨大的飞跃。这个算法的核心思想,正是后来被称为"状态压缩动态规划"(Bitmask DP / State Compression DP)的开山之作。 ...
1955年,Allen Newell、Cliff Shaw和Herbert A. Simon在RAND Corporation和卡内基梅隆大学开发Information Processing Language(IPL)时,创造了链表这一数据结构。这个发明最初是为了支持早期人工智能程序——Logic Theory Machine和General Problem Solver。有趣的是,链表在诞生之初就是为解决复杂问题而生,而今天它却成了面试中最基础却又最容易出错的考题之一。 ...
有 $n$ 个气球排成一排,每个气球上标有一个数字。当你戳破第 $i$ 个气球时,你会获得 nums[i-1] * nums[i] * nums[i+1] 枚硬币。如果相邻位置超出边界,则视为数字为 1 的虚拟气球。问题是:如何安排戳气球的顺序,才能获得最多的硬币? ...
1972年,Robert Tarjan发表了一篇不到五页的论文,提出了一个用单次深度优先搜索求解强连通分量的算法。这个算法不仅解决了有向图的核心问题,其核心思想——发现时间戳与追溯值的配合——后来被证明能够统一解决割点、桥检测、2-SAT可满足性等四大图论难题。Donald Knuth称其为"我最喜欢的实现之一"。 ...
给定一个长度为100万的数组和一个大小为k的滑动窗口,要求输出窗口每次移动后的最大值。最直观的做法是:对每个窗口位置,遍历窗口内的所有元素找出最大值——总的时间复杂度是$O(n \times k)$。当k接近n时,这退化成了$O(n^2)$。 ...
假设你需要从一个装满金条的宝库中选择带走一些金条,但背包容量有限。每根金条有重量和价值,如何在不超过背包容量的前提下,使带走的价值最大?这个看似简单的选择问题,实际上蕴含着动态规划最核心的思想——如何在约束条件下做出最优决策。 ...