Loading [MathJax]/jax/output/HTML-CSS/jax.js

数据结构中的代入法


在这里,我们将了解如何使用代入法来解决递推关系。我们将通过两个例子来更好地理解它。

假设我们正在使用二分查找技术。在这种技术中,我们检查元素是否存在于末尾。如果它存在于中间,则算法终止,否则我们一次又一次地从实际数组中取左子数组和右子数组。因此,在每一步中,数组的大小都会减小 n / 2。假设二分查找算法需要 T(n) 的时间来执行。基本条件需要 O(1) 的时间。因此,递推方程如下所示:

T(n)={T(1)forn1\2T(n2)+cforn>1

求解 - 我们将在每一步中代入公式以获得结果 -

T(n)=T(n2)+c

通过代入 T(N/2) 我们可以写成,

T(n)=(T(n4)+c)+c

T(n)=T(n4)+2c

T(n)=T(n8)+3c

T(n)=T(n2k)+kc

现在如果 (n2k) 达到 1,则表示 2k 等于 n。所以 k 的值为 log2𝑛

T(n) 的复杂度为 ϴ(log n)

类似地,如果我们选择另一个例子,比如归并排序,那么在这种情况下,我们将列表分成两部分。这种划分会持续进行,直到列表大小仅为 1。之后,我们将它们按排序顺序合并。合并算法需要 O(n) 的时间。因此,如果归并排序算法需要 T(n) 的时间,那么将其分成两半,并对每一半执行相同的任务,它们将分别需要 T(n/2) 等等。因此,递推关系如下所示:

T(n)={T(1)forn=1\2T(n2)+cnforn>1

求解 - 我们将在每一步中代入公式以获得结果 -

T(n)=2T(n2)+cn

通过代入 T(N/2) 我们可以写成,

T(n)=2(2T(n4)+cn2)+cn

T(n)=4T(n4)+2cn

T(n)=8T(n8)+3cn

T(n)=2kT(n2k)+kcn

现在如果 (n2k) 达到 1,则表示 2k 等于 n。所以 k 的值为 log2𝑛。而 T(n) 将为 -

𝑇(𝑛) = 𝑛𝑇(1) + 𝑐𝑛 log2𝑛

复杂度为 θ(n log n)

更新于: 2020年8月10日

5K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告