TAOCP_READING 1.1完

上一篇

正文

TURING讲过了(不得不说,BRAINF对得起它的全称),当然,那是我自己加的,现在,才是Knuth的官方解释

一个计算方法是一个四元组 ( Q , I , Ω , f ) { \left( {Q,I,Ω,f} \right) } (Q,I,,f)

有以下要求:
I ∈ Q   Ω ∈ Q {I \in Q\text{ }Ω \in Q} IQQ
q ∈ Q   f ( q ) ∈ Q {q \in Q\text{ }f{( {q} ) } \in Q} qQf(q)Q
r ∈ Ω   f ( r ) ∈ Ω {r \in Ω\text{ }f{ ( {r} ) } \in Ω} rf(r)
其中q,r是任意满足条件的元素

有了这个四元组,一个计算方法就像这样——

algorithm(I arg){
    Q tmp=arg;
    while(tmp∉Ω){
        tmp=f(tmp);
    }
    return tmp;
}

那么欧几里得算法的四元组是什么呢?是这样的:

//下面m,n,o表示任何非负整数

//r表示正整数

f ( { m , n } ) = { m , n , 0 , 1 } f(\{m,n\})=\{m,n,0,1\} f({m,n})={m,n,0,1}

f ( { m , n , r , 1 } ) = { m , n , m f(\{m,n,r,1\})=\{m,n,m%n,2\} f({m,n,r,1})={m,n,m

f ( { m , n , 0 , 2 } ) = n f(\{m,n,0,2\})=n f({m,n,0,2})=n//condition

f ( { m , n , o , 2 } ) = { m , n , o , 3 } f(\{m,n,o,2\})=\{m,n,o,3\} f({m,n,o,2})={m,n,o,3}//是opq的o,不是0

f ( { m , n , r , 3 } ) = { m , r , r , 1 } f(\{m,n,r,3\})=\{m,r,r,1\} f({m,n,r,3})={m,r,r,1}//while

I ≡ { m , n } I\equiv\{m,n\} I{m,n}

Q ≡ { m , n } ∪ { m , n , r , 1   4 } ∪ r Q\equiv\{m,n\}\cup\{m,n,r,1\text{~}4\}\cup r Q{m,n}{m,n,r,1 4}r

Ω ≡ r Ω\equiv r r

BUT

我们忘了一件重要的事——有效性。

比如说,这样一个方案是不行的

f ( m , n = g c d ( m , n ) ) f({m,n}=gcd(m,n)) f(m,n=gcd(m,n))

f ( r ) = r f(r)=r f(r)=r

I = { m , n } I=\{m,n\} I={m,n}

Ω = r Ω=r =r

Q = I ∪ Ω Q=I\cupΩ Q=I

emmm,你看出来了吧。

这里的f就是无效的,所以他不足以称为“算法(计算方法)”

于是,Knuth给出了一个奇葩的模板——

A是字符集(如ASCII),

A*是所有A中的字符组成的字符串。

于是,模板长这样——

I ≡ Q ≡ Ω ≡ { A ∗ , i } I\equiv Q\equiv Ω\equiv \{A*,i\} IQ{A,i}

a,b是整数集 os,ns是A*的子集,它们都是有序集,s是整数

f f f长这样

Algorithm A-刚刚的算法模板中的函数f
A1.Found 在ArgStr(f(xx,ii)的xx)中查找第一个os[ii]//使用KMP算法
A2.Switch 如果查找成功,执行A3,不然执行A4
A3.Change 将在xx中找出的第一个os[ii]改为ns[ii],然后返回{xx,b[ii]}
A4.jmp 返回{xx,a[ii]}


||||||||||||||||||||||黑色重线|||||||||||||||||||||||||






做题啦!


Q1:将{a,b,c,d}修改顺序,借助t,变为{b,c,d,a}要求 → \to 的次数最少

Answer: a → t , b → a , c → b , d → c , t → d a\to t,b\to a,c\to b,d\to c,t\to d at,ba,cb,dc,td

Q2:证明:除首次调用外,每次m都大于n

Answer:设上次的m,n为m’,n’,则m=n’,n=m’%n’无论m’n’是什么

m’%n’<n’

Q3:编写一个基于ALGORITHM E的算法,但不能使用单独的 → \to

Answer:

Algorithm F:Q3的答案
F1.mod n=n%m
F2.condition if(n=0),则结果为m
F3.mod m=m%n
F4.condition if(m=0),则结果为n,Otherwise goto F1.

Q4. 2166和6099的GCD是几?

A4.用Algorithm E算一算

(2166,6099)

=(6099,2166)

=(2166,1767)

=(1767,0399)

=(0399,0171)

=(0171,0057)

=57

注:(a,b)=a和b的最大公约数

结果为57

Q5.《本书阅读方法》和算法有什么差别?

​ 1.DEAD WHILE

​ 这里面要求你读完一遍再读一遍,无限循环(第一条有穷性不满足)

​ 2.有一百个读者,就有一百个哈姆雷特

​ 第二条不满足

​ 3.一脸懵逼的读者

​ 如果读者是个SB,那么就不Effectiveness了

​ 4.知识算不算输出?

​ FORMAT(原著中要求把FORMAT上的问题也写出来)……CODE REVIEW一下就好

Q6.当n=5,m<=n是,E1平均会被执行几次?

A6.1.8(自己算去吧)

Q7:无趣的QUS(跳过)

Q8.用上面的模板写一个ALGORITHM E

假定输入为m个a+n个b


抄高德纳答案


Line No.osnsab
1.ab32
2.cerr1
3.ab43
4.bbreturn5
5.ca15

Q9.给出上述模板( I , Q , Ω , f I,Q,Ω,f I,Q,Ω,f)中“实现”的定义

——算法 ( I 1 , Q 1 , Ω 1 , f 1 ) (I\mathop{}\nolimits_{1},Q\mathop{}\nolimits_{1},Ω\mathop{}\nolimits_{1},f\mathop{}\nolimits_{1}) (I1,Q1,Ω1,f1)是否实现了 ( I 2 , Q 2 , Ω 2 , f 2 ) (I\mathop{}\nolimits_{2},Q\mathop{}\nolimits_{2},Ω\mathop{}\nolimits_{2},f\mathop{}\nolimits_{2}) (I2,Q2,Ω2,f2)


继续抄高德纳答案


有函数

I 1   i n   ( I 2 ) ; I\mathop{}\nolimits_{1}\text{ }in\text{ }(I\mathop{}\nolimits_{2}); I1 in (I2);

Q 2   r e s p   ( Q 1 ) ; Q\mathop{}\nolimits_{2}\text{ }resp\text{ }(Q\mathop{}\nolimits_{1}); Q2 resp (Q1);

u i n t   s t e p   ( Q 1 ) ; uint\text{ }step\text{ }(Q\mathop{}\nolimits_{1}); uint step (Q1);

满足

I 2 = r e s p ( I 1 ) \mathop{I}\nolimits_{2}=resp(\mathop{I}\nolimits_{1}) I2=resp(I1)

Q 2 = r e s p ( Q 1 ) \mathop{Q}\nolimits_{2}=resp(\mathop{Q}\nolimits_{1}) Q2=resp(Q1)

Ω 2 = r e s p ( Ω 1 ) \mathop{Ω}\nolimits_{2}=resp(\mathop{Ω}\nolimits_{1}) Ω2=resp(Ω1)

r e s p ( i n ( I ) ) = I , I ∈ I 2 resp(in(I))=I,I\in I\mathop{}\nolimits_{2} resp(in(I))=I,II2

f 2 ( r e s p ( Q ) ) = f 1 s t e p ( Q )   Q ∈ Q 1 \mathop{f}\nolimits_{2}(resp(Q))=\mathop{f}\nolimits_{1}\nolimits^{step(Q)}\text{ }Q\in\mathop{Q}\nolimits_{1} f2(resp(Q))=f1step(Q) QQ1

咳咳,他们的含义是这样的:

Q 1 \mathop{Q}\nolimits_{1} Q1指计算机内存的所有可能状态

f 1 \mathop{f}\nolimits_{1} f1指计算机执行一条指令

i n in in指将输入输进计算机后计算机的状态。

I 1 \mathop{I}\nolimits_{1} I1指计算机接收到输入后可能的状态

r e s p resp resp指计算机的状态 对应的 源算法的状态

s t e p step step指执行到 原算法下一步 还需要多少条COMMAND


OK,SEE YOU NEXT TIME

下一篇:无

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值