编程珠玑学习资料

 

【编程珠玑】鸟瞰 --- 编程珠玑 (2012.8.7)

序:刘翔今天再一次倒在起跑线上,我作为翔子的Fans,盯着屏幕看刘翔起跑,当他第一个栏摔倒时,我的心碎了,情绪异常低落,久久难以平复。然后给老爸发短信抱怨:刘翔退赛了,为什么又是因伤退赛?我难受。老爸轻描淡写:没办法,这就是竞技体育,有起有落才是人生。          希望刘翔身体无大碍,早日康复。翔子:咱是纯爷们,这届不行,咱再来一届。 **************************...
  阅读(1631)  评论(7)
 

【编程珠玑(续)】第二章 关联数组

一,关联数组        关联数组和数组类似,由以名称作为键的字段和方法组成。   它包含标量数据,可用索引值来单独选择这些数据,和数组不同的是, 关联数组的索引值不是非负的整数而是任意的标量。这些标量称为Keys,可以在以后用于检索数组中的数值。   关联数组的元素没有特定的顺序,你可以把它们想象为一组卡片。每张卡片上半部分是索引而下半部分是数值。   Java...
  阅读(736)  评论(0)
 

【编程珠玑(续)】第一章 性能监视工具

一,计算素数 第一个程序:如果整数n,从2开始到n-1都不能整除则为素数。注意,n=2时一定是素数的判断 #include using namespace std; int prime(int n) { int i; for (i = 2; i < n; i++) if(n%i == 0)...
  阅读(965)  评论(3)
 

【编程珠玑】代码优化的27条经典法则

1. 空间换时间法则      1.1修改数据结构          例如:计算球面距离:输入为球面上5000个点组成的集合S,再输入20000个点组成的序列,每个点实用经度和纬度表示,对于20000个点的序列,程序必须求出S中哪个点最接近它,距离使用球体中心与两个点的连线之间的夹角来度量。          直接计算需要用到大量的三角函数,开销很大,而两个点的距离随其欧氏距离单调增加(...
  阅读(1512)  评论(4)
 

【编程珠玑】第十五章 字符串

一,概述        1)统计每个字符串出现的个数的程序实现,利用Map容器: #include #include using namespace std; int main() { map M; map ::iterator j; string t[5]={"abc","dd","abc","dd","dd"}; for(int i=0;i<5;++i) M[t[i]...
  阅读(1192)  评论(5)
 

【编程珠玑】第十四章 堆(排序,优先级队列)

一,堆        1)堆:任何结点的值都小于或等于其孩子的值的完全二叉树为小根堆                     任何结点的值都大于或等于其孩子的值的完全二叉树为大根堆       为了方便使用完全二叉树的性质,数组从下标1开始。             这样:leftChild = 2*i ;                          rightChild = 2*...
  阅读(872)  评论(2)
 

【编程珠玑】第十三章 搜索

一,概述         第十二章,介绍生成某个范围内随机数,并按顺序输出。         本章主要介绍,存储按序输出的容器或者说存放集合的方法。并实现按序插入,按序输出。         1)set容器               1>set容器小例子: #include #include using namespace std; int main() {...
  阅读(817)  评论(4)
 

【编程珠玑】第十二章 取样问题

一,概述         问题描述:如何生成0~n-1内的m个随机整数(不重复)                需求:按序输出,并且保证每个子集被选中的可能性相等。         1)给出下面代码 #include "stdio.h" #include "stdlib.h" #include "time.h" void getRandNumber(int m,int n)//在0...
  阅读(2054)  评论(3)
 

【编程珠玑】第十一章 排序 (插入排序和快速排序的深度优化)

一,概述         1)插入排序          要找到合适的位置,需要判断前一个元素比t小而后一个元素比t大。然后将t插入正确位置。          比较a[j-1]  跟 a[j] 的关系很关键          isort1: 没有到达最终位置,就交换该元素和它前面的元素 #include for(int i=1;i<5;i++)...
  阅读(1045)  评论(4)
 

【编程珠玑】第十章 节省空间

一,概述        1)节省空间带来的好处              程序变小使得加载更快;更容易读入高速缓存;需要操作的数据减少从而减少操作时间。                2)节省空间的方法               数学函数式替代要存储的数据。简单例子为:a[i]=i 。如果你要读取数组第i个元素只需要通过函数f(i) = i得到元素值,而不需要将所有数据存储在数组中。...
  阅读(721)  评论(0)
 

