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

一、哈希表的基本概念

哈希表(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)时间复杂度。
  • 开放寻址法在删除时需特殊处理(如标记为"已删除"),避免查找链断裂。
相关推荐
love在水一方7 小时前
VLN 入门学习计划 —— 基于 InternNav
学习
_深海凉_8 小时前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
旖-旎9 小时前
深搜练习(电话号码字母组合)(3)
c++·算法·力扣·深度优先遍历
谭欣辰9 小时前
C++快速幂完整实战讲解
算法·决策树·机器学习
Mr_pyx9 小时前
【LeetHOT100】随机链表的复制——Java多解法详解
算法·深度优先
red_redemption9 小时前
自由学习记录(175)
学习
AIFarmer10 小时前
【无标题】
开发语言·c++·算法
AGV算法笔记10 小时前
CVPR 2025 最新感知算法解读:GaussianLSS 如何用 Gaussian Splatting 重构 BEV 表示?
算法·重构·自动驾驶·3d视觉·感知算法·多视角视觉
nashane10 小时前
HarmonyOS 6学习:画中画(PiP)状态同步与场景化实战指南
学习·pip·harmonyos·harmonyos 5
_李小白11 小时前
【android opencv学习笔记】Day 8: remap(像素位置重映射)
android·opencv·学习