跳到主要内容

東北大学 工学研究科 電気・情報系 2014年8月実施 専門科目 問題5 計算機2

Author

祭音Myyura (co-authored with GPT 5.6 SOL)

Description

日本語原題

Fig. 5 に示す再帰関数 ff を考える。ここで,関数 mod(x,y)\operatorname{mod}(x,y) は整数 xx を整数 yy で割った余りを返し,式 “if e1=e2e_1=e_2 then e3e_3 else e4e_4” の値は,e1e_1 の値が e2e_2 の値に等しければ e3e_3 の値に,そうでなければ e4e_4 の値に等しい。また,入力 ppqqpqp\ge q)は非負の整数であると仮定する。

(1) f(901,255)f(901,255) を計算せよ。計算の過程も示すこと。

(2) 任意の非負の整数 ppqqpqp\ge q)に対して,f(p,q)f(p,q) の計算が停止することを示せ。

(3) f(p,q)f(p,q) を計算する際,nn 回目の再帰関数呼び出しにおける qq の値を qnq_n で表す。nn 回目(n3n\ge3)の再帰関数呼び出しが行われた場合,qn<qn2/2q_n<q_{n-2}/2 が成り立つことを示せ。

(4) 問(3)の関係を用いて,f(p,q)f(p,q)q>0q>0)を計算するための再帰関数呼び出しの回数は O(logq)O(\log q) であることを示せ。

f(p,q) =
if q=0 then p
else f(q,mod(p,q))

题目描述

给定非负整数 pqp\ge q,函数

f(p, q) =
if q == 0 then p
else f(q, mod(p, q))

其中 mod 为余数。

  1. 计算 f(901,255)f(901,255),写出过程。
  2. 证明任意允许输入均使计算终止。
  3. 令第 nn 次调用的第二参数为 qnq_n,证明只要第 nn 次调用发生且 n3n\ge3,就有 qn<qn2/2q_n<q_{n-2}/2
  4. 利用上式证明 q>0q>0 时的调用次数为 O(logq)O(\log q)

Kai

(1)

f(901,255)=f(255,136)=f(136,119)=f(119,17)=f(17,0)=17.\begin{aligned} f(901,255)&=f(255,136)=f(136,119)\\ &=f(119,17)=f(17,0)=\boxed{17}. \end{aligned}

(2)

当第二参数非零时,下一次调用的第二参数满足 0pmodq<q0\le p\bmod q<q。非负整数不能无限严格递减,故必到达 q=0q=0 而终止。

(3)

a=qn2,b=qn1,c=qna=q_{n-2},b=q_{n-1},c=q_n,则 a=kb+ca=kb+c,其中 k1k\ge10c<b0\le c<b

ba/2b\le a/2,则 c<ba/2c<b\le a/2;若 b>a/2b>a/2,则 k=1k=1,从而 c=ab<a/2c=a-b<a/2。两种情况均得 qn<qn2/2\boxed{q_n<q_{n-2}/2}

(4)

每两次递归,正的第二参数至少减半。至多经过 2log2q+O(1)2\lceil\log_2q\rceil+O(1) 次调用便到达 00,故调用次数为 O(logq)\boxed{O(\log q)}(包含 q=1q=1 可写 O(1+logq)O(1+\log q))。