【编程珠玑】第九章 代码调优

一,概述         1)代码调优的目的是什么?               减少CPU运行时间;减少分页或增加高速缓存命中率;减少程序所需空间         2)代码调优为什么不能“滥用”?               1>效率的角色:不成熟的优化是大量编程灾害的根源,可能危及程序正确性、功能及可维护性。               2>度量工具:利用性能检测工具,找到“热点”代...
  阅读(863)  评论(2)
 

【编程珠玑】内联函数和宏

一,内联函数的用法   内联函数从源码层层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。   inline  Tablefunction(int I)    //是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义...
  阅读(739)  评论(4)
 

【编程珠玑】第八章 算法设计技术

一,概述        问题:求一维数组中连续子向量的最大和。        例如:a[6]={3,4,-2,-9,10,8}; 则最大连续子向量的和 为 10+8 = 18        1)解法一:简单算法 #include #define max(a, b) ((a)>(b)?(a):(b)) int main() { int a[6]={3,4,-2,-9,10,8}...
  阅读(982)  评论(9)
 

【编程珠玑】第七章 粗略估算

一,概述          1)72法则 :单位时间增长率 * 时间 =72   则该时间完成初始值翻番               题目:假设最初投资金额为100元,复息年利率9%,实现资金翻番需要多久?               利用“72法则”,将72除以9(增长率),得8,即需约8年时间,投资金额滚存至200元(翻番),而准确需时为8.0432年。               题...
  阅读(1260)  评论(0)
 

【编程珠玑】第六章 程序性能分析

一,概述        如果要提高软件的性能,需要从下面几个方面入手:         1、算法与数据结构         2、算法调优         3、数据结构重组         4、与系统无关的代码的调优(float取代double)。         5、与系统相关的调优,把经常使用的函数进行加速,比如关键代码使用汇编代替高级语言         6、硬件上使用浮点加速器...
 

【编程珠玑】第五章 编程小事

一,概述         主要讲解如何保证编程的正确性。在程序中加入断言(assert(断言内容) //如果错误,则终止程序。否则正常执行)。         typdef   //声明自定义类型                typedef int size; //声明int 型整数的别名                size array[4];                typ...
  阅读(675)  评论(0)
 

【编程珠玑】第四章 编写正确的程序

1、对下标限定界限:加条件 0 2、这个函数可以写成如下形式: #include using namespace std; int bs(int *a, int begin, int end, int v) { int *b = a + begin; //开始 int *e = a + end; //结束 int *mid = NULL; //中间...
  阅读(782)  评论(0)
 

【编程珠玑】第三章 数据决定程序结构

一,内容         通过使用恰当的数据结构来替代复杂的代码。 二,习题 1、题目描述:本书出版之时,美国的个人收入所得税分为5种不同的税率,其中最大的税率大约为40%.以前的情况则更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方法来计算1978年的美国联邦所得税。税率序列为0.14, 0.15, 0.16, 0.17, 0.18.....。序列中此后的计算大于...
  阅读(1099)  评论(5)
 

【编程珠玑】第二章 二分查找的巧妙应用

一,三个问题 A题:给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数。            1、在文件中至少存在这样一个数?            2、如果有足够的内存,如何处理?            3、如果内存不足,仅可以用文件来进行处理,如何处理? 答案:            1、32位整数,包括-2146473648~~2146473...
  阅读(2039)  评论(15)
 

【编程珠玑】第一章 开篇

一,题目:        如何在1MB的空间里面对一千万个整数进行排序?并且每个数都小于1千万。实际上这个需要1.25MB的内存空间(这里所说的空间是考虑用位图表示法时,每一位代表一个数,则1千万/(1024*1024*8) 约为1.25MB  )。        1MB总共有838,8608个可用位。所以估计也可以在1MB左右的空间里面进行排序了。 二,分析:         1)基于磁...
  阅读(2206)  评论(12)
 

【时间测量】代码运行时间的测量方法【linux/window】

一,返回单位为毫秒  #include  DWORD dwStart =    GetTickCount();   //   测试代码   DWORD      dwTime      =   GetTickCount() -    dwStart;  注意:GetTickCount()精确度有限,跟CPU有关,一般精确度在16ms左右,最精确也不会精确过10ms,这...



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值