嵌入式第三十篇——数据结构——哈希表

一、哈希表的基本概念

哈希表(Hash Table)是一种通过哈希函数将键(Key)映射到存储位置的数据结构,支持高效的插入、删除和查找操作,平均时间复杂度为O(1)。核心组成部分包括:

  • 哈希函数:将键转换为数组索引。
  • 数组(桶):存储键值对的底层结构。
  • 冲突处理机制:解决不同键映射到同一索引的问题。

二、哈希函数的设计

理想的哈希函数应满足:

  • 均匀性:键应均匀分布在数组中,减少冲突。
  • 确定性:同一键始终映射到同一索引。
  • 高效性:计算速度快。

常见hash函数设计:

(1)直接定值法

(2)平方取中法

(3)折叠法

(4)求余法

求余法示例(用于整数键):

python 复制代码
def hash_func(key, size):  
    return key % size  # 取模法  

三、冲突解决方法

链地址法

将冲突的键值对存储在同一个桶的链表中。查找时需要遍历链表。

python 复制代码
class HashTable:  
    def __init__(self, size):  
        self.size = size  
        self.table = [[] for _ in range(size)]  # 每个桶初始化为空列表  

    def insert(self, key, value):  
        index = hash_func(key, self.size)  
        for item in self.table[index]:  
            if item[0] == key:  
                item[1] = value  # 更新现有键  
                return  
        self.table[index].append([key, value])  # 添加新键值对  
开放寻址法

冲突时按规则(如线性探测、二次探测)寻找下一个空闲位置。

python 复制代码
def linear_probing_insert(table, key, value, size):  
    index = hash_func(key, size)  
    while table[index] is not None:  
        if table[index][0] == key:  
            table[index][1] = value  
            return  
        index = (index + 1) % size  # 线性探测  
    table[index] = [key, value]  

四、常见哈希表头文件配置

复制代码
typedef int DATATYPE;
typedef struct
{
DATATYPE* head;
int tlen;
}HS_TABLE;

HS_TABLE* CreateHsTable(int len);
int insertHsTable(HS_TABLE*hs,DATATYPE*data);
int SearchHsTable(HS_TABLE*hs,DATATYPE*data);
int DestroyHsTable(HS_TABLE*hs);

五、应用场景

  • 字典(Python的dict、Java的HashMap)。
  • 缓存系统(如Redis)。
  • 数据库索引。

六、注意事项

  • 哈希函数设计不当可能导致大量冲突,退化为O(n)时间复杂度。
  • 开放寻址法在删除时需特殊处理(如标记为"已删除"),避免查找链断裂。
相关推荐
csdn_aspnet30 分钟前
C++ 未排序数组中第 k 个最小/最大元素 | 最坏情况下的线性时间
数据结构·c++·算法
叶子野格36 分钟前
《Verilog学习:前置知识》
学习·fpga开发
wuyk55541 分钟前
从零吃透 MQTT 通信|第 6 章 MQTT 主题、过滤器、通配符、订阅管理、拒收机制详解与代码实现
c语言·stm32·学习
phltxy10 小时前
C语言操作符详解
java·c语言·算法
aqiu11111110 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
sunshine22 girl11 小时前
Java学习一 环境配置2 安装和基本使用Idea
java·学习·intellij-idea
辰烨chenye11 小时前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法
罗西的思考11 小时前
DreamZero 与 DreamDojo:世界模型与策略的分层协同综合分析与对比
人工智能·算法·机器学习
Kobebryant-Manba12 小时前
学习Bert微调
人工智能·学习·bert