编程珠玑
文章平均质量分 55
bladeLight
这个作者很懒,什么都没留下…
展开
-
编程珠玑--第一章使用位图
问题描述:一个最多包括n个正整数的文件,每个数都小于n,其中n=10000000.如果在输入文件中有任何整数重复出现的话就是致命错误。要求按升序输出这些数。由于我们只能操纵字节,但是我们可以使用字节来操纵字节中的位,我们使用int(4个字节),如果我们想要将第k位置为1的话,我们只需要这样操作:a[k/32]|pow(2,31-k%32),当我们要判断某位是不是1的时候,使用相似的方法:a原创 2012-07-25 22:33:54 · 431 阅读 · 0 评论 -
编程珠玑--如何使用位逻辑运算(例如不、或、移位)来实现位向量
首先说明一下,假设使用的是8bit的数据类型(32bit的不好画),数据是怎么排列的:然后去理解下面的代码:#define BITSPERWORD 32 //表示一个整型含有32个bit#define SHIFT 5 //单位位移量#define MASK 0x1F //掩码#define N 10000000 //表示有1000万个数int a[1+N/BIT原创 2012-07-27 00:40:09 · 1826 阅读 · 3 评论 -
编程珠玑--第12章 取样问题
问题描述:程序的输入包含两个整数m和n,其中m讨论这些问题前有两个假设:1.有一个函数bigrand()能够返回很大的随机整数(远远大于m和n)。 2.另一个函数randint(i,j)能够返回i..j范围内均匀选择的随机整数。解法一:假设m=2,n=5,选择第一个数0的概率为2/5,可以通过以下语句来实现:if(bigrand()%5)sele原创 2012-07-26 17:35:39 · 808 阅读 · 0 评论 -
编程珠玑--第二章变位词程序的实现
题目描述:给定一个英语字典,找出其中的所有变位词集合。例如,“pots”、“stop”、“tops”互为变位词,因为每一个单词都可以通过改变其他单词中的字母的顺序来得到。程序主要有三部分组成,sign、sort和squash。我们用下图来说明(假设要处理的单词有六个pans pots opt snap stop tops),处理结果如下:可见sign是将单词进行排序(将pans排成原创 2012-07-28 22:51:40 · 832 阅读 · 0 评论 -
编程珠玑代码调优习题12
最经看了这道题目,不知道往哪想,看了答案才明白过来,原来是进位制的问题。题目大意:为了计算下面的多项式:y=a[n]*x^n+a[n-1]*x^(n-1)+...+a[1]*x^1+a[0],如下的代码使用了2n次乘法。请给出一个更快的函数。y=a[0]xi=1for i=[1,n]{ xi=x*xi y=y+a[i]*xi} 当我们用进位制的思想考虑的原创 2013-02-27 15:02:08 · 467 阅读 · 0 评论 -
编写正确的程序 习题4.6 3
int binarySearch(int l,int r,int t){ if(l>r) return -1; int mid=l+(r-l)/2; if(t==x[mid]) return mid; else if(t>x[mid]) return binarySearch(mid+1,r,t); else if(t<x[mid]) ret原创 2013-02-27 21:01:40 · 466 阅读 · 0 评论 -
通过二级指针插入节点
这是在编程珠玑的习题上看到的,P214第四题节点的定义如下:struct node{ int val; node *next; node(int v,node *p){val=v; next=p;}};另外初始化的过程中,初始化头结点,head=new node(maxval,0)其中maxval表示一个最大值通常的插入函数都会这样来写:void insert(int t)原创 2013-07-21 15:54:12 · 967 阅读 · 1 评论