📜  猜测和确认方法

📅  最后修改于: 2021-05-08 18:03:08             🧑  作者: Mango

该方法背后的基本思想是猜测答案,然后通过归纳证明其正确。此方法可用于解决任何复发。如果猜出了解决方案,然后尝试以归纳方式验证我们的猜测,通常要么证明成功(在这种情况下我们就完成了),要么证明失败(在那种情况下失败将帮助我们完善我们的猜测)。

例如,考虑重复发生: T(N) = √N*T(√N) + N 。这不符合大师定理要求的形式。仔细观察递归会给我们一个印象,它类似于分而治之的方法(将问题分为√N个子问题,每个子问题的大小为√N )。可以看出,在第一递归级别上,子问题的大小为N。所以,让我们猜测T(N) = O(N*log N) ,然后尝试证明猜测是正确的。

让我们首先尝试证明一个上限:

最后的不平等仅假设1 \le 1/2*clog N如果N足够大并且对于任何常数c,无论多么小,这都是正确的。

从上面的证明中,我们可以看到我们的猜测对于上限是正确的。现在,让我们证明这种重复发生的下界:

最后的不平等仅假设1 \ge  1/2*k*log N如果N足够大并且对于任何常数k,这都是不正确的。

从上面的证明中,我们可以看到我们的猜测对于下限是不正确的。

从以上讨论可以理解, Θ(N*log N)太大了但是怎么样Θ(N) ?下界很容易直接证明:

现在,让我们证明这个Θ(N)的上限:
T(N) = √N*T(√N) + N\\ \le √N*c√N + N\\ = N c+ N\\ = N (c + 1)\\ \nleq cN

从以上归纳,可以理解为Θ(N)太小了Θ(N*log N)太大了因此,我们需要大于N且小于N的东西N*log N ?怎么样N*√log N ?

证明的上限N*√log N

证明下界N*√log N

最后一步不起作用。所以, Θ(N*√log N)不起作用。 N和之间还有什么N*log N ?怎么样N*log(log N) ?

证明的上限N*log(log N)

证明下界N*log(log N)

从以上证明,可以看出T(N) \le N*clog(log N), if \ c \ge  1T(N) \ge  N*klog(log N), if \ k \le 1
从技术上讲,我们在两个证明中仍然缺少基本案例,但是在这一点上我们可以相当有信心T(N) = Θ(N*log(log N))