我正在阅读有关算法分析的内容,我读到某种算法(加权快速联合路径压缩)的顺序为N + M lg * N.显然这是线性的,因为lg * N是一个常量宇宙。这里提到了什么数学运算。我不熟悉符号lg * N.
答案 0 :(得分:27)
到目前为止给出的答案是错误的。 lg* n
(读作“log star”)是迭代对数。它被递归地定义为
0 if n <= 1
lg* n =
1 + lg*(lg n) if n > 1
另一种思考方式是在结果小于或等于1之前必须迭代对数的次数。
它变得非常缓慢。您可以在Wikipedia上阅读更多内容,其中包括在分析中弹出lg* n
的算法示例。
答案 1 :(得分:0)
我假设您正在讨论本讲座第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))。例如,意味着N值为2 ^(2 ^(65536))[更大的数字]将给出lg * N = 6。
答案 2 :(得分:0)
杰森的 lg * n 的递归定义相当于
当 2 II m <= n <1时, lg * n = m 2 II(m + 1)
其中
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}&lt; = n&lt; 2 ^ {16}&lt; = n&lt; 2 ^ {65536} 的。
函数 lg * n 非常缓慢地接近无穷大。
(快于Ackermann函数 A(n,n)的倒数,其中包含 n-2 向上箭头。)
斯蒂芬
答案 3 :(得分:-3)
Logarithm由log或lg表示。在你的情况下,我猜正确的解释是N + M * log(N)。
编辑:在进行渐近复杂度分析时,对数的基数无关紧要。
答案 4 :(得分:-3)
lg是“LOG”或反指数。 lg通常指基数2,但对于算法分析,基数通常无关紧要。
答案 5 :(得分:-3)
lg n指日志基数n。它是等式2 ^ x = n的答案。在Big O复杂性分析中,记录的基础是无关紧要的。在CS中出现2的强度,所以如果我们必须选择一个基数就不足为奇了,它将是基数2.
它出现的一个很好的例子是高度为h的完全二叉树,它有2 ^ h-1个节点。如果我们让n是节点的数量,那么这个关系就是树是高度lg n,有n个节点。遍历此树的算法最多需要lg n来查看值是否存储在树中。
正如所料,维基有很多额外的信息。