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
手机关键词搜索算法——真实系统中通过散列技术或数据库