正文
TURING讲过了(不得不说,BRAINF对得起它的全称),当然,那是我自己加的,现在,才是Knuth的官方解释
一个计算方法是一个四元组 ( Q , I , Ω , f ) { \left( {Q,I,Ω,f} \right) } (Q,I,Ω,f)
有以下要求:
I
∈
Q
Ω
∈
Q
{I \in Q\text{ }Ω \in Q}
I∈Q Ω∈Q
q
∈
Q
f
(
q
)
∈
Q
{q \in Q\text{ }f{( {q} ) } \in Q}
q∈Q f(q)∈Q
r
∈
Ω
f
(
r
)
∈
Ω
{r \in Ω\text{ }f{ ( {r} ) } \in Ω}
r∈Ω f(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\} I≡Q≡Ω≡{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 a→t,b→a,c→b,d→c,t→d
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. | os | ns | a | b |
---|---|---|---|---|
1. | ab | 3 | 2 | |
2. | c | err | 1 | |
3. | a | b | 4 | 3 |
4. | b | b | return | 5 |
5. | c | a | 1 | 5 |
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,I∈I2
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) Q∈Q1
咳咳,他们的含义是这样的:
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
下一篇:无