![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程珠玑
文章平均质量分 57
dzyhenry
Do one thing do it good.
展开
-
编程珠玑(2)第十二章学习笔记 取样问题
本章讲取样问题,亦即随机数的生成问题,这是不论在实际生活中还是在学习应用中都常常碰到的问题。本章需要解决这样一个问题:怎样生成m个有序的且范围在0到n-1之间的不重复的随机数?通过分析可得:此问题的需求至少有三点:m个有序的、不重复的、范围在0到n-1之间的随机数。 第一种解决方案:来自Knuth的The Art of Computer Programming。该算法依次考虑整数0原创 2013-05-11 16:24:01 · 757 阅读 · 0 评论 -
编程珠玑(2)第十一章学习笔记
本章主要介绍了插入排序和快排。 关于排序,在平时写程序过程中,我们往往直接使用库函数qsort或者是sort,但有时候对接口使用函数调用会不那么高效,我们可能会需要自己来写排序算法。 分析了插入排序和快排的时间复杂度,以及一些改进方案。关于插入排序和快排,其实是老生常谈了,但通过作者的娓娓道来,原来就是一个很简单的排序算法,如果不断改进,也总有余地。下面我把原创 2013-05-11 14:54:49 · 758 阅读 · 0 评论 -
编程珠玑(2)第十四章学习笔记之“堆”
本章主要介绍“堆”和“优先队列”数据结构的使用。堆可分为大根堆和小根堆。堆是某个节点的值总是不大于(大根堆)或不小于(小根堆)其父节点的完全树。常见的堆有二叉堆和斐波那契堆,本章讲的是二叉堆。由于二叉堆是完全二叉树,所以我们在建堆的时候可以考虑用C++中的vector来作为存储结构。堆有两个比较重要的操作:插入和删除。插入时,我们一般将新插入的元素放在末尾,这时需要做向上调整;删除时一原创 2013-05-17 20:38:42 · 771 阅读 · 0 评论 -
编程珠玑(2)第四章阅读笔记
读完第四章,依然感觉迷茫,作者举的例子似乎很简单,但其中蕴含着深刻的编程原理,即程序验证——如何编写正确的程序。 作者在本章语重心长地强调了程序验证对于正确地编写程序的重要性。他说:“编写简单的代码通常是得到正确程序的关键。当我们编写程序的时候,经常会出现这样的情况,”困难“的部分第一次就可以正确运行,而那些”容易“的部分往往会出毛病。”我自己在编程过程中,也有这种感受,有时原创 2013-03-07 23:26:30 · 890 阅读 · 0 评论 -
编程珠玑(2)第十三章学习笔记
本章题目是搜索。研究的题目是这样的:在没有其他相关数据的情况下,如何存储一组数组?这个问题虽然很小,但却能引发在数据结构实现中出现的许多关键问题。除了直接调用C++的模板库,作者提出了自己实现接口的四种解决方案。库的作用。C++标准模板库提供了一个实现起来很容易,并且维护和扩展也比较简单的通用解决方案。当遇到设计数据结构的问题时,我们的第一反应是寻求解决问题的通用工具。但本章中,专用的代码可以原创 2013-05-16 23:15:21 · 708 阅读 · 0 评论 -
编程珠玑(2)第十章学习笔记
本章,作者讨论了程序开发中空间利用的问题。在计算机诞生之初,由于存储设备的限制,计算机内存往往只有64k、128k等等,所以如何有效利用空间对于程序员是一个非常重要的问题。现今,尽管存储设备非常先进,普通个人计算机的内存往往都能达到2GB、4GB、8GB,有些超级计算机内存甚至能达到1TB,但是,随着大数据时代的来临,我们需要处理的数据也越来越庞大,计算机的空间的有效利用仍不是一个无足轻重的话题。原创 2013-04-30 08:29:23 · 1143 阅读 · 0 评论 -
编程珠玑(2)第九章学习笔记
引言: 有些程序员过于关注程序的效率;由于太在乎细小的“优化”,他们编写出的程序过于精妙,难以维护。而另外一些程序员很少关注程序的效率;他们编写的程序有着清晰漂亮的结构,但效率极低以至于毫无用处。优秀的程序员将程序的效率纳入整体考虑之中:效率只是软件中众多问题之一,但有时候也很重要。 本章“代码调优”,作者通过讲述Chris Van Wyk的原创 2013-04-15 18:07:38 · 866 阅读 · 0 评论 -
编程珠玑(2)第八章学习笔记
第八章,作者通过对最大子段和问题的深入探讨,讲解了时间复杂度对算法设计的影响。在实际中,程序实现指定功能可能会有多种方法,此时我们考虑的不仅是功能的实现,还需要在功能实现的基础上考虑算法的时间复杂度。 在最大子段和的问题上,作者先后分析了四种实现方式,对其时间复杂度做了理论分析,并且对不同数量级的数据进行了实际运行时间的统计。通过这样一系列的介绍,作者总结了几个重要的算法设计技术:原创 2013-03-26 13:14:46 · 690 阅读 · 0 评论 -
编程珠玑(2)第七章 学习笔记之粗略估算
通过简单的粗略估算我们能够得到接近需要复杂计算的真实值,实在是让人惊叹估算的魅力。 在日常生活中,我们常常会遇到需要快速算出粗略值的时候,以便对问题有一个大体的把握,这个时候粗略估算的技巧就显得十分重要了。本章介绍了“量纲检验”、“模9法”、“72法则”、“Little定律”等,而更多的技巧需要我们在日常生活中根据实际问题运用常识开动脑筋来把握。 量纲检验:即在原创 2013-03-12 22:12:15 · 1210 阅读 · 0 评论 -
编程珠玑(2)第六章笔记
第六章通过介绍Andrew Appel解决重力场中多个物体相互作用的经典“n体问题”,形象地表现了我们对程序的性能进行提高的过程。 Appel主要通过五个层面来进行项目的性能改进:1、算法和数据结构。2、算法调优。3、数据结构重组。4、代码调优。双进度浮点数可改为单精度;某些函数可以改用汇编语言实现。5、硬件。使用性能更好的硬件。 看完本章,原创 2013-03-12 21:44:41 · 1144 阅读 · 0 评论 -
编程珠玑(2)第五章 学习笔记
在前四章中,分别讲述了:通过深入挖掘定义正确的问题;通过仔细选择算法和数据结构平衡真正的需求;通过程序验证技术写出优雅代码,并验证程序的正确性。 在这一章中,作者主要介绍了验证程序的一个重要方法:“脚手架(scaffolding)”。在编完代码后,我们使用脚手架来探察代码,以便更彻底地验证代码。作者介绍了如何根据程序的逻辑,在适当的代码位置添加“print”函数,输出变量,根原创 2013-03-11 16:22:13 · 1103 阅读 · 0 评论 -
编程珠玑(2)第三章阅读笔记
看完第三章,感觉比较迷茫,抓不住什么实在的东西。 第三章核心是“数据决定程序结构”。大致意思就是根据数据的形式,安排合适的数据结构,而成形的数据结构基本也决定了程序的结构。 本章最后列出了四条编程的原则,在这里赘述下: 1、使用数组重新编写重复代码。 2、封装复杂结构。 3、尽可原创 2013-03-07 22:34:58 · 725 阅读 · 0 评论 -
编程珠玑(2)第一章学习之位图排序
上研快半年了,由于第一年属于上课阶段,导师也没怎么管,感觉自己还是本科那种碌碌无为的状态,知识停于书本,没有真正写出过什么像样的产品。叫我如何不焦虑!焦虑也没办法啊,所以就到网上买了本《编程珠玑》(第2版),下决心认认真真学习。对于我这样愚笨的人虽不见得会有奇效,但总比继续停在原地的好。于是,我打算以此博客为证,在今年7月之前(也就是2013年6月31日为止):将每一章(总共十五章)的问题用此博客原创 2013-03-02 02:49:43 · 803 阅读 · 0 评论 -
编程珠玑(2)第二章学习笔记
第二章提出了三个问题。 问题A:个定一个最多包含40个亿随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数。在内存足够和只有几百个字节的内存的情况下,分别该如何解决这个问题。 问题B:将一个n元一维向量向左旋转(即循环移位)i个位置。例如,当n=8,且i=3时,向量abcdefgh旋转为defghabc。能否使用数十个原创 2013-03-06 14:54:37 · 1106 阅读 · 0 评论 -
编程珠玑(2)第十五章学习笔记
`我们生活在一个字符串的世界里。位字符串构成了整数和浮点数,数字符串构成了电话号码,字母字符串构成了单词,长字符串可以形成网页,更长的字符串则形成书。在遗传学家的数据库和人的细胞里,存在着由字母A、C、G和T表示的极长的字符串。 我们的第一个问题是:为文档中包含的单词生成一个列表。我们的第一个C++程序用到了标准模板库中的sets和strings。主要思想就是用set的insert函数直接原创 2013-05-28 15:05:58 · 781 阅读 · 0 评论