重读《Programming Pearls》之二:Aha!Algorithms

 

3个问题:

 

1、在一个顺序文件中,最多有40亿个32位整数,在其中寻找一个没有出现的32位整数。

 

解:Binary Search——无所不在的二分法。

 

2、将一个具有n个元素的一维向量向左旋转i个位置。

 

解:三种方法——

块交换 Block Swap:

杂耍算法Juggling:

手摇算法Reversal:

 

三种方法中Block Swap占用空间有可能很大,Juggling只需要一个额外的空间;

Block Swap最容易理解,Reversal方法最容易实现也不容易出错。

我开始以为Juggling的效率应该最高,但是后面的思考题说明实际上Juggling的效率最低,Block Swap的时间性能最好——涉及内存和局部性问题。

 

3、在一个词典中找出所有的anagram("pots" "stop" "tops"互为anagram:他们能够由其它词的字母交换位置实现)。

 

解:排序——最常见的算法。

 

 

Principles:

Sorting。

Binary Search。

Signatures。

Problem Definition。

A Problem Solver’s Perspective。高效率比勤奋重要。解决问题时思考比

 

思考:

 

联想到的问题:

找不同

http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1202

 

找相同

http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1203

 

继续找相同

http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1204

 

 

手机关键词搜索算法——真实系统中通过散列技术或数据库

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值