上一篇

正文

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∈Qf(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,mf(\{m,n,r,1\})=\{m,n,m%n,2\}f({m,n,r,1})={m,n,m

f({m,n,0,2})=nf(\{m,n,0,2\})=nf({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,14}∪rQ\equiv\{m,n\}\cup\{m,n,r,1\text{~}4\}\cup rQ≡{m,n}∪{m,n,r,1 4}∪r

Ω≡rΩ\equiv rΩ≡r

BUT

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

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

f(m,n=gcd(m,n))f({m,n}=gcd(m,n))f(m,n=gcd(m,n))

f(r)=rf(r)=rf(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是整数

fff长这样

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→da\to t,b\to a,c\to b,d\to c,t\to da→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,Ω,fI,Q,Ω,fI,Q,Ω,f)中“实现”的定义

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


继续抄高德纳答案


有函数

I1in(I2);I\mathop{}\nolimits_{1}\text{ }in\text{ }(I\mathop{}\nolimits_{2});I1​ in (I2​);

Q2resp(Q1);Q\mathop{}\nolimits_{2}\text{ }resp\text{ }(Q\mathop{}\nolimits_{1});Q2​ resp (Q1​);

uintstep(Q1);uint\text{ }step\text{ }(Q\mathop{}\nolimits_{1});uint step (Q1​);

满足

I2=resp(I1)\mathop{I}\nolimits_{2}=resp(\mathop{I}\nolimits_{1})I2​=resp(I1​)

Q2=resp(Q1)\mathop{Q}\nolimits_{2}=resp(\mathop{Q}\nolimits_{1})Q2​=resp(Q1​)

Ω2=resp(Ω1)\mathop{Ω}\nolimits_{2}=resp(\mathop{Ω}\nolimits_{1})Ω2​=resp(Ω1​)

resp(in(I))=I,I∈I2resp(in(I))=I,I\in I\mathop{}\nolimits_{2}resp(in(I))=I,I∈I2​

f2(resp(Q))=f1step(Q)Q∈Q1\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​

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

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

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

ininin指将输入输进计算机后计算机的状态。

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

resprespresp指计算机的状态 对应的 源算法的状态

stepstepstep指执行到 原算法下一步 还需要多少条COMMAND


OK,SEE YOU NEXT TIME

下一篇:无

TAOCP_READING 1.1完相关推荐

  1. List再整理,从代码底层全面解析List(看完后保证收获满满)

    前言 本文为对List集合的再一次整理,从父集接口Collection到顶级接口Iterable再到线程不安全实现类:ArrayList.LinkedList,再到线程安全实现类:Vector(被弃用 ...

  2. 电脑总有安装计算机更新,为什么我们的电脑总会莫名的安装垃圾软件,看完吓一跳,欢迎关注...

    现在电脑已经走进了我们的生活,很多人都已经接触电脑了,然而对于电脑的使用,我们除了知道那些最常见的使用方式之外,大多数人对电脑的其他功能任然是一无所知,当然学习电脑专业和IT的除外了,很多人应该都会发 ...

  3. 无法使用_解决kali linux 2020 安装完后发现无法使用 ifconfig

    鱼蛋计算机交流群总部: 606219746 鱼蛋计算机交流分群002: 212088123 鱼蛋计算机交流分群003: 1020025486 鱼蛋计算机交流分群004:1158384728 (建议加此 ...

  4. keyshot卡住了还能保存吗_倒入醒酒器的红酒一次没喝完,还能倒回酒瓶保存吗?...

    用餐结束,我们常会碰到这样的情况. 有朋友看着醒酒器里,还有大半瓶红酒在,有些心疼,便招呼服务员,把醒酒器里的酒液,倒回酒瓶,想要带走. 或者,家里请客人吃饭,开了不少红酒,吃完饭后,不少红酒还留在醒 ...

  5. echarts横坐标文字太长显示不完的两种解决办法:rotate旋转文字、调用函数让文字纵向排列

    //方法1:横坐标文字太长显示不完,调用函数解决,在axisLabel下添加属性,让文字纵向排列: formatter:function(val){return val.split("&qu ...

  6. 据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?

    1.甲去买烟,烟29元,但他没火柴,跟店员说:"顺便送一盒火柴吧."店员没给. 乙去买烟,烟29元,他也没火柴,跟店员说:"便宜一毛吧."最后,他用这一毛买一盒 ...

  7. 以金山界面库(openkui)为例思考和分析界面库的设计和实现——代码结构(完)

    三年前,准备将金山界面库做一个全面的剖析.后来由于种种原因,这个系列被中断而一直没有更新.时过境迁,现在在windows上从事开发的人员越来越少,关注这块的技术的朋友也很少了.本以为这系列也随着技术的 ...

  8. js 等待某个函数执行完_JS 函数的执行时机

    JS函数在不同的时候运行,会有不同的运行结果,本文将分别举例分析 案例一 let a = 1 function fn(){ console.log(a) } 注意:这里不会打印任何东西,因为函数只是声 ...

  9. php 生成动态键值 数组_你的PHP项目遇到性能问题了吗?看完这篇性能分析恍然大悟...

    你的项目中遇到性能问题了吗?遇到性能问题你是如何解决的呢?你的解决方式是否正确呢?下面就跟大家一起分享php项目的性能问题. PHP语言级性能分析 php在什么情况下会遇到性能问题呢? 在讨论性能问题 ...

  10. Linux内核中锁机制之完成量、互斥量

    在上一篇博文中笔者分析了关于信号量.读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题. 八.完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等 ...

最新文章

  1. Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略
  2. [SOJ]连通性问题
  3. Android多线程源码学习笔记一:handler、looper、message、messageQueue
  4. matlab线性平面映射求通项_代数学发展史: 线性空间
  5. 生成同时兼容iOS真机和模拟器的.a包
  6. CSDN博客添加微信公众号图片
  7. JavaScript操作HTML 元素
  8. 图片适应窗口_毕业论文排版保姆级教程——图片和公式排版
  9. 万万没想到,区块链将提升无人驾驶安全性!
  10. 事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
  11. Proxifier全局代理软件,其提供了跨平台的端口转发和代理功能
  12. 倍福PLC——ADS上位机通讯
  13. android sms 接收短信,Android SMS 短信操作
  14. 马路上“低头族”的交通隐患 ,小心埋头苦干的恶果
  15. Linux+宝塔安装swoole教程
  16. SAP PI PO 管理队列 SXMS_QREG
  17. 【SSL】2021-08-19 1045.采药
  18. 酷家乐母公司群核科技冲刺美股上市:2020年亏损约3亿元,曾因违规多次被通报
  19. pixi.js v5 快速了解
  20. 跨境电商中的B、C、M、A、G、O…是什么?

热门文章

  1. 小程序 局域网 服务器,微信小程序网络请求request局域网下的开发测试
  2. 纯JAVA写的socket局域网斗地主游戏
  3. ObjectiveC基础-ivar
  4. 屏蔽csdn右下角广告插件
  5. dell笔记本驱动安装失败_W10系统声卡驱动程序安装失败的原因及解决方法
  6. javaweb基于SSH开发汽车4S店管理系统(前台+后台) 课程设计 毕业设计源码
  7. 从零开始学Java【基本输入输出、排序(sort)、高精度大数运算(BigInteger)】
  8. 从0开始学java开发怎么学?
  9. 卷积神经网络识别车辆(自建+迁移学习)
  10. 手把手教你如何使用IOMETER测试工具测试存储