python数据结构(哈希表)
·
目录
哈希表
以关键字为自变量,通过一定的函数关系,计算出对应的函数值(哈希值)
哈希函数是一个映象,将关键字的集合映射到某个地址集合上。
对数字的关键字的构造方法
1.直接定址法
2.数字分析法
3.平方取中法
4.折叠法
5.除留余数法
6.随机数法
(如果非数字关键字,则需先对其进行数字化处理)
直接定址法
哈希函数为关键字的线性函数
H(key)=key 或者 H(key) = a key + b
除留余数法
最为常见的方法之一。对于表长为m的数据集合,散列公式为:
f(key) = key mod p (p<=m)
该方法最关键的是对于p的选择,当数据量较大,冲突产生,一般选择近m的质数。
随机数法
选择一个随机数,取关键字的随机函数值为它的散列地址。
f(key)=random(key)
最后实例:
class HashTable:
def init(self, size):
self.elem = [None for i in range(size)] #使用list保存哈希表
self.count = size #最大表长
def hash(self, key):
return key % self.count #散列函数采用除留余数法
def insert_hash(self, key):
address = self.hash(key) #求散列地址
while self.elem[address]: #当前位置已经有数据了,发生冲突。
address = (address+1) % self.count #线性探测下一地址是否可用
self.elem[address] = key #没有冲突则直接保存。
def search_hash(self, key):
star = address = self.hash(key)
while self.elem[address] != key:
address = (address + 1) % self.count
if not self.elem[address] or address == star: #说明没找到或者循环开始
return False
return True
if name == '__main__':
list_a = [12, 67, 56, 16, 25, 37, 22, 29, 15, 47, 48, 34]
print(list_a)
hash_table = HashTable(12) #表长为12
for i in list_a:
hash_table.insert_hash(i)
print("构造哈希表")
for i in hash_table.elem:
if i:
print((i, hash_table.elem.index(i)), end=" ")
print("\n")
print("查找15结果是:",hash_table.search_hash(15))
print("查找33结果是:",hash_table.search_hash(33))
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)