O(n logstar(n))和O(n)之间是否存在真正的复杂性? 我知道O(n sqrt(logstar(n)))和其他类似的函数介于这两者之间,但我指的是一些不是由logstar(n)构成的原始函数。
答案 0 :(得分:6)
是的,有。最着名的例子是Ackermann inverse functionα(n),它比log * n增长得慢得多。它出现在诸如不相交集森林数据结构的上下文中,其中每个操作的摊销成本为O(α(n))。
您可以将log * n视为需要将log应用于n以将值降低到某个固定常量(例如2)的次数。然后,您可以将此概括为log ** n,这是您需要将log *应用于n以将值降低为2所需的次数。然后,您可以定义log *** n,log **** n ,以类似的方式记录*****等。 α(n)的值通常以你需要放在log ** ... * n中的星数给出,以使值降至2,因此它的增长速度远远小于迭代对数函数。
直观地说,您可以将log n视为取幂的倒数(重复乘法),log * n是tetration的倒数(重复乘幂),log ** n是{{3的倒数Ackermann函数有效地将求幂的n阶泛化应用于数n,因此它的倒数对应于你需要应用它的取幂程度有多高。这导致了令人难以置信的缓慢增长的功能。
我曾经见过的在一个严肃的语境中使用的最滑稽缓慢增长的函数是α*(n),你需要将Ackermann反函数应用于数n以将其降低到某个固定值的次数不变。几乎不可想象的是,你需要投入大量的输入才能找回任何接近10的东西。如果你很好奇,pentation。