编程珠玑(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的逆序
顺便说一句,补充材料的程序很有幽雅(?)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值