《编程珠玑(续)(修订版)》—第2章2.4节原理

2.4 原理
Awk可以使程序员事半功倍。我们目前看到的多数程序如果使用传统的语言编写,代码量恐怕会多出一个数量级。规模的减小归功于Awk的几个特性:输入行之上的隐式循环、自动分隔成字段、变量的初始化和转换,以及关联数组。

关联数组是Awk将字符串和数值这样的基本数据类型结合起来的唯一机制,别无他法。幸而关联数组可以很自然地表示许多数据结构。

数组。一维、多维和稀疏数组实现起来都很容易。
顺序结构。队列和栈是由关联数组加一个或两个索引产生的。
符号表。符号表提供了从名字到值的一个映射:symtab[name] = value。如果所有名字有同样的值,那么这个数组就表示一个集合。
图。有穷状态机和拓扑排序都对有向图进行处理。FSM程序使用图的矩阵表示,而拓扑排序使用边-序列表示。
除了教学,Awk及其关联数组还有什么实际价值吗?Awk程序很小,这并不总是优点(像APL单行程序一样,Awk程序会使人费解,令人不胜其烦),但10行代码几乎总是要胜过100行代码。不幸的是,Awk代码运行起来似乎很慢。符号表的效率相对比较高,但以整数为索引的数组却要比传统实现慢上几个数量级。在什么情况下小而慢的程序才有用呢?

与开发成本相比,许多程序的运行时间成本是可以忽略的。Awk拓扑排序程序对某些任务来说已经接近产品质量了,但在出现错误时应该更健壮一些。
简单的程序可以得到有用的原型。先让用户尝试一个小规模程序。如果他们喜欢,再创建一个工业级的版本。
我用Awk作为小的子程序的测试环境,我们下一章再回到这个话题。

时间: 2024-09-20 08:25:40

《编程珠玑(续)(修订版)》—第2章2.4节原理的相关文章

《编程珠玑(第2版•修订版)》—第2章2.5节原理

2.5 原理排序.排序最显而易见的用处是产生有序的输出,该输出既可以是系统规范要求的一部分,也可以是另一个程序(也许是一个二分搜索程序)的前期准备工作.但是在变位词问题中,排序并不是关注的焦点.排序是为了将相等的元素(本例中为标识)集中到一起.这些标识产生了另外一个排序应用:将单词内字母排序使得同一个变位词类中的单词具有标准型.通过给每条记录添加一个额外的键,并按照这些键进行排序,排序函数可以用于重新排列磁盘文件中的数据.在第三部分,我们还会多次回顾排序这个主题. 二分搜索.该算法在有序表中查找

《编程珠玑(第2版•修订版)》—第1章1.5节原理

1.5 原理 那个程序员打电话把他的问题告诉我,然后我们花了大约一刻钟时间明确了问题所在,并找到了位图解决方案.他花了几个小时来实现这个几十行代码的程序.该程序远远优于我们在电话刚开始时所担心的需要花费一周时间编写的几百行代码的那个程序.而且程序执行得很快:磁盘上的归并排序可能需要许多分钟的时间,该程序所需的时间只比读取输入和写入输出所需的时间多一点点--大约10秒钟.答案3包含了对完成该任务的几种不同程序的计时细节. 从这些事实中可以总结出该实例研究所得到的第一个结论:对小问题的仔细分析有时可

编程珠玑--粗略估算

粗略估算是<编程珠玑>中第七章提到的内容.   这篇文章将"粗略估算"看做是一项工程技术,是程序员必备的一项技能之一. 本人非常同意这个观点.粗略估算是一种把复杂的事情简单化的能力.我们对某个算法的时间复杂度和空间复杂度的估算就是基于这种估算的能力.如果你能较为准确的估算出一个程序的输出结果,如果你能准确估算出这个程序的运行时间,如果你能准确估算出这个项目的开发时间--如果你能拥有这样的能力,该有多么美好啊.所以难怪乎像微软.Google这样的大公司老喜欢出"请计

《编程珠玑(续)(修订版)》—第1章1.1节计算素数

