Lecture8: Hashing Ipython
字典app
一种抽象数据类型(Abstract Data Type ,ADT),维护一组元素,每一个元素都与一个关键字(KEY)相关,并有如下操做:函数
实现性能
直接寻址表(Direct Access Table):用KEY为数据下标保存元素。spa
问题:code
key必须是非负整数。ip
key的范围不能太大。hash
解决方法:it
散列表(hashing):io
怎么处理碰撞(collision)?
链接法:
把散列到同一槽中的全部元素都放在一个链表中。
执行性能:O(1 + α)。
python代码:
class hashTableItem(object): def __init__(self): self.key = None self.Next = None self.val = None class hash_table_chaining(object): def __init__(self,nHashSize): self.__KeyList = [] self.__nHashSize = nHashSize for i in range(nHashSize): self.__KeyList.append(hashTableItem()) return def __HashFun(self,key): return key % self.__nHashSize def insert(self,key,val): tmpNode = self.__KeyList[self.__HashFun(key)] while( ( tmpNode.key is not None ) and ( 'deleted' != tmpNode.key ) ): tmpNode = tmpNode.Next tmpNode.key = key tmpNode.val = val tmpNode.Next = hashTableItem() return def search(self,key): tmpNode = self.__KeyList[self.__HashFun(key)] while( tmpNode.key is not None ): if key == tmpNode.key : return tmpNode.val tmpNode = tmpNode.Next return None def delete(self,key): tmpNode = self.__KeyList[self.__HashFun(key)] while( tmpNode.key is not None ): if key == tmpNode.key : tmpNode.key = 'deleted' return True tmpNode = tmpNode.Next return False
散列函数(Hash Functions)
除法散列法(Division Method): h(k) = k mod m
乘法散列法(Multiplication Method):
全域散列法(Universal Hashing):