设计函数的恒定时间算法

时间:2017-08-16 18:36:40

标签: algorithm constant-time

这个问题刚刚过去了:

函数G(m)定义如下:

a)如果m <= 100则G(m)= G(G(m + 11))

b)如果m>然后G(m)= m-10

根据上述问题,我如何设计一个计算G(m)的恒定时间算法?

1 个答案:

答案 0 :(得分:0)

(b)部分显然可以在恒定时间内计算,假设m适合整数变量。

问题要求证明的棘手部分是(a)部分是不变的。然后是O(1)时间。这可以使用数学归纳法或其他方式来完成。

以下是归纳证明。

首先,根据定义,G(101)等于101-10 = 91。

对于90 <= n <= 100,它保留G(n) = G(G(n + 11)),其中n + 11 > 100。因此G(n)等于G(n + 11 - 10) = G(n+1),即91。

由此,十个等式G(91 - 1) = 91G(91 - (1 - 1)) = 91,...,G(91 - (1 - 10)) = 91都是真的。这是一般归纳的基础。

归纳步骤:假设{1}},G(91 - i) = 91,...,G(91 - (i - 1)) = 91对于从1到某个边界的所有数字G(91 - (i - 10)) = 91都是正确的。

然后i。从基础步骤开始,我们知道G(91 - (i + 1)) = G(G(91 - i - 1 + 11)) = G(G(91 - (i - 10)))。在上面的等式中插入这个,我们得到G(91 - (i - 10)) = 91,这也是已知的91.由此可以得出G(91)的假设也是如此。

因此,对于所有i+1G(91 - n)等于91。归纳证明了。

用于在Python中计算n >= 1的常量时间算法示例:

G
相关问题