高级主定理用于分治递归
分治法是一种算法,其范例基于将问题递归地分解成多个类似类型的子问题,这些子问题可以很容易地解决。
示例
让我们来看一个例子,来了解更多关于分治法的知识:
function recursive(input x size n) if(n < k) Divide the input into m subproblems of size n/p. and call f recursively of each sub problem else Solve x and return
组合所有子问题的结果并返回原始问题的解决方案。
解释:在上述问题中,问题集被细分为更容易解决的较小子问题。
分治法的Master定理是一个分析定理,可用于确定递归关系算法的Big-O值。它用于查找算法所需的时间,并将其表示为渐近符号形式。
上述示例中问题运行时间的示例:
T(n) = f(n) + m.T(n/p)
对于大多数递归算法,可以使用Master定理找到算法的时间复杂度,但Master定理在某些情况下可能不适用。Master定理不适用的情况包括:当问题T(n)不是单调的,例如T(n) = sin n。问题函数f(n)不是多项式。
由于Master定理在这些情况下查找时间复杂度效率不高,因此设计了用于递归递归的**高级Master定理**。它旨在处理以下形式的递归问题:
T(n) = aT(n/b) + ø((n^k)logpn)
其中n是问题的大小。
a = 递归中的子问题数,a > 0
n/b = 每个子问题的大小,b > 1,k >= 0,p是实数。
为了解决这类问题,我们将使用以下解决方案:
- 如果a > bk,则T(n) = Θ(nlogba)
- 如果a = bk,则
- 如果p > -1,则T(n) = Θ(nlogba logp+1n)
- 如果p = -1,则T(n) = Θ(nlogba loglogn)
- 如果p < -1,则T(n) = Θ(nlogba)
- 如果a < bk,则
- 如果p >= 0,则T(n) = Θ(nklogpn)
- 如果p < 0,则T(n) = Θ(nk)
使用高级Master算法,我们将计算一些算法的复杂度:
二分查找 - T(n) = Θ(logn)
归并排序 - T(n) = Θ(nlogn)
广告