哈希表

哈希表

 

关联数组(Associative Array),映射(Map),特征表(Symbol Table),字典( Dictionary)

可作为哈希的对象是不能改变的,string,int,float,tuple,object    

set,dict,list可以改变不能作为key,想将list放入哈希表,可写成一个class,或转成tuple

 

操作:增删改查

解决冲突:

一、开放性地址。(open address)

1、线性(Linear Probing)

当产生冲突时放到下一个位置,此时所有操作(查找,修改,删除)可能会变成O(N)

需设置标识位,其中某个数删除后,设置标识位,表示此处曾有数。

缺陷:1、复杂度变为O(N)  2、主要交通堵塞(primary clustering),当产生大量冲突,之后另一个hashcode过来时,位置可能被占用,仍然堵塞。

2、平方(Quadratic Probing)

当产生冲突时放到12,22,32......位置,可解决主要交通堵塞,但有second clustering(远小于primary clustering)

二、链表(separate chain)

 

产生冲突时,设置链表放在后面。

缺陷:1、复杂度也可能变为O(N)

注:python中为开放性地址,java中为separate chain

三、再哈希

python 中当空间占到2/3时,会扩充*2,index就需要在计算(rehash)

四、equal

当使用Object作为key时,需要编写equal方法,判断查找到的是否是该对象

posted @ 2019-12-24 18:50  oldby  阅读(202)  评论(0编辑  收藏  举报