第1章 性能监视工具 编程珠玑(续)(修订版) 听诊器是一种简单工具,却给医生的工作带来了革命:它让内科医生能有效地监控病人的身体.性能监视工具(profiler)对程序起着同样的作用. 你现在用什么工具来研究程序?复杂的分析系统很多,既有交互式调试器,又有程序动画系统.正如CT扫描仪永远代替不了听诊器一样,复杂的软件也永远代替不了程序员用来监控程序的最简单工具--性能监视工具,我们用它了解程序各部分的执行频率. 本章先用两种性能监视工具来加速一个小程序(记住真正的目的是说明性能监视工具).后续

《编程珠玑(续)(修订版)》—第2章2.1节Awk中的关联数组

第2章 关联数组编程珠玑(续)(修订版)人类学家说,语言深刻地影响了世界观.一般把这个观察结果称为"Whorf假说"① ,也经常把它总结为"语言塑造了人的思想". 跟大多数程序员一样,我使用的Algol系列的语言塑造了我的计算思维.对于像我这样的程序员来说,PL/1.C和Pascal看起来都很相似,我们不难把这样的代码翻译成COBOL或Fortran的代码.用这些语言能轻易地表达我们旧的.习以为常的思维模式. 另外一些语言则挑战了我们对于计算的看法.我们感到惊奇的是

《编程珠玑(续)(修订版)》目录—导读

内容提要 编程珠玑(续)(修订版) 本书是计算机科学方面的经典名著<编程珠玑>的姊妹篇,讲述了对于程序员有共性的知识.本书延续了<编程珠玑>的特色,通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行透彻而睿智的描述,为复杂的编程问题提供清晰而完备的解决思路.书中涵盖了程序员操纵程序的技术.程序员取舍的技巧.输入和输出设计以及算法示例,这些内容结合成一个有机的整体,如一串串珠玑展示给程序员.本书对各个层次的程序员都具有很高的阅读价值. 版权声明 编程珠

《编程珠玑(第2版•修订版)》—第1章1.1节一次友好的对话

第一部分 基础 编程珠玑(第2版•修订版) 这一部分的5章回顾程序设计的基础知识.第1章介绍一个问题的历史,我们把仔细的问题定义和直接的程序设计技术结合起来,得到优美的解决方案.这一章揭示了本书的中心思想:对实例研究的深入思考不仅很有趣,而且可以获得实际的益处. 第2章讨论3个问题,其中重点强调了如何由算法的融会贯通获得简单而高效的代码.第3章总结数据结构在软件设计中所起到的关键作用. 第4章介绍一个编写正确代码的工具--程序验证.在第9章.第11章和第14章中生成复杂(且快速)的函数时,大量使

《编程珠玑(第2版•修订版)》—第2章2.1节三个问题

第2章 啊哈!算法 编程珠玑(第2版•修订版) 研究算法给实际编程的程序员带来许多好处.算法课教给学生完成重要任务的方法和解决新问题的技术.在后续的章节中将会看到,先进的算法工具有时候对软件系统影响很大--减少开发时间,同时使执行速度更快. 算法与其他那些深奥的思想一样重要,但在更一般的编程层面上具有更重要的影响.在<啊哈!灵机一动>一书中(本章的标题就借鉴了它),Martin Gardner①描述了深得我心的一个思想:"看起来很困难的问题也可以有一个简单的.意想不到的答案.&quo

《编程珠玑(第2版•修订版)》目录—导读

作者简介编程珠玑(第2版•修订版)Jon Bentley 世界著名计算机科学家,被誉为影响算法发展的十位大师之一.他先后任职于卡内基-梅隆大学(1976~1982).贝尔实验室(1982~2001)和Avaya实验室(2001年至今).在卡内基-梅隆大学担任教授期间,他培养了包括Tcl语言设计者John Ousterhout.Java语言设计者James Gosling.<算法导论>作者之一Charles Leiserson在内的许多计算机科学大家.2004年荣获Dr. Dobb's程序设计卓