IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Asymptotic Analysis

共 2 篇相关文章

IT 累计浏览 4,025

数学中的极限思想求时间复杂度

这篇讲的是如何用更严谨的数学方法来计算算法的时间复杂度。通常大家习惯直接保留函数中的最高次项,比如将 T(n) = 2n^5 + 3n^2 - 1 简写为 O(n^5)。文章指出,这种简便做法其实不够严格,其背后的正确依据应当是数学中的极限概念。 作者详细推导了极限判定法:当 n 趋向无穷大时,T(n) 除以某个猜想 f(n) 与一个常数系数的乘积,若结果为一个常数,则 f(n) 就是 T(n) 的时间复杂度。用这个方法重新计算开头的例子,可以严谨地得出 O(n^5) 的结论。 更重要的是,极限思想能解决一些常规方法棘手的对比。比如比较多项式 n^k 和指数 k^n(k 为大于1的常数)的复杂度,直接判断很模糊。文章通过对两边取对数再求极限,清晰地证明 n^k / k^n 的极限为 0,从而得出结论:当 n 足够大时,O(n^k) 的效率远优于 O(k^n)。最后,文章还展示了如何将指数增长的思想应用于分析循环次数,推导出类似 i = i*2 这种模式的时间复杂度为 O(log₂n)。 这篇内容为理解算法效率提供了一个更坚实的数学视角,帮助开发者不仅知其然,更知其所以然。

IT 累计浏览 3,321

为什么算法渐进复杂度中对数的底数总为2

在分析算法时,我们常看到 O(log₂n) 或 O(n log₂n) 这样的复杂度表达,但很少有人深究:为什么对数的底总是 2?为什么不出现以 3 为底的情况?这篇文章从这个看似理所当然的细节出发,揭示了算法复杂度表示中一个容易被忽略的知识点。 作者以大家熟悉的归并排序为例,引出了“三分式归并排序”这个变体——即每次将数组三等分而非二等分进行递归。通过分析它的实际时间复杂度,文章直观地展示了一个关键事实:不同底数的对数之间只相差一个常数因子。在渐进复杂度的大 O 表示法中,这个常数会被忽略,因此 O(log₂n) 与 O(log₃n) 本质上是等价的。 既然如此,为何惯例上总是书写底数 2?文章指出,这主要源于直觉和历史习惯。因为二分法(每次问题规模减半)是计算机科学中最常见、最基础的分解方式,它直接对应了二叉树的结构和许多经典算法(如二分搜索)的核心思想。使用底数 2 能让人立刻联想到“将问题规模反复减半”的过程,这使得算法的逻辑与复杂度表达在直觉上形成了统一。 因此,底数的选择并非数学上的严格要求,而是一种服务于理解与沟通的工程约定。这篇文章的价值在于,它帮读者厘清了这一约定背后的原理,让我们在写下 O(log n) 时,能更清晰地理解其背后的计算图景。