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))

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值