遇到了一道题:longest substring with at most two distinct characters
我用sliding window解了,看到有个解法中有用到hash table的,至此了解到数据结构的概念,决定更改计划。
开始学习《数据结构与算法分析 c语言实现》。
此处附上暂时的对hash table的理解:
hash table:数据结构的一种,和数组。链表是一个类型的东西,用于整体存储调用一定数量的数据。是一种存储和调用数据的方式。
哈希表对待查数据构造商群,到一个关键字集合中,使用商群到原集的映射,每个关键字映射到一个等价类集合,通过关键字查找到对应的数据地址,在同一个等价类中,又有其他的秩序,便于系统的寻址
不同元素在同一等价类中的现象称为,哈希冲突,冲突是高效寻址的副产物,无法避免。
但是可以在同一等价类中构造秩序,例如链表。以进行下一步的精确寻址。
构建过程:
分配内存,内存分成不同的小块并区分,用于存放不同的等价类。
把元素集按某个,等价关系,构建商映射,得到不同的等价类,每个等价类通过一个map对应到存储块上
每个等价类中的元素的区分函数
等价关系的构建,等价类到内存块的映射,区分函数的构建;内存分块方法
内存分配与分块:多次调用malloc分配储存空间并用不同的指针标识
等价关系和商映射的构建:根据元素类型特点,找可利用的性质;根据性质确定一个key
区分函数的构建,根据元素类型特点,找可利用的性质
等价类到内存块:这就是hash函数?
使用的时候:
查找某元素:得到key,hash函数处理key得到hash值,对应到内存块,内存块内用比较函数,得到目标数据
原文地址:https://www.cnblogs.com/guguclaire/p/8424284.html