我一直在尝试确定以下编制算法的渐近运行时间。
算法Alg-1和Alg-2都作为输入并生成一个包含n个条目的数组。
Alg-1将是
ALG-1(A[1,...,n])
1: B= ALG-1(A[1,...,⎿n/2⏌])
2: C= ALG-2(A[⎿n/2⏌+1,...,n])
3: return ALG-2(B,C)
考虑到ALG-2的运行时间f(n)是Θ(√n),我想确定ALG-1的渐近运行时间。
我正在尝试为算法建立重复,然后通过Master定理解决它,但我甚至不知道如何开始。如果有人可以帮我解决一下,我会很高兴。
答案 0 :(得分:1)
让T_k
表示在大小为ALG-1
的输入上运行n = 2^k
所需的时间。我将假设您的ALG-2(B, C)
表示ALG-2
在B
和C
的连接上运行,其长度为n
。然后,看起来你有复发
T_k = T_{k - 1} + sqrt(n / 2) + sqrt(n) = T_{k - 1} + C * sqrt(2^k),
其中C
是常量。如果您通过T_{k - 1}
等方式撰写T_{k - 2}
来继续扩展,那么
T_k = C * sqrt(2^k) + C * sqrt(2^{k - 1}) + C * sqrt(2^{k - 2}) + ...
这是一个几何序列,因此总和与主要术语的顺序相同(基本上,第一个术语与所有剩余术语的总和大致相同)。因此,T_k
的顺序为sqrt(2^k)
或sqrt(n)
。