会员
周边
新闻
博问
闪存
赞助商
YouClaw
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
Ofnoname
万水千山只等闲
博客园
首页
联系
订阅
管理
2026年5月10日
从回溯到分支限界:重新理解搜索、剪枝与最优性证明
摘要: 很多程序员第一次接触“搜索”,是在 LeetCode 上的全排列、组合、子集、N 皇后、数独、单词搜索这些题里。这些题做多了以后,我们很容易形成一套肌肉记忆:递归、选择、撤销选择、剪枝。 但搜索算法真正重要的地方,并不在递归本身。 递归只是遍历方式。搜索真正关心的是:如何把一个巨大的候选空间组织成一
阅读全文
posted @ 2026-05-10 23:07 Ofnoname
阅读(113)
评论(0)
推荐(0)
2026年5月9日
大整数相乘的 Toom-Cook 算法
摘要: 编程时写整数乘法,通常我们不会太关心底层细节。a * b 写起来非常自然,好像一条语句就能瞬间完成。 对固定宽度整数来说,比如 32 位或 64 位整数,乘法通常确实可以由少量机器指令完成,成本可以近似看成常数。但如果是两个几千位、几万位甚至更大的整数相乘,情况就不一样了。此时 * 背后不再是一条简
阅读全文
posted @ 2026-05-09 18:28 Ofnoname
阅读(133)
评论(0)
推荐(0)
2026年5月2日
决策树和算法下界:为什么排序逃不开 nlogn?
摘要: 在学习算法时,我们肯定会关注效率。于是我们会分析时间复杂度,比如 \(O(n)\)、\(O(n\log n)\)、\(O(n^2)\)。 但这只是算法分析的一半。另一半问题是:这个问题本身最快能做到多快?也就是说,在某个给定的计算模型下,不管你设计什么算法,它都不可能突破某个理论下界。 如果一个算法
阅读全文
posted @ 2026-05-02 18:19 Ofnoname
阅读(159)
评论(0)
推荐(0)
2026年4月30日
图灵机、时间与空间复杂度:从 P/NP 到 PSPACE、EXPTIME
摘要: 上一篇文章里,我们已经讲过 P、NP 和 NP-Complete:P 是可以高效求解的问题,NP 是可以高效验证答案的问题,而 NP-Complete 是 NP 里最“硬核”的一批问题。 但如果继续追问下去,会出现一些更底层的问题:什么叫算法?怎样算高效?怎么精确定义时间和空间? 作为程序员,我们很
阅读全文
posted @ 2026-04-30 15:16 Ofnoname
阅读(180)
评论(0)
推荐(0)
2026年4月27日
计算与判定:P、NP、NP-hard 和 NP-complete 问题
摘要: 学习算法课学习到后期,都会进入一个看起来很理论话题:P、NP、NP-hard、NP-complete。这些概念想回答的核心问题是给各种问题和算法分类: 某个问题到底是“可以高效解决”,还是“很可能没有高效精确算法”? 这个判断非常重要。因为如果一个问题本质上是 NP-complete,那么你继续死磕
阅读全文
posted @ 2026-04-27 18:27 Ofnoname
阅读(210)
评论(2)
推荐(2)
2026年4月26日
动态规划:矩阵链乘法最优问题
摘要: 矩阵链乘法是动态规划中的经典区间 DP 问题。它的重点并不是如何计算两个矩阵相乘,而是:给定一串矩阵相乘,如何加括号,才能让总计算代价最小? 如果矩阵 \(A\) 的大小是 \(a \times b\),矩阵 \(B\) 的大小是 \(b \times c\),那么 \(AB\) 的大小是 \(a
阅读全文
posted @ 2026-04-26 17:16 Ofnoname
阅读(29)
评论(0)
推荐(0)
2026年4月25日
复杂度的均摊分析法
摘要: 动态数组扩容问题是均摊复杂度分析最经典的应用: 动态数组的尾插 push_back,有时会触发扩容; 一旦扩容,就要申请更大的内存、搬运旧元素、再插入新元素。某一次操作的代价完全可能是 \(O(n)\) 但是,动态数组尾插的复杂度是均摊 \(O(1)\) 类似的现象其实非常多:单看某一次操作,它们都
阅读全文
posted @ 2026-04-25 14:55 Ofnoname
阅读(84)
评论(0)
推荐(0)
2026年4月24日
主定理的进阶:Akra–Bazzi 定理
摘要: 之前我们讲了主定理,用来解决: \( T(n)=aT(n/b)+f(n) \) 的复杂度 但现实里的递归,往往没有这么整齐。比如每个子问题的规模不同: \[T(n)=T(n/2)+T(n/3)+n \]这时候,主定理就不能直接用了。这篇我们讲一个更强的工具:Akra–Bazzi 定理。 主定理的扩展
阅读全文
posted @ 2026-04-24 17:04 Ofnoname
阅读(86)
评论(0)
推荐(0)
2026年4月11日
O(n) 时间求解数组第 k 大
摘要: “求数组中第 k 大的元素”是一个非常经典的问题。 最直接的做法是先排序,再取排序后的第 k 个元素。但排序的时间复杂度是 O(n log n)。能不能做到 O(n)? 问题定义 给定一个长度为 n 的数组 nums,求其中第 k 大的元素。 例如: nums = [3, 2, 1, 5, 6, 4
阅读全文
posted @ 2026-04-11 22:46 Ofnoname
阅读(37)
评论(0)
推荐(0)
2026年4月10日
动态规划入门必学之走方格问题
摘要: 很多人第一次接触动态规划,都是从“走格子”开始的:在一个二维网格上,从起点走到终点,每次只能做有限几种移动,问方案数、最小代价,或者最大收益。 第一题:最小路径和 给定一个 \(n \times m\) 的非负整数网格 \(a\),从左上角出发走到右下角,每次只能向右或向下走一步,路径上的数字都要累
阅读全文
posted @ 2026-04-10 18:40 Ofnoname
阅读(190)
评论(0)
推荐(1)
下一页