对哈希表及哈希函数的一点理解

来源:互联网 发布:c语言getchar位置输入 编辑:程序博客网 时间:2024/04/28 20:41

原来也听过哈希表,觉得那是比较高级的程序员需要注意的事情,没有注意,但今天看了下,他也不是很高深,也只是一种很平常的数据结构而已。

1,先说一下记录:

    我们一般都是把记录随机的放在表格中,如:张三,34;李四,23;王五,45;

 这样我们去寻找(用计算机寻找,不是用眼睛)时,我们可能寻找王五的次数可能是1-3次都有可能;如果把人数扩大到n,那么会他的时间复杂度也是千变万化,可能你会采用一些算法,比如快速排序法去优化,但是时间复杂度还是会在o(1)-o(logn)之间,如何才能一次就找到我们想要的记录“王五”了,这就涉及到数据结构的设计了。

2,哈希表:

     我们要一次就找到"王五",首先要对整个记录表进行重新编码,我们要额外开出空间来,重新存储这些编码,还要开出额外空间来存储编码和记录的对应规则,也就是成为规则,俗称哈希函数。这样,我们要找到王五,我们只要翻阅规则,找到王五的独一无二的编号,就可以直接找到王五了。这就是著名的“用空间换取时间”!

3,哈希函数:

    哈希表不仅占用空间多,最大的缺点就是规则的设置,怎么样才能设置出独一无二的编码,为此,人们想出了很多方法:

  3.1:直接定址:对于一些有序的数字记录:1,2....100.直接把他们的值作为编码。

          数字分析法:对一些含有数字的记录,可以研究他的数字规律,找到合适的不会产生误会的方法;

        平方取中法:也就是数字分析法吧,对数字平方后在处理,加大范围;

        折叠法: 对数字相加后,去前面几位作为编码;

       取余法:取一个大于记录总数的数P,除后的余数作为编码;

     随机数法:取数字然后放到rand()会得到随机数,作为编码;

  看来都是些数字游戏。

原创粉丝点击