关于终止函数定义的问题。
我们有一个相对简单的函数来计算输入的⌊log2n⌋。
LOG2
Configuration: {[r, n] | Integers r ≥ 0 and n ≥ 1}
[r, n] -> [r + 1, n/2] if n > 1 ∧ n even
[r, n] -> [r, n − 1] if n > 1 ∧ n odd
我们被问到一些终止函数μ(r,n)是否正确。
μ(r,n)= n 是正确的:函数的结束条件是 n = 1 ,因为那时 r = ⌊log₂n⌋⌋。
然而,μ(r,n)= 2n + r 显然也是正确的。
此外,μ(r,n)= n + r 不正确
我理解终止函数μ(r,n)只是函数终止所依赖的变量,(在这种情况下 n 达到1 ,)那么为什么 2n + r 是一个终止函数?
在此上下文中,终止函数μ(r,n)的确切定义是什么?
答案 0 :(得分:1)
对于进入循环的状态,终止函数μ必须为正,并且每次迭代都严格减少。那,加上自然数的有序性确保你的循环总是终止。 (注意,不要求μ(s)= 1 s 退出循环,只是它每次迭代总是减少。)
选择μ(r,n)= n + r 的问题是 n = 2 的问题,我们有
因此转换[r, n] -> [r + 1, n / 2]
有效。但是,在这种情况下,我们有
μ(r',n') = Definition of r' and n'
μ(r+1,n/2) = Definition of μ
r + 1 + n/2 = Rearrange via n = 2
r + 2 =
r + n = Definition of μ
μ(r, n)
所以μ并没有严格降低。