第一章 开篇 - 编程珠玑 - 读书笔记

在朋友的推荐下开始读这本书。读技术类的书有个习惯,先看下目录并决定要精读还是泛读。

感觉不错,值得精读。其中一个不错的方法就是写读书笔记,并坚持每一篇多多少少写一些完整的代码。

比如开篇的问题便是掌握和应用位运算的一个很好的例子。作者巧妙地通过填充位图(位向量)作为整数集合并遍历完成排序的方式达到的时间和空间的双赢。

问题描述如下:

输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=107。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数相关联。

输出:按升序排列的输入整数的列表。

约束:最多有(大约)1 MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为10秒就不需要进一步优化了。

 

还没来得及往后看,我便用C++的bitset写了一下代码:

注释部分是我去翻了SL里bitset的源文件后得出的结论,往下则看到了作者在习题2中直接使用逻辑与或移位等运算实现位向量。代码可以说是短小精悍:

与bitset实现机制一样,作者也是以32位整形数为单位进行位图(位向量)填充的底层操作的。

总之,读了第一章后对逻辑运算的使用及bitset的实现机制多了点了解。当然文中位图排序思想的形成也不是一带而过的,通过这个双赢的例子,作者得出的结论是——对小问题的仔细分析有进可以得到明显的实际益处。

其实说白了就是具体问题具体分析,还是老毛比较犀利。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值