高德纳数的证明:
假设有一个高德纳数,定义为递归式
(3.16) K 0 = 1 K n + 1 = 1 + m i n ( 2 K ⌊ n / 2 ⌋ , 3 K ⌊ 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)
求证:
K n ⩾ n K_{n} \geqslant n Kn⩾n
这个用直接证明法是有难度的,书上也没有给出直接证明的方法. 不过它有习题2.5的答案. 我尝试结合例题答案,给出我自己的证明过程:
复习一下反证法:反证用条件语句
p
→
q
p\to q
p→q等价于它的倒置$ \lnot q \to \lnot p
的
事
实
意
味
着
条
件
语
句
的事实意味着条件语句
的事实意味着条件语句p\to q
可
以
用
它
的
倒
置
可以用它的倒置
可以用它的倒置 \lnot q \to \lnot p$来证明.
在高德纳数中,
p
p
p是
(
3.16
)
(3.16)
(3.16),
q
q
q是
K
n
⩾
n
K_{n} \geqslant n
Kn⩾n
直接由
p
p
p 求证
q
q
q比较困难,于是尝试$ \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 \rfloor K⌊n′/2⌋<⌊n′/2⌋, K⌊n′/3⌋<⌊n′/3⌋
代入
(
3.16
)
(3.16)
(3.16), 可得
K
0
⩽
0
K_0 \leqslant 0
K0⩽0 但实际上
K
0
=
1
K_0 = 1
K0=1. 因此
(
3.16
)
(3.16)
(3.16)不成立.
也就是$ \lnot q \to \lnot p$
所以可知 p → q p \to q p→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
⌋
⎵
商
+
n
m
o
d
  
m
⎵
余数
n = \underbrace{m\lfloor n/m \rfloor}_{\text{商}} + \underbrace{n \mod m }_{\text{余数}}
n=商
m⌊n/m⌋+余数
nmodm
(3.21)
x
m
o
d
  
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)
x
m
o
d
  
0
=
x
x \mod 0 = x \tag{3.22}
xmod0=x(3.22)
分配率, 分配率是mod最重要的代数性质
(3.23)
c
(
x
m
o
d
  
y
)
=
(
c
x
)
m
o
d
  
(
c
y
)
\tag{3.23} c(x \mod y) = (cx) \mod (cy)
c(xmody)=(cx)mod(cy)(3.23)