CN112948642A - 一种嵌入式哈希表及其操作方法、遍历方法和装置 - Google Patents
一种嵌入式哈希表及其操作方法、遍历方法和装置 Download PDFInfo
- Publication number
- CN112948642A CN112948642A CN202110341716.8A CN202110341716A CN112948642A CN 112948642 A CN112948642 A CN 112948642A CN 202110341716 A CN202110341716 A CN 202110341716A CN 112948642 A CN112948642 A CN 112948642A
- Authority
- CN
- China
- Prior art keywords
- node
- key value
- link
- hash table
- nodes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种嵌入式哈希表及其操作方法、遍历方法和装置,嵌入式哈希表,包括链接法哈希表和包括双向链表;所述双向链表包括若干用于存储key键值的键值结点,所述链接法哈希表包括若干用于存储value数据的链接结点;各个键值结点之间均为双向连接,且每个键值结点与对应的链接结点之间为双向连接。本发明通过在现有链接法哈希表的基础上增加一个双向链表构成双层结构,且双向链表和链接法哈希表分别独立存储key键值和value数据,使得遍历操作不同于现有链接法哈希表,而是简化了逻辑,降低了代码复杂度,提高了哈希表遍历的效率,其遍历的算法复杂度为O(n),与数组遍历操作相同。
Description
技术领域
本发明涉及数据存储技术领域,具体涉及一种嵌入式哈希表及其操作方法、遍历方法和装置。
背景技术
随着智能技术和物联网技术的快速发展,各种设备互联互通,嵌入式设备开始承担越来越多的功能,需要集成的模块越来越多,嵌入式软件开发的规模和复杂度也越来越高。一方面为了应对软件功能逻辑的高复杂度,许多在计算机领域比较成熟的数据结构和算法被直接使用在嵌入式设备中,如队列、链表和哈希表等;另一方面目前嵌入式OS(如FreeRTOS和DSP BIOS)无法直接支持一些常见的算法,需要用户自主实现,但嵌入式设备有限的计算能力和较小的内存资源限制了这些算法的应用及性能。
在嵌入式软件处理中,数组是最常用的数据结构,比较适合于处理有序的顺序数据。哈希表实现简单,查找速度快,常用于数据检索等方面。在无序的数据索引实现中,哈希表往往较数组有更大的灵活性和易于理解的表达形式。
现有的链接法哈希表如图1所示,链接结点由桶结点elem1~elemM和扩展结点node1~nodeN组成,k-v对的键值和数据存储在每个结点。通常情况下elem1~elemM是静态结点,node1~nodeN是动态结点。M的大小和哈希表的大小成正比,哈希表越大M值越大。N表示了哈希碰撞的次数,取决于散列函数的选用和k-v对的数量。
链接法的遍历过程是依次读取elem1~elemM结点和node1~nodeN结点中键值和数据。在哈希表较大而实际存储的k-v较少时效率低下。例如:在一个键值为正整数1-65535的无序索引场景下,散列函数使用简单的键值对M取余方法,为了减少哈希碰撞,链接法哈希表在设计时取M=500,假设有100个k-v存储在哈希表且无碰撞发生N=0,那么为了遍历哈希表的所有k-v对,需要依次读取500个结点的键值和数据并判断有效性。
发明内容
本发明的目的在于提供嵌入式哈希表及构建方法、遍历方法和遍历装置,以解决现有链接法哈希表遍历效率低的问题。
此外,本发明还提供基于上述嵌入式哈希表的构建方法、遍历方法和遍历装置。
本发明通过下述技术方案实现:
嵌入式哈希表,包括链接法哈希表,还包括双向链表;
所述双向链表包括若干用于存储key键值的键值结点,所述链接法哈希表包括若干用于存储value数据的链接结点;
各个键值结点之间均为双向连接,且每个键值结点与对应的链接结点之间为双向连接。
本申请的发明构思在于:
在现有链接法哈希表的基础上增加一个双向链表,双向链表中的键值结点用于存储key键值,链接法哈希表的链接结点用于存储value数据,且基于k-v映射关系建立各个键值结点之间的双向连接关系,以及每个键值结点与对应的链接结点之间的双向连接关系,及本发明中key键值和value数据为独立存储,在利用双向链表优先保证高效遍历的情况下采用键值和数据的独立存储节约了内存,有效扩大了哈希表在嵌入式软件中的适用场景。
因此,本发明通过在现有链接法哈希表的基础上增加一个双向链表构成双层结构,且双向链表和链接法哈希表分别独立存储key键值和value数据,使得遍历操作不同于现有链接法哈希表,而是简化了逻辑,降低了代码复杂度,提高了哈希表遍历的效率,其遍历的算法复杂度为O(n),与数组遍历操作相同。
进一步地,键值结点仅存储key键值且存储类型为uint32,用于同时支持指针类型和正整数类型。
进一步地,链接结点仅存储value数据的首地址,存储类型为为void*无类型指针类型,用于支持任意的数据内容。
进一步地,链接结点由桶结点elem1~elemM和扩展结点node1~nodeN组成,键值结点为key1~keyK,
其中,K值等于哈希表中存储的k-v对数量,,M+N≥K,M和N取值同图1中的链接法桶结点M及扩展结点N保持一致。
一种嵌入式哈希表的操作方法,包括查找操作:
S1、基于散列函数计算key键值对应的哈希码,读取哈希码对应的链接结点;
S2、比较链接结点指向的键值结点与所查找的key键值,判断key键值是否已经存在,若存在则返回链接结点中的数据。
进一步地,还包括插入操作:
如果查找操作判断结果为key键值不存在,则进行以下操作:
S3、申请一个新的键值结点存储key键值并插入双向链表的首位置,申请一个新的链接结点存储value数据并插入链接结点的最后位置;
S4、建立键值结点和链接结点之间的双向关系。
进一步地,还包括删除操作:
基于所查找的链接结点读取其指向的键值结点,删除键值结点和链接结点,释放对应的存储空间。
进一步地,还包括更新操作:
基于查找操作判断结果,如果key键值不存在,则不予处理,如果存在,则直接更新链接结点中的数值。
一种嵌入式哈希表的遍历方法,包括以下步骤:
步骤S01:根据双向链表中结束标识判断是否存在键值结点,若不存在则直接结束遍历;若存在则转入步骤S02;
步骤S02:读取键值结点中的key键值;
步骤S03:根据键值结点和链接结点的双向关系,从键值结点中找到对应的链接结点并读取链接结点中存储的value数据。
一种嵌入式哈希表的遍历装置,包括:
判断单元:用于判断双向链表中是否存在键值结点;
第一读取单元:用于读取键值结点中的key键值;
第二读取单元:用于读取链接结点中的value数据;
数据处理单元:用于执行具体的数据操作。
本发明与现有技术相比,具有如下的优点和有益效果:
1、本发明支持用户在嵌入式软件中使用哈希表进行软件功能设计,简化逻辑,降低代码复杂度,提高哈希表遍历的效率,其遍历的算法复杂度为O(n),和数组遍历操作相同。
2、本发明在利用双向链表优先保证高效遍历的情况下采用键值和数据的独立存储节约了内存,有效扩大了哈希表在嵌入式软件中的适用场景。
3、本发明利用键值结点和链接节点之间的双向关系,在删除操作上达到了和链接法同等效率。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:
图1为现有链接法哈希表的结点结构示意图;
图2为本发明哈希表结点结构示意图;
图3为本发明哈希表遍历操作流程图;
图4为本发明哈希表遍历装置示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
实施例1:
如图2所示,嵌入式哈希表,包括链接法哈希表,还包括双向链表;
所述双向链表包括若干用于存储key键值的键值结点,所述链接法哈希表包括若干用于存储value数据的链接结点;
各个键值结点之间均为双向连接,且每个键值结点与对应的链接结点之间为双向连接。
在本实施例中,所述键值结点仅存储key键值且存储类型为uint32;所述链接结点仅存储value数据的首地址,存储类型为指针类型;
所述链接结点由桶结点elem1~elemM和扩展结点node1~nodeN组成,键值结点为key1~keyK,key1~keyK顺次连接,且key1和key2双向连接,key2和key3双向连接连接,依次类推,
其中,K值等于哈希表中存储的k-v对数量,M和N取值同图1中的链接法哈希表中桶结点M及扩展结点N保持一致。
实施例2:
一种嵌入式哈希表的操作方法,包括查找操作:
S1、基于散列函数计算key键值对应的哈希码,读取哈希码对应的链接结点;
S2、比较链接结点指向的键值结点与所查找的key键值,判断key键值是否已经存在,若存在则返回链接结点中的数据。
还包括插入操作:
如果查找操作判断结果为key键值不存在,则进行以下操作:
S3、申请一个新的键值结点存储key键值并插入双向链表的首位置,申请一个新的链接结点存储value数据并插入链接结点的最后位置;
S4、建立键值结点和链接结点之间的双向关系。
还包括删除操作:
基于所查找的链接结点读取其指向的键值结点,删除键值结点和链接结点,释放对应的存储空间。
还包括更新操作:
基于查找操作判断结果,如果key键值不存在,则不予处理,如果存在,则直接更新链接结点中的数值。
实施例3:
如图3所示,基于实施例1所述的一种嵌入式哈希表的遍历方法,包括以下步骤:
步骤S01:根据双向链表中结束标识判断是否存在键值结点,若不存在则直接结束遍历;若存在则转入步骤S02;
步骤S02:读取键值结点中的key键值;
步骤S03:根据键值结点和链接结点的双向关系,从键值结点中找到对应的链接结点并读取链接结点中存储的value数据;
步骤S04:数据输出。
为了与现有常见的链接法遍历进行效率比较,本实施例通过以下实例加以说明:
假设哈希表的哈希桶是一个大小为M=10的数组,散列函数为取余函数=key%10,k-v数据为kv1={1,“v1”},kv2={11,“v11”},kv3={9,“v9”}。
在图1所示的链接法哈希表中k-v存储于每个结点,kv1和kv3存储在桶节点,kv2的哈希码为1,和kv1的哈希码冲突,只能存储于扩展结点中,遍历过程依次读取10个哈希桶结点及其扩展结点,复杂度为11。
按图2所示本发明的嵌入式哈希表,key存储在双向链表的键值结点,value数据存储在链接法的链接结点,遍历过程仅需要依次读取3个键值结点,复杂度为3。
实施例4:
如图4所示,基于实施例1所述的一种嵌入式哈希表的遍历装置,包括:
判断单元:用于判断双向链表中是否存在键值结点;
第一读取单元:用于读取键值结点中的key键值;
第二读取单元:用于读取链接结点中的value数据;
数据处理单元:用于执行具体的数据操作。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种嵌入式哈希表,包括链接法哈希表,其特征在于,还包括双向链表;
所述双向链表包括若干用于存储key键值的键值结点,所述链接法哈希表包括若干用于存储value数据的链接结点;
各个键值结点之间均为双向连接,且每个键值结点与对应的链接结点之间为双向连接。
2.根据权利要求1所述的一种嵌入式哈希表,其特征在于,所述键值结点仅存储key键值且存储类型为uint32。
3.根据权利要求1所述的一种嵌入式哈希表,其特征在于,所述链接结点仅存储value数据的首地址,存储类型为指针类型。
4.根据权利要求1-3任一项所述的一种嵌入式哈希表,其特征在于,所述链接结点由桶结点elem1~elemM和扩展结点node1~nodeN组成,键值结点为key1~keyK,
其中,K值等于哈希表中存储的k-v对数量,M+N≥K。
5.一种嵌入式哈希表的操作方法,其特征在于,包括查找操作:
S1、基于散列函数计算key键值对应的哈希码,读取哈希码对应的链接结点;
S2、比较链接结点指向的键值结点与所查找的key键值,判断key键值是否已经存在,若存在则返回链接结点中的数据。
6.根据权利要求5所述的一种嵌入式哈希表的操作方法,其特征在于,还包括插入操作:
如果查找操作判断结果为key键值不存在,则进行以下操作:
S3、申请一个新的键值结点存储key键值并插入双向链表的首位置,申请一个新的链接结点存储value数据并插入链接结点的最后位置;
S4、建立键值结点和链接结点之间的双向关系。
7.根据权利要求5所述的一种嵌入式哈希表的操作方法,其特征在于,还包括删除操作:
基于所查找的链接结点读取其指向的键值结点,删除键值结点和链接结点,释放对应的存储空间。
8.根据权利要求5所述的一种嵌入式哈希表的操作方法,其特征在于,还包括更新操作:
基于查找操作判断结果,如果key键值不存在,则不予处理,如果存在,则直接更新链接结点中的数值。
9.一种嵌入式哈希表的遍历方法,其特征在于,包括以下步骤:
步骤S01:根据双向链表中结束标识判断是否存在键值结点,若不存在则直接结束遍历;若存在则转入步骤S02;
步骤S02:读取键值结点中的key键值;
步骤S03:根据键值结点和链接结点的双向关系,从键值结点中找到对应的链接结点并读取链接结点中存储的value数据。
10.一种嵌入式哈希表的遍历装置,其特征在于,包括:
判断单元:用于判断双向链表中是否存在键值结点;
第一读取单元:用于读取键值结点中的key键值;
第二读取单元:用于读取链接结点中的value数据;
数据处理单元:用于执行具体的数据操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110341716.8A CN112948642A (zh) | 2021-03-30 | 2021-03-30 | 一种嵌入式哈希表及其操作方法、遍历方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110341716.8A CN112948642A (zh) | 2021-03-30 | 2021-03-30 | 一种嵌入式哈希表及其操作方法、遍历方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112948642A true CN112948642A (zh) | 2021-06-11 |
Family
ID=76230543
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110341716.8A Pending CN112948642A (zh) | 2021-03-30 | 2021-03-30 | 一种嵌入式哈希表及其操作方法、遍历方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112948642A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114707023A (zh) * | 2022-02-28 | 2022-07-05 | 苏州浪潮智能科技有限公司 | 一种哈希表遍历方法、系统、设备及计算机可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080192754A1 (en) * | 2007-02-12 | 2008-08-14 | Yoon-Jin Ku | Routing system and method for managing rule entries of ternary content addressable memory in the same |
CN102314485A (zh) * | 2011-07-27 | 2012-01-11 | 中国科学院计算机网络信息中心 | 哈希表添加、查找和删除方法及装置 |
CN104298774A (zh) * | 2014-10-31 | 2015-01-21 | 北京思特奇信息技术股份有限公司 | 一种利用函数查询哈希表的方法及系统 |
CN105635001A (zh) * | 2015-12-30 | 2016-06-01 | 天津盛购科技发展有限公司 | 一种基于两端限定双向链表子树的快速便利算法 |
CN106096023A (zh) * | 2016-06-24 | 2016-11-09 | 腾讯科技(深圳)有限公司 | 数据读取方法、数据写入方法及数据服务器 |
CN106095850A (zh) * | 2016-06-02 | 2016-11-09 | 中国联合网络通信集团有限公司 | 一种数据处理方法及设备 |
-
2021
- 2021-03-30 CN CN202110341716.8A patent/CN112948642A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080192754A1 (en) * | 2007-02-12 | 2008-08-14 | Yoon-Jin Ku | Routing system and method for managing rule entries of ternary content addressable memory in the same |
CN102314485A (zh) * | 2011-07-27 | 2012-01-11 | 中国科学院计算机网络信息中心 | 哈希表添加、查找和删除方法及装置 |
CN104298774A (zh) * | 2014-10-31 | 2015-01-21 | 北京思特奇信息技术股份有限公司 | 一种利用函数查询哈希表的方法及系统 |
CN105635001A (zh) * | 2015-12-30 | 2016-06-01 | 天津盛购科技发展有限公司 | 一种基于两端限定双向链表子树的快速便利算法 |
CN106095850A (zh) * | 2016-06-02 | 2016-11-09 | 中国联合网络通信集团有限公司 | 一种数据处理方法及设备 |
CN106096023A (zh) * | 2016-06-24 | 2016-11-09 | 腾讯科技(深圳)有限公司 | 数据读取方法、数据写入方法及数据服务器 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114707023A (zh) * | 2022-02-28 | 2022-07-05 | 苏州浪潮智能科技有限公司 | 一种哈希表遍历方法、系统、设备及计算机可读存储介质 |
CN114707023B (zh) * | 2022-02-28 | 2024-01-23 | 苏州浪潮智能科技有限公司 | 一种哈希表遍历方法、系统、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Zuo et al. | {Write-Optimized} and {High-Performance} hashing index scheme for persistent memory | |
US20030004938A1 (en) | Method of storing and retrieving multi-dimensional data using the hilbert curve | |
JP7047228B2 (ja) | データ照会方法、装置、電子機器、可読記憶媒体、及びコンピュータープログラム | |
US8027961B2 (en) | System and method for composite record keys ordered in a flat key space for a distributed database | |
CN112000846B (zh) | 基于gpu分组lsm树索引的方法 | |
WO2011079748A1 (zh) | 链表的创建方法及系统、数据的查找方法及系统 | |
US6735600B1 (en) | Editing protocol for flexible search engines | |
CN106095698A (zh) | 面向对象的缓存写入、读取方法及装置 | |
CN114064984B (zh) | 一种基于稀疏数组链表的世界状态增量更新方法及装置 | |
WO2024055571A1 (zh) | 一种namespace设置方法、装置及可读存储介质 | |
CN112948642A (zh) | 一种嵌入式哈希表及其操作方法、遍历方法和装置 | |
CN112148738A (zh) | 哈希冲突处理方法及系统 | |
Buchsbaum et al. | Confluently persistent deques via data-structural bootstrapping | |
CN113297432B (zh) | 用于分区拆分与合并的方法、处理器可读介质和系统 | |
KR102698516B1 (ko) | 네트워크 키 값 인덱싱 설계 | |
Liu et al. | Pea hash: a performant extendible adaptive hashing index | |
WO2019098870A1 (en) | Data storage system and method of providing a data storage system | |
CN112084141A (zh) | 一种全文检索系统扩容方法、装置、设备及介质 | |
CN115544149A (zh) | 基于HBase多端融合的小文件存储方法和系统 | |
CN117608473A (zh) | 一种内存b+树存储空间优化方法 | |
CN118672483A (zh) | 数据处理方法、装置、计算机程序产品、设备及存储介质 | |
CN112667858A (zh) | 采用hash链存储数据的方法及数据写入、读取方法 | |
KR100557859B1 (ko) | 엠비알 압축 방법 및 이를 이용한 색인 구축 방법 | |
Köppl | Load-Balancing Succinct B Trees | |
Ivanova | A survey of mathematical and informational foundations of the BigArM access method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB03 | Change of inventor or designer information | ||
CB03 | Change of inventor or designer information |
Inventor after: Ren Wenlong Inventor after: Wang Xiaolin Inventor after: Chen Lu Inventor after: Ou Xiancheng Inventor after: Chen Linfeng Inventor before: Ren Wenlong Inventor before: Liu Songyi Inventor before: Wen Kui Inventor before: Luo Yong |
|
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210611 |