算法:找出分治算法的递归方程

时间:2017-03-26 17:52:18

标签: algorithm recursion runtime divide-and-conquer

我有以下"分而治之?"算法A1。

A1将 size n 的问题划分为 size n / 4 的4个子问题。 然后,解决它们并将解决方案组合成 12n时间

如何编写给出算法运行时的递归方程。

3 个答案:

答案 0 :(得分:1)

回答问题"我如何编写给出算法运行时的递归方程"

你应该这样写: 设T(n)表示算法的输入大小为n

的运行时间

T(n)= 4 * T(n / 4)+ 12 * n;

答案 1 :(得分:1)

尽管主定理确实给出了答案的捷径,但必须了解Big O运行时的派生。分而治之递归关系的格式为T(n) = q * T(n/j) + cn,其中q是子问题的数量,j是我们为每个子问题划分数据的数量,而cn是在每个级别划分/组合/处理每个子问题所花费的时间。无论运行时是什么,cn也可以是cn^2c

在您的情况下,您有4个大小为n / 4的子问题,每个级别在12n时间内得到解决,给出了T(n) = 4 * T(n/4) + 12n的递归关系。从这种重复发生中,我们可以得出算法的运行时间。鉴于这是分而治之的关系,我们可以假设基本情况为T(1) = 1

为解决重复问题,我将使用一种称为替换的技术。我们知道T(n) = 4 * T(n/4) + 12n,所以我们将替代T(n/4). T(n/4) = 4 * T(n/16) + 12(n/4)。将其插入方程式即可得到T(n) = 4 * (4 * T(n/16) + 12n/4) + 12n,我们可以将其简化为T(n) = 4^2 * T(n/16) + 2* 12n。同样,在等式中我们还有更多工作要做,以捕获各个级别的工作,因此我们用T(n/16), T(n) = 4^3 * T(n/64) + 3* 12n代替。我们看到了这种模式的出现,并且知道我们要一直深入到基本情况T(1),以便我们替代得出T(n) = 4^k*T(1) + k * 12n。该方程式定义了分而治之算法中的总工作量,因为我们已经替换了其中的所有层,但是,我们仍然有一个未知变量k,并且我们希望它以n的形式得到{通过k求解方程n/4^k = 1,我们知道已经达到了仅对一个变量调用算法的地步。我们求解n并得到k = log4n。这意味着我们已经完成了log4n个替换。我们将其插入k并获得T(n) =4^log4n*T(1) + log4n * 12n。我们将其简化为T(n) =n *1 + log4n * 12n。由于这是Big O分析,并且由于对数的基本属性的变化,log4nO(log2n)中,因此我们得到T(n) = n + 12n * logn,这意味着T(n)在Big O中的nlogn

答案 2 :(得分:0)

最佳描述的递归关系由下式给出:

T(n)=4*T(n/4)+12*n

其中T(n) =给定算法的运行时间,输入大小为n,4 =无子问题,n/4 =每个子问题的大小。

使用主定理时间复杂度计算为:theta(n*log n)