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}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完相关推荐
- List再整理,从代码底层全面解析List(看完后保证收获满满)
前言 本文为对List集合的再一次整理,从父集接口Collection到顶级接口Iterable再到线程不安全实现类:ArrayList.LinkedList,再到线程安全实现类:Vector(被弃用 ...
- 电脑总有安装计算机更新,为什么我们的电脑总会莫名的安装垃圾软件,看完吓一跳,欢迎关注...
现在电脑已经走进了我们的生活,很多人都已经接触电脑了,然而对于电脑的使用,我们除了知道那些最常见的使用方式之外,大多数人对电脑的其他功能任然是一无所知,当然学习电脑专业和IT的除外了,很多人应该都会发 ...
- 无法使用_解决kali linux 2020 安装完后发现无法使用 ifconfig
鱼蛋计算机交流群总部: 606219746 鱼蛋计算机交流分群002: 212088123 鱼蛋计算机交流分群003: 1020025486 鱼蛋计算机交流分群004:1158384728 (建议加此 ...
- keyshot卡住了还能保存吗_倒入醒酒器的红酒一次没喝完,还能倒回酒瓶保存吗?...
用餐结束,我们常会碰到这样的情况. 有朋友看着醒酒器里,还有大半瓶红酒在,有些心疼,便招呼服务员,把醒酒器里的酒液,倒回酒瓶,想要带走. 或者,家里请客人吃饭,开了不少红酒,吃完饭后,不少红酒还留在醒 ...
- echarts横坐标文字太长显示不完的两种解决办法:rotate旋转文字、调用函数让文字纵向排列
//方法1:横坐标文字太长显示不完,调用函数解决,在axisLabel下添加属性,让文字纵向排列: formatter:function(val){return val.split("&qu ...
- 据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
1.甲去买烟,烟29元,但他没火柴,跟店员说:"顺便送一盒火柴吧."店员没给. 乙去买烟,烟29元,他也没火柴,跟店员说:"便宜一毛吧."最后,他用这一毛买一盒 ...
- 以金山界面库(openkui)为例思考和分析界面库的设计和实现——代码结构(完)
三年前,准备将金山界面库做一个全面的剖析.后来由于种种原因,这个系列被中断而一直没有更新.时过境迁,现在在windows上从事开发的人员越来越少,关注这块的技术的朋友也很少了.本以为这系列也随着技术的 ...
- js 等待某个函数执行完_JS 函数的执行时机
JS函数在不同的时候运行,会有不同的运行结果,本文将分别举例分析 案例一 let a = 1 function fn(){ console.log(a) } 注意:这里不会打印任何东西,因为函数只是声 ...
- php 生成动态键值 数组_你的PHP项目遇到性能问题了吗?看完这篇性能分析恍然大悟...
你的项目中遇到性能问题了吗?遇到性能问题你是如何解决的呢?你的解决方式是否正确呢?下面就跟大家一起分享php项目的性能问题. PHP语言级性能分析 php在什么情况下会遇到性能问题呢? 在讨论性能问题 ...
- Linux内核中锁机制之完成量、互斥量
在上一篇博文中笔者分析了关于信号量.读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题. 八.完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等 ...
最新文章
- Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略
- [SOJ]连通性问题
- Android多线程源码学习笔记一:handler、looper、message、messageQueue
- matlab线性平面映射求通项_代数学发展史: 线性空间
- 生成同时兼容iOS真机和模拟器的.a包
- CSDN博客添加微信公众号图片
- JavaScript操作HTML 元素
- 图片适应窗口_毕业论文排版保姆级教程——图片和公式排版
- 万万没想到,区块链将提升无人驾驶安全性!
- 事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
- Proxifier全局代理软件,其提供了跨平台的端口转发和代理功能
- 倍福PLC——ADS上位机通讯
- android sms 接收短信,Android SMS 短信操作
- 马路上“低头族”的交通隐患 ,小心埋头苦干的恶果
- Linux+宝塔安装swoole教程
- SAP PI PO 管理队列 SXMS_QREG
- 【SSL】2021-08-19 1045.采药
- 酷家乐母公司群核科技冲刺美股上市:2020年亏损约3亿元,曾因违规多次被通报
- pixi.js v5 快速了解
- 跨境电商中的B、C、M、A、G、O…是什么?
热门文章
- 小程序 局域网 服务器,微信小程序网络请求request局域网下的开发测试
- 纯JAVA写的socket局域网斗地主游戏
- ObjectiveC基础-ivar
- 屏蔽csdn右下角广告插件
- dell笔记本驱动安装失败_W10系统声卡驱动程序安装失败的原因及解决方法
- javaweb基于SSH开发汽车4S店管理系统(前台+后台) 课程设计 毕业设计源码
- 从零开始学Java【基本输入输出、排序(sort)、高精度大数运算(BigInteger)】
- 从0开始学java开发怎么学?
- 卷积神经网络识别车辆(自建+迁移学习)
- 手把手教你如何使用IOMETER测试工具测试存储