开始用心学习这个行业

        今天花了一下午的时间,才看完了《编程珠玑》——Programming Pearls,Jon Bentley——————的第一章,开篇,囧。荒废了很多时光,现在努力也不晚,就说说今天下午看开篇的心得吧。 

这本书真的是相当不错,仅仅是一个开篇,就让我的眼界开阔了许多。开篇提出的一个实际问题是:如何在只有1MB左右内存的情况下,实现对一个有1000万个7位不重复整数的文件的排序。这本书的分析过程也很精妙,从简单的使用系统外部排序,再深入的分析了数据大小,得出了读取40遍文件,分批的对纪录进行排序的方法。 

最后作者使用的解决方式是,用位示图法,用1000万个bit(约1.25MB)表示1000万个整数的集合,从而在只有1MB的内存情况下解决了这个问题,排序时间只有1s左右,整个操作只有10s左右。Excellent! 这本书最好的地方在于它的习题,可以指引着你将这个问题不断发散,发散,引出其他非常多的知识与非常精妙的算法和程序。以本章第二题来说,它问:如何使用与,或,移位操作完成对位字符串的操作。 答案中的程序不到10行,本人愚钝,用了30分钟才弄懂程序,又用了15分钟才明白其中精妙,而写出这样的程序,还路漫漫其修远兮。                                                              2012.2.21 

程序如下: C语言描述

#define N 10000000
#define BITPERWORD 32
#define MASK 5
int a[1+N/BITPERWORD];
int test(int i){ return a[i>>SHIFT] & (1<<(i&MASK)); }
void clr(int i){ a[i>>SHIFT] &= ~(1<<(i & MASK));}
void set(int i){ a[i>>SHIFT] |= 1 << (i & MASK);}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值