高德纳数的证明:
假设有一个高德纳数,定义为递归式
(3.16)K0=1Kn+1=1+min(2K⌊n/2⌋,3K⌊n/3⌋),n⩾0 \tag{3.16} \begin{aligned} K_0 &= 1\\ K_{n_+1} &= 1 + min(2K_{\lfloor n/2 \rfloor} ,3K_{\lfloor n/3 \rfloor}), n \geqslant 0 \end{aligned} K0Kn+1=1=1+min(2K⌊n/2⌋,3K⌊n/3⌋),n⩾0(3.16)
求证:
Kn⩾n K_{n} \geqslant n Kn⩾n
这个用直接证明法是有难度的,书上也没有给出直接证明的方法. 不过它有习题2.5的答案. 我尝试结合例题答案,给出我自己的证明过程:
复习一下反证法:反证用条件语句p→qp\to qp→q等价于它的倒置$ \lnot q \to \lnot p的事实意味着条件语句的事实意味着条件语句的事实意味着条件语句p\to q可以用它的倒置可以用它的倒置可以用它的倒置 \lnot q \to \lnot p$来证明.
在高德纳数中, ppp是(3.16)(3.16)(3.16), qqq是Kn⩾nK_{n} \geqslant nKn⩾n
直接由ppp 求证qqq比较困难,于是尝试$ \lnot q \to \lnot p$
$ \lnot q 是是是K_{n} < n$
也就是说:K⌊n′/2⌋<⌊n′/2⌋, K⌊n′/3⌋<⌊n′/3⌋K_{\lfloor n'/2 \rfloor} < \lfloor n'/2 \rfloor {\footnotesize ,}\ K_{\lfloor n'/3 \rfloor} <\lfloor n'/3 \rfloorK⌊n′/2⌋<⌊n′/2⌋, K⌊n′/3⌋<⌊n′/3⌋
代入(3.16)(3.16)(3.16), 可得K0⩽0K_0 \leqslant 0K0⩽0 但实际上K0=1K_0 = 1K0=1. 因此(3.16)(3.16)(3.16)不成立.
也就是$ \lnot q \to \lnot p$
所以可知p→qp \to qp→q, 也就是(3.16)(3.16)(3.16)可以推出K_{n} \geqslant n$
含有底和顶的递归关系经常在计算机科学中出现.
(3.17)n=⌈n/2⌉+⌊n/2⌋
n= \lceil n/2 \rceil + \lfloor n/2 \rfloor \tag{3.17}
n=⌈n/2⌉+⌊n/2⌋(3.17)
3.4 mod:二元运算
这一小节没什么内容,主要是介绍一下取余运算.
一些定义:
n=m⌊n/m⌋⎵商+nmod  m⎵余数
n = \underbrace{m\lfloor n/m \rfloor}_{\text{商}} + \underbrace{n \mod m }_{\text{余数}}
n=商m⌊n/m⌋+余数nmodm
(3.21)xmod  y=x−y⌊x/y⌋,y̸=0
x \mod y = x-y\lfloor x/y \rfloor, y \not= 0 \tag{3.21}
xmody=x−y⌊x/y⌋,y̸=0(3.21)
(3.22)xmod  0=x
x \mod 0 = x \tag{3.22}
xmod0=x(3.22)
分配率, 分配率是mod最重要的代数性质
(3.23)c(xmod  y)=(cx)mod  (cy)
\tag{3.23}
c(x \mod y) = (cx) \mod (cy)
c(xmody)=(cx)mod(cy)(3.23)