TAOCP-Reading-计算机程序设计艺术阅读-1-2
昨天翻译到n++,今天继续
上一篇:https://blog.csdn.net/qq_43057060/article/details/95316231
正文
注意E3中的步骤顺序是很重要的,“m <- n,n <- r"和"n <- r,m <- n"是完全不一样的.因为后者意味着n的初始值将会在把它赋值给m前被覆盖掉.因此上面的代码序列等同于"n <- r,m <- r"当多个变量被设为相同的值时,我们可以用连箭头。例如"n <- r,m <- r"可以被写成“n <- m <- r”。交换两个变量的值,可以写成"交换m <> n"他可以用一个辅助的数字t并写作"Set t <- m,m <- n,n <- t”
一个算法从它编号最小的步骤开始,通常为第一步,除非特殊情况,否则按顺序执行后续步骤。在E3中“跳转到E1”表示一个明显的执行顺序。步骤E2中的动作开始于一个条件"如果r=0"也就是说,如果r!=0,就什么也不会发生.我们或许已经加上了一句无用的句子——“如果r!=0,跳到第三步”
一个粗竖线(饶恕作者没加)出现在E3后表示算法结束,恢复文字.
我们现在已经解释了几乎所有的用于标记算法的规则,除了用于标记"下标"或"引索化"的数组的元素的规则.假设我们有n个数据u1,u2······un;我们用u[j]替代uj表示其中的第j个元素,此表示u[j]经常被使用,相似的,a[i,j]有时被用来表示一个双重下标,就像aij.有时多个字母被用作变量名,通常大写;因此TEMP应当用作一个临时保存结果值的变量,PRIME[K]应当是第K个质数,and so on~~~
对算法的表现形式说太多了,现在我们来执行一下,他因该立即被提及,以免读者期望阅读一个算法就像在读小说。
我们老师就经常对我们说,“以为侬来读小锁死呢”(上海话:以为你在读小说书那),我一开始也真在把他当小说书读
这样的尝试将会使它变得非常的难理解什么发生了。一个算法必须被认为是可信的,并且最好的学习一个算法到底是什么的方法是执行他。阅读者应当时刻准备着一支笔和一张纸,在遇到每一个算法时,通过一个例子了解它到底是什么。通常,一个示例的大纲将会被给出,或读者可以轻松举一个。下面我们给出了一个例子,这是一种轻松且简单的方式去理解一个给定的算法,并且其他所有方法通常是失败的。
于是高德纳举了个例子——m=119,n=544,下面是示例C++
#include<iostream>
using namespace std;
int euclid(int m,int n);
int main(){int m,n;cout<<"m=";cin>>m;cout>>"n="cin<<n;m=euclid(m,n);cout<<"r=0\n结果是:"<<m<<endl;return 0;
}
int euclid(int m,int n){int r;while(true){//E1r=m%n;cout<<"r=m%n="<<m<<'%'<<n<<'='<<r<<endl;//E2if(r)cout<<"r!=0"<<endl;else return n;//E3m=n;cout<<"m="<<m<<endl;n=r;cout<<"n="<<n<<endl;cout<<endl<<endl;//two spare line for clear seen}
}
尾递归写法:
#include<iostream>
using namespace std;
int euclid(int m,int n);
int main(){int m,n;cout<<"m=";cin>>m;cout<<"n=";cin>>n;m=euclid(m,n);cout<<"r=0\n结果是:"<<m<<endl;return 0;
}
int euclid(int m,int n){//E1int r=m%n;cout<<"r=m%n="<<m<<'%'<<n<<'='<<r<<endl;//E2if(r)cout<<"r!=0"<<endl;else return n;//E3cout<<"m="<<n<<endl;cout<<"n="<<r<<endl;cout<<endl<<endl;//two spare line for clear seenreturn euclid(n,r);
}
//该写法会被优化成第一种写法
Intel_X86_汇编_(仅包括euclid函数,无LOG)
.E1
movl %edi %eax
idivl %esi
cmp %edx 0
.E2
jnz .E3
movl %esi %eax
ret
.E3
mov %esi %edi
mov %edx %esi
jmp .E1
执行结果:
m=119
n=544
r=m%n=119%544=119
r!=0
m=544
n=119r=m%n=544%119=68
r!=0
m=119
n=68r=m%n=119%68=51
r!=0
m=68
n=51r=m%n=68%51=17
r!=0
m=51
n=17r=m%n=51%17=0
r=0
结果是:17
完美的CODE自夸遭雷劈。
Thanks For Reading
下一篇:https://blog.csdn.net/qq_43057060/article/details/95898885
TAOCP-Reading-计算机程序设计艺术阅读-1-2相关推荐
- Medium - 《计算机程序设计艺术》发展史
来自 计算机程序设计艺术 一些在书架上的书看着如此美丽,不仅仅是因为装帧美,而且书脊上表达了关于主人的话.Donald Knuth 的四精装卷的"计算机程序设计艺术" - 四个很贴 ...
- 敏感性分析算法 程序_计算机程序设计艺术(TAOCP)精读笔记1 - 算法分析真正应该有的样子 Part 1...
系列文章的导航链接: 张浩驰:<趣味算法>专栏所有文章分类 - 导航zhuanlan.zhihu.com 下篇文章Part 2导航: 张浩驰:计算机程序设计艺术(TAOCP)精读笔记1 ...
- 你这辈子可能都不需要看《计算机程序设计艺术》了!
"欣哥, 我什么时候可以看<计算机程序设计艺术>? " "你这辈子可能都不需要看了!" 我在大学的时候并不知道<计算机程序设计艺术>(简 ...
- 披阅十载,84岁图灵奖得主高德纳的《计算机程序设计艺术:卷4B》终于出版
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送 来自:机器之心 从博士期间的一个决定开始,高德纳已经坚持写了 50 年. 刚刚,84 岁 ...
- 计算机程序设计艺术 介绍
<计算机程序设计艺术 >(The Art of Computer Programming ),簡稱TAOCP,是高德纳 (Donald Ervin Knuth)编著的关于计算机程序设计的七 ...
- 计算机程序设计艺术 第1卷 第1册 (双语版)
计算机程序设计艺术 第1卷 第1册 (双语版) 作 者:Donald E.Knuth |苏运霖 出版社:机械工业出版社 日 期:2006年4月 开 本:16开 版 次:1次 页 数:268页 装 ...
- 计算机大师高德纳权威著作《计算机程序设计艺术》影印版精装版已经入库,即将上市!
<计算机程序设计艺术>系列著作对计算机领域产生了深远的影响.这一系列堪称一项浩大的工程,自 1962年开始编写,计划出版 7卷,目前已经出版了 4卷.<美国科学家>杂志曾将这套 ...
- 《计算机程序设计艺术》pdf
下载地址:网盘下载 内容简介 编辑 本书作者D. E. Knuth是在计算机学界十分著名的学者,在本领域享有很高权威和盛名,他的这部著作是无数计算机专业人员的学习教材和参考读物,也是许多专业研究工作者 ...
- 计算机程序设计艺术读后感,计算机程序设计艺术(第1卷)读后感1000字
<计算机程序设计艺术(第1卷)>是一本由[美] Donald E. Knuth著作,清华大学出版社出版的精装图书,本书定价:80.00元,页数:650,特精心从网络上整理的一些读者的读后感 ...
- 82岁高龄的高德纳仍在写《计算机程序设计艺术》,那是他未完成的人生目标...
本文转载自:程序员书库 编译:猿妹 链接: https://www.quantamagazine.org/computer-scientist-donald-knuth-cant-stop-telli ...
最新文章
- AMD/NV大跌2周后仅两天收复失地 挖矿成背后推手
- Kafka文件存储机制及offset存取
- 垃圾回收:引用计数与分代收集机制
- 递归算法思路以及题目总结(未完待续...)
- javascript权威指南(2)
- 10行代码解析krc歌词文件
- 时差怎么理解_时差是怎么形成的?
- 【scratch案例教学】scratch中秋佳节 scratch创意编程 少儿编程 边玩边学 小朋友这样贺中秋
- AVFoundation之语音合成器
- 140套高清、超优秀的PPT模板----毕业设计、毕业答辩主题
- miceforest插补
- esp-01s接入天猫精灵与relay继电器控制电灯
- JAVA实现链接生成二维码
- [数据压缩]_实验③ DPCM编码
- 软著申请 计算机软件分类代码,软著申请代码有哪些要求
- 西游记中孙悟空所尊敬的神佛
- 搜索引擎只能抓取html文件,通过robots屏蔽搜索引擎抓取网站内容
- java三层、四层和五层结构介绍
- 全解一款六面体结构化网格划分利器-NUMECA IGG
- python爬虫(二十四)爬取汽车之家某品牌图片
热门文章
- 关于StretchDIBits 可能返回失败的原因!
- c语言令牌桶原理,令牌桶算法及实现(二)
- 省市级联实现,并根据IP自动获取省市
- solidworks图纸模板添加_solidworks工程图模板制作(大全).doc
- PMP考试知识总结【精华--持续更新】
- 基于RTMP协议的音视频传输----FLV格式
- 社会工程学部分攻击经典方法总结
- 车辆维修管理系统mysql_4S店汽车维修管理系统的分析与设计(JSP+MySQL)
- matlab 弹簧,利用Matlab进行弹簧振子运动
- 使用135编辑器HTML样式,135编辑器滑动样式全教程!