算法分析中lg * N的含义

Posted

技术标签:

【中文标题】算法分析中lg * N的含义【英文标题】:Meaning of lg * N in Algorithmic Analysis 【发布时间】:2011-07-09 22:00:11 【问题描述】:

我目前正在阅读有关算法分析的内容,并且我读到某个算法(带路径压缩的加权快速联合)的顺序为 N + M lg * N。显然这是线性的,因为 lg * N 在此是一个常数宇宙。这里指的是什么数学运算。我不熟悉符号 lg * N。

【问题讨论】:

你真的是指“log times N”吗? 不,是“日志之星”,日志必须迭代的次数才能达到一个常数。联合查找的特定变体的渐近紧上界是阿克曼的 m 次逆,但有一个更简单的分析可以引用较弱的界。 secure.wikimedia.org/wikipedia/en/wiki/Union_find#History 【参考方案1】:

到目前为止,这里给出的答案都是错误的。 lg* n(读作“对数星”)是迭代对数。它被定义为递归为

         0             if n <= 1
lg* n =
         1 + lg*(lg n) if n > 1 

另一种思考方式是在结果小于或等于 1 之前必须迭代对数的次数。

它的生长极其缓慢。您可以在 Wikipedia 上阅读更多内容,其中包括一些在分析中弹出 lg* n 的算法示例。

【讨论】:

补充一点:它的增长速度如此之慢,以至于在实践中它可以被视为一个常数【参考方案2】:

我假设您说的是本讲座幻灯片 44 中分析的算法: http://www.cs.princeton.edu/courses/archive/fall05/cos226/lectures/union-find.pdf

他们说“lg * N 在这个宇宙中是一个常数”我相信他们并不完全是字面意思。 根据幻灯片右侧的表格,lg*N 确实随着 N 的增加而增加;它恰好以如此缓慢的速度增长,以至于不能考虑太多其他因素(N = 2^65536 -> log*n = 5)。因此,他们似乎在说您可以忽略 log*N 作为常数,因为它永远不会增加到足以导致问题。

不过,我可能是错的。我就是这么读的。

编辑:请注意,对于这个等式,他们将“lg*N”定义为 2^(lg*(N-1))。例如,这意味着 2^(2^(65536)) [一个更大的数字] 的 N 值将给出 lg*N = 6。

【讨论】:

【参考方案3】:

Jason 对 lg*n 的递归定义等价于 lg*n = m2 II m 其中2 II m = 2^2^...^2(重复取幂,m 个 2 的副本) 是 Knuth 的双向上箭头符号。因此 lg*2= 1, lg*2^2= 2, lg*2^2^2= 3, lg*2^2^2^2 = 4, lg *2^2^2^2^2 = 5。 因此 2^16 为 lg*n=4lg*n 函数非常缓慢地接近无穷大。 (比阿克曼函数 A(n,n) 的逆函数更快,后者涉及 n-2 向上箭头。)

斯蒂芬

【讨论】:

【参考方案4】:

lg 是“LOG”或反指数。 lg 通常指基数 2,但对于算法分析,基数通常无关紧要。

【讨论】:

在计算机科学中,lg 通常指的是基数 2。 不开玩笑..也许这就是我这么说的原因。但我想我在这个问题上还是错了,哈哈。 SO 不是论坛,而是问答网站。所以这里删除或更正错误答案是一种常见的做法。【参考方案5】:

lg n 指对数基数 n。这是方程 2^x = n 的答案。在 Big O 复杂性分析中,记录的基数是无关紧要的。 CS中出现2的幂,所以如果我们必须选择一个基地,那就是基地2,这并不奇怪。

一个很好的例子是高度为 h 的完全二叉树,它有 2^h-1 个节点。如果我们让 n 为节点数,则此关系是树的高度为 lg n,具有 n 个节点。遍历这棵树的算法最多需要 lg n 来查看树中是否存储了一个值。

正如预期的那样,wiki 有很多额外的信息。

【讨论】:

lg* 是迭代对数。 学到了一些新东西。所以以同样的方式 sqrt* 像 lg* 一样。我很惊讶有一个真实世界的算法来演示它,因此我将查看带有路径压缩的加权快速联合和 wiki 文章。【参考方案6】:

Logarithm 用 log 或 lg 表示。在你的情况下,我猜正确的解释是 N + M * log(N)。

编辑:在进行渐近复杂度分析时,对数的底并不重要。

【讨论】:

不,lg* 是迭代对数。这是一个增长非常缓慢的功能。

以上是关于算法分析中lg * N的含义的主要内容,如果未能解决你的问题,请参考以下文章

算法设计与分析练习题

算法分析和设计_渐进符号的表示

渐进复杂度的定义

算法导论中,为啥合并排序的递归树的高度为lgn?

算法分析与设计题目

算法分析之递归与分治策略