to myself 的分类学习日志

做自己想做的事
posts - 232, comments - 6, trackbacks - 0, articles - 0

查找 Search

  1. 顺序查找 Sequential search
  2. 二分查找 Binary search
  3. 块查找 Blocking search
  4. 哈希查找 Hash search
  5. 二叉树查找 Binary search tree search


 1,Binary search:适用于已经排好序的数据进行查找。时间复杂度O(logN)。
Implementation:

 

Binary Search




2,Hash search:关键是Hash函数算法(Hash function)和碰撞的解决办法(Collision resolution)。时间复杂度O(1)。
参考:http://en.wikipedia.org/wiki/Hash_table

常用的字符串Hash函数:

Hash function

参考:
1,若干经典的字符串哈希函数:http://www.cnitblog.com/schkui/archive/2007/07/02/29320.html
2,各种字符串Hash函数比较:http://blog.csai.cn/user3/50125/archives/2009/35638.html

常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。
常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。


Hash查找算法测试

test of Hash search





测试:
1,分别在奇数、偶数个有序数组中查找存在的值。
2,分别在奇数、偶数个有序数组中查找不存在的值。
3,在空数组中查找值。
4,如果数组中有多个相等值的数,是否能返回索引最小的(或最大的)。




只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理