感觉编程珠玑写的很好,但是书上写的不尽详细,仿佛如“高手过招,点到为止”,网上查些资料,加上自己的领悟,写写呗。
第一章:参照:http://chaoswork.com/blog/2012/05/18/programming-pearls-study-note-1/
1.4.如何生成位于0到n-1之间的k个不同的随机顺序的随机整数?
Idea1:用set行,主要是set里面的元素不重复,利用到了这一点
Idea2:随机打乱,输出前k个就可以。
for i = [0,n)
swap(i, randint(i, n-1))
感觉这儿的n完全可以被k代替啊?
Idea3:文章里面讲解的也可以。
select=m
remaining = n;
for i = [0,n)
if(bigrand()%remaining)<select
print i
select--
remaining--;
第一章感觉这个题最好,但是第一章的主旨就是bitmap,一种大数据排序的题解情况。
第二章:主要是字符串的旋转,然后涉及到矩阵的旋转,但是书后所给的答案是还是借助了外部矩阵,因此若作矩阵旋转,还得循环移位。
第三章:本章讲数据结构,愧然,没感觉出来。
第四章:把二分查找推送到极致,文章第六题涉及到异或操作,在编程之美有涉及。
第五章:本章主要讲断言,有普通断言和静态断言(static_assert)之分。
第六章:愧然,没感觉出来。
第七章:估算,感觉主要讲了几个法则:
经验法则:72法则:假设以年利率r%投资一笔钱y年,如果ry=72,那么你的投资差不多会翻倍。
Little定律:系统中物体的平均数量等于物体离开系统的平均速度和每个物体在系统中停留的平均时间乘机。
第八章:本章以最大子段和为例进行讲解,随后便是对于最大子段和的变更,二维的,和的定义改变。
以8.10最为优秀,使子段和最接近0,解题思路:1,累积求和;2,排序;3,作差。
第九章:代码调优,高效地统计1的个数,X&=(X-1)
第十章:节省空间,愧然,没感觉出来。
第十一章:排序,各种排序,你还记得几种,顺便提及计数排序(稳定排序),区别于基数排序
搜集几个比较好的排序算法:
快排:http://www.cnblogs.com/morewindows/archive/2011/08/13/2137415.html
堆排序:http://blog.csdn.net/morewindows/article/details/6709644
第十二章:取样,和第一章遥相呼应。
比较好的问题就是12.10,不知的n的大小,随机选取K个(特殊情况K=1)
http://blog.csdn.net/zdl1016/article/details/4768715
第十三章:搜索,各种数据结构的搜索效率。
第十四章:堆
堆的最大的用户,求前K
优先级队列的底层实现就是堆。
四个典型的应用:14.4
a)Haffman编码;
b)计算大型浮点数之和;
c)Top K
d)文件归并
第十五章:字符串
典型题目:
1,一个字符串中查找最长的重复子字符串;解:构造后缀字符串子串数组,排序,一步(a[i],a[i+1])匹配
2,一个字符串中查找最长的重复M遍的子字符串;解:构造后缀字符串子串数组,排序,M步(a[i],a[i+M])匹配
3,两个字符串的最长公共子串:此题存在两种解法:
解法一:字符串一str1,字符串二str2,连接两个字符串str1$str2,然后构造后缀字符串子串数组,排序,一步匹配,但是匹配时要做到有且仅有一个字符串含有$。
解法二:构造一个矩阵,看矩阵的斜对角线,具体参见:
http://www.cnblogs.com/zhangchaoyang/articles/2012070.html
此贴对于字符串进行了较好的总结,但是时间复杂度却不一定最优,还需结合编程之美阅读。