编程珠玑(1)

 

这周借了本 “编程珠玑”,书不大,200多页,本以为能一周看完的,结果看完第1章就头大了。在此做点笔记,说不定找工作用得上。

第1章,
位图排序,一位代表一个数(如a[10]=1 表示数10存在)
问题里面还有一个 选择问题,即n个数里随机取k个不同的数。开始看到题目的答案就蒙了,后来想想其实很简单。
设数组为a[0]...a[n-1]
1、j=n
2、i=ran(0,j)     //0..j中随机
3、取出a[i],显示
4、将a[i]和a[j-1]交换
5、j--;
6、如果已有k个,结束;否则,goto 2
首先在0..n-1中取一个,然后取走的和最后一个交换,
在0..n-2中再取,。。。。。
。。。。。。

空间和时间的矛盾似乎有很长时间了,动态规划就是典型的空间换时间的策略。

第2章,
这章我一看到问题A就头疼了,看分析竟然没看懂,直到看到答案我才理解了。二分法并不需要数组或其他结构是排好序的,只要能二分就行。
问题B中学搞过,大学想起过一次,现在又忘了。abc --> a'b'c' --> (a'b'c')' = cba  其中T'是T的逆序
顺便说一句,补充材料的程序很有幽雅(?)。

你可能感兴趣的:(程序设计)