【问题标题】:How to find complexity of a recursion where the step is defined in terms of a cube root? [closed]如何找到根据立方根定义步骤的递归的复杂性? [关闭]
【发布时间】:2013-06-17 09:21:48
【问题描述】:

T(1) = 1

T(n) = T(n^1/3) + 1

我该如何解决? “解决”我的意思是找到它的“复杂性”(我真的不知道用英语怎么说),例如 O(nlogn) ecc。

我猜不出替换方法;我用迭代方法无处可去,我不能应用主定理。

我到了这里,但我不确定:

T(n) = T(n^(1/3^k))) +k

你能给我一些建议吗?

【问题讨论】:

  • 在我看来这不是递归的,T(n) 不是用T(n-1) 编写的。我错过了什么?
  • 还有其他中断标准吗?如果n 没有初始化为 1,那么n 永远无法达到 1。
  • 致投票结束的成员作为题外话:这是一个题外话;也许您会在数学论坛上更快地获得解决方案,但这不会使问题成为 Stack Overflow 上的题外话。
  • 我认为这对 SO 来说非常有话题。但是,如果它必须转到不同的论坛,我认为 Comp sci se (cs.stackexchange.com) 会比数学的更好。
  • 顺便说一句,n 的稳定值约为 2.32 (wolframalpha.com/input/?i=n%20%3D%20n%5E%281%2F3%29%20%2B%201)

标签: algorithm time-complexity


【解决方案1】:

如果这是一个递归函数,那么我所理解的是 T(n)= T(integerpart(cubicsquare(n)) +1 ;

在这种情况下:

S=0;
if (n>=1){
S++;
N= n;
while  (N>1){
N=integerpart(N^1/3);
S++;
}

}
T(n)= S ;

这意味着 T(n) 是一个简单的函数:具有整数界限,keme 区间的宽度为 2^(3^k) - 2^(3^(k-1))

你可以看到,第一个区间是 if n in ]1,8[ T(n)=2;那么如果 n 在 [8,252[ ,T(n)=3... 所以,正如我们可以说的那样 t(2^(3^k)) = k+1 ; 然后 t(n) ~O(ln(ln(n))/ln(3)) (考虑套件 2^3^k)

【讨论】:

    【解决方案2】:

    我将尝试制定一些可能的解决方案。您可以根据进一步的限制选择一个。

    递归将一直运行到n 变为1。这是:

    1 = n^(1/3^k)
    

    或更一般地

    b = n^(1/3^k)
    

    其中k 是递归深度。为k 解决这个问题:

    ln(b) = 1/3^k * ln(n)
    ln(ln(b) / ln(n)) = k * ln(1/3)
    -ln(ln(b) / ln(n)) / ln(3) = k
    

    如果我们将 b 设置为 1,则方程将无法求解,因为未指定 ln(0)。这相当于无限递归。

    但是,我们可以说在最后一次递归中n 应该是“大约 1”。所以我们实际上有一个b != 1。那么k就是:

    k = -ln(ln(b) / ln(n)) / ln(3)
      = -ln(c1 / ln(n)) / c2
      = -(ln(c1) - lnln(n)) / c2
      = (-c3 + lnln(n)) / c2
    

    这应该是O(log log n)

    如果您想将n 截断为其整数部分,则计算会变得非常混乱,因为您在每一步之后都有特殊情况。但是,我们可以通过指定b = 1.999999 来近似结果。这将产生与上述相同的复杂性。

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多