一种支持多关键字快速访问方法和装置的制作方法

文档序号:6402025阅读:141来源:国知局
专利名称:一种支持多关键字快速访问方法和装置的制作方法
技术领域
本发明涉及一种支持多关键字快速访问方法和装置。
背景技术
通常的嵌入式设备中,由于资源受限,数据结构往往只能采用最简单的链表或者数组进行数据缓存,在进行数据访问时,往往需要遍历所有数据,才能拿到所需要的数据,即使采用可以快速访问的数据结构,由于结构限制,往往只能通过单一关键字进行访问,造成访问效率较低。发明内容
本发明要解决的技术问题之一,在于提供一种支持多关键字快速访问方法,针对所需的不同类型的关键字,有效解决嵌入式设备中,在资源受限的情况下进行多关键字的访问效率问题和资源问题。
本发明是这样实现的:一种支持多关键字快速访问的方法,建立哈希表,使哈希表包括哈希表头、主数据节点组合、次关键字哈希与主关键字组合,所述主数据节点组合的键值为主关键字,数据为用户实际数据,所述次关键字哈希与主关键字组合的内容为次关键字的哈希值和主关键字,从而建立起次关键字与数据的映射;所述主数据节点组合包括多个主关键字链表,所述次关键字哈希与主关键字组合包括多个次关键字链表,所述主关键字链表和次关键字链表对应地链接在哈希表头节点上;所述方法中的访问数据分为主关键字访问数据的流程和次关键字访问数据的流程; 所述主关键字访问数据的流程包括: 步骤11、开始,调用哈希算法计算主关键字的哈希值; 步骤12、计算该哈希值在哈希表中的索引; 步骤13、遍历索引位置下的主关键字链表,查找是否存在与主关键字相等的数据记录,若是,返回数据,若否,则结束; 所述次关键字访问数据的流程包括: 步骤21、开始,调用哈希算法计算次关键字的哈希值, 步骤22、计算该哈希值在哈希表中的索引; 步骤23、获取次关键字链表的第一个数据节点,判断是否到达次关键字链表尾部,若是,就结束,若否,进入步骤24; 步骤24、判断该数据节点的哈希值是否与步骤21中的哈希值相等,若是,根据对应节点的主关键字获取数据,并进入步骤25,若否,则获取下一个次关键字链表的节点,回到步骤23 ; 步骤25、判断是否为待访问的数据,若是,返回数据并结束;若否,则获取下一个次关键字链表的节点,回到步骤23。
进一步的,所述哈希表的构造包括初始化哈希表、获取数据、插入所有数据的过程,其中,每插入一条数据的过程包括:
步骤31、开始,计算主关键字的哈希值和插入位置;
步骤32、根据计算所得的插入位置将数据插入主关键字链表;
步骤33、判断是否还需要其他次关键字,若否,则结束,若是,计算该次关键字的哈希值,进入步骤34 ;
步骤34、将哈希值和主关键字形成数据节点并插入到次关键字链表中,回到步骤33。所述哈希表中数据的删除过程包括主关键字的删除过程和次关键字的删除过程;
所述主关键字的删除过程包括:
步骤41、开始,根据主关键字获取数据,即判断数据是否存在,若是,进入步骤42,若否,则结束;
步骤42、判断数据是否还有未处理的次关键字,若是,分别进入步骤43,若否,则进入步骤48 ;
步骤43、计算次关键字的哈希值并定位到对应的哈希位置;
步骤44、获取次关键字链表的第一个节点;
步骤45、判断是否到达次关键字链表的尾部,是,则回到步骤42,若否,进入步骤46 ;步骤46、判断该节点的主关键字与待删除的主关键字是否相等,若是,进入步骤47,若否,进入步骤48 ;
步骤47、从次关键字链表删除该次关键字节点,进入步骤48 ;
步骤48、获取次关键字链表的下一个节点,并回到步骤45 ;
步骤49、从主关键字链表中删除数据后结束;
所述次关键字的删除过程包括:
步骤51、开始,根据次关键字获取对应的数据,即判断数据是否存在,若是,进入步骤52,若否,则结束;
步骤52、获取主关键字,根据主关键字进行删除数据,然后结束。所述哈希表中数据的更改过程包括更改非关键字内容的过程和更改次关键字内容;
所述更改非关键字内容的过程是根据主关键字获取数据;然后修改数据后结束; 所述更改次关键字内容的过程包括:
步骤61、开始,根据主关键字获取数据;
步骤62、根据数据的次关键字定位到对应哈希表头的位置; 步骤63、判断主关键字与待修改的主关键字是否相等,若是,进入步骤64,若否,则结
束;
步骤64、从次关键字链表删除该次关键字节点;
步骤65、将主关键字对应的数据节点修改为目标数据;
步骤66、生成次关键字的哈希值,并定位到对应哈希表头索引的位置;
步骤67、将哈希值和主关键字形成数据节点并插入到改表头节点下的次关键字链表后结束。本发明要解决的技术问题之二,在于提供一种支持多关键字快速访问装置,在哈希表中,引入多关键字的概念,通过多关键字哈希配合主关键字,针对所需的不同类型的关键字,有效解决嵌入式设备中,在资源受限的情况下进行多关键字的访问效率问题和资源问题。
本发明是这样实现的:一种支持多关键字快速访问的装置,该装置包括哈希表,所述哈希表包括哈希表头、主数据节点组合、次关键字哈希与主关键字组合,所述主数据节点组合的键值为主关键字,数据为用户实际数据,所述次关键字哈希与主关键字组合的内容为次关键字的哈希值和主关键字,从而建立起次关键字与数据的映射;所述主数据节点组合包括多个主关键字链表,所述次关键字哈希与主关键字组合包括多个次关键字链表,所述主关键字链表和次关键字链表对应地链接在哈希表头节点上。
本发明具有如下优点:本发明在哈希表中引入多关键字的概念,通过次关键字配合主关键字,并结合哈希算法,将次关键字访问转化为与常数级别的主关键字访问,可以有效减少数据缓存,从而减少资源占用,适用于各种类型的环境,尤其是资源受限和性能要求高的嵌入式设备。


下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明哈希·表的数据结构示意图。
图2为本发明主关键字访问数据的流程图。
图3为本发明次关键字访问数据的流程图。
图4为本发明哈希表构造过程的流程图。
图5为本发明插入数据过程的流程图。
图6为本发明根据主关键字删除数据过程的流程图。
图7为本发明根据次关键字删除数据过程的流程图。
图8为本发明更改非关键字内容的流程图。
图9为本发明更改次关键字内容的流程图。
具体实施方式
本发明的支持多关键字快速访问的方法,建立哈希表,如图1所示,使哈希表包括哈希表头、主数据节点组合、次关键字哈希与主关键字组合,所述主数据节点组合的键值为主关键字,数据为用户实际数据,所述次关键字哈希与主关键字组合的内容为次关键字的哈希值和主关键字,从而建立起次关键字与数据的映射;所述主数据节点组合包括多个主关键字链表,所述次关键字哈希与主关键字组合包括多个次关键字链表,所述主关键字链表和次关键字链表对应地链接在哈希表头节点上。
本发明的哈希表与传统的哈希表的区别在于:本发明是在传统的哈希表头节点中引入一个新的链接节点,通过次关键字的哈希与主关键字,建立起次关键字与数据的映射,将次关键字的查找和搜索转化为两次哈希查找,提高数据访问效率,同时由于在同一个表内处理,也减少了多个关键字时,由于需要多个关键字快速访问,建立多个映射造成的资源浪费,且在嵌入式设备中,由于资源限制,在非第一关键字的类型较多,如为字符串,存储次关键值的哈希可以有效减少次关键字的占据的存储空间。
所述方法中的访问数据分为主关键字访问数据的流程和次关键字访问数据的流程; 如图2所示,所述主关键字访问数据的流程包括: 步骤11、开始,调用哈希算法计算主关键字的哈希值; 步骤12、计算该哈希值在哈希表中的索引; 步骤13、遍历索引位置下的主关键字链表,查找是否存在与主关键字相等的数据记录,若是,返回数据,若否,则结束; 如图3所示,所述次关键字访问数据的流程包括: 步骤21、开始,调用哈希算法计算次关键字的哈希值, 步骤22、计算该哈希值在哈希表中的索引; 步骤23、获取次关键字链表的第一个数据节点,判断是否到达次关键字链表尾部,若是,就结束,若否,进入步骤24; 步骤24、判断该数据节点的哈希值是否与步骤21中的哈希值相等,若是,根据对应节点的主关键字获取数据,并进入步骤25,若否,则获取下一个次关键字链表的节点,回到步骤23 ; 步骤25、判断是否为待访问的数据,若是,返回数据并结束;若否,则获取下一个次关键字链表的节点,回到步骤23。
如图4所示,所述哈希表的构造包括初始化哈希表、获取数据、插入所有数据的过程。
其中如图5所示,每插入一条数据的过程包括: 步骤31、开始,计算主关键字的哈希值和插入位置; 步骤32、根据计算所得的插入位置将数据插入主关键字链表; 步骤33、判断是否还需要其他次关键字,若否,则结束,若是,计算该次关键字的哈希值,进入步骤34 ; 步骤34、将哈希值和主关键字形成数据节点并插入到次关键字链表中,回到步骤33。
所述哈希表中数据的删除过程包括主关键字的删除过程和次关键字的删除过程; 如图6所示,所述主关键字的删除过程包括: 步骤41、开始,根据主关键字获取数据,即判断数据是否存在,若是,进入步骤42,若否,则结束; 步骤42、判断数据是否还有未处理的次关键字,若是,分别进入步骤43,若否,则进入步骤48 ; 步骤43、计算次关键字的哈希值并定位到对应的哈希位置; 步骤44、获取次关键字链表的第一个节点; 步骤45、判断是否到达次关键字链表的尾部,是,则回到步骤42,若否,进入步骤46 ;步骤46、判断该节点的主关键字与待删除的主关键字是否相等,若是,进入步骤47,若否,进入步骤48 ; 步骤47、从次关键字链表删除该次关键字节点,进入步骤48 ; 步骤48、获取次关键字链表的下一个节点,并回到步骤45 ;步骤49、从主关键字链表中删除数据后结束;
如图7所示,所述次关键字的删除过程包括:
步骤51、开始,根据次关键字获取对应的数据,即判断数据是否存在,若是,进入步骤52,若否,则结束;
步骤52、获取主关键字,根据主关键字进行删除数据,然后结束。所述哈希表中数据的更改过程包括更改非关键字内容的过程和更改次关键字内容;
如图8所示,所述更改非关键字内容的过程是根据主关键字获取数据;然后修改数据后结束;
如图9所示,所述更改次关键字内容的过程包括:
步骤61、开始,根据主关键字获取数据;
步骤62、根据数据的次关键字定位到对应哈希表头的位置;
步骤63、判断主关键字与待修改的主关键字是否相等,若是,进入步骤64,若否,则结
束;
步骤64、从次关键字链表删除次 关键字节点;
步骤65、将主关键字对应的数据修改为目标数据;
步骤66、生成次关键字的哈希值,并定位到对应哈希表头索引的位置;
步骤67、将哈希值和主关键字形成数据节点并插入到改表头节点下的次关键字链表后结束。综上所述,本发明具有如下优点:本发明在哈希表中引入多关键字的概念,通过次关键字配合主关键字,并结合哈希算法,将次关键字访问转化为与常数级别的主关键字访问,可以有效减少数据缓存,从而减少资源占用,适用于各种类型的环境,尤其是资源受限和性能要求高的嵌入式设备。虽然以上描述了本发明的具体实施方式
,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
权利要求
1.一种支持多关键字快速访问的方法,其特征在于:建立哈希表,使哈希表包括哈希表头、主数据节点组合、次关键字哈希与主关键字组合,所述主数据节点组合的键值为主关键字,数据为用户实际数据,所述次关键字哈希与主关键字组合的内容为次关键字的哈希值和主关键字,从而建立起次关键字与数据的映射;所述主数据节点组合包括多个主关键字链表,所述次关键字哈希与主关键字组合包括多个次关键字链表,所述主关键字链表和次关键字链表对应地链接在哈希表头节点上; 所述方法中的访问数据分为主关键字访问数据的流程和次关键字访问数据的流程; 所述主关键字访问数据的流程包括: 步骤11、开始,调用哈希算法计算主关键字的哈希值; 步骤12、获取该哈希值在哈希表中的索引; 步骤13、遍历索引位置下的主关键字链表,查找是否存在与主关键字对应的数据记录,若是,返回数据,若否,则结束; 所述次关键字访问数据的流程包括: 步骤21、开始,调用哈希算法计算次关键字的哈希值, 步骤22、计算该哈希值在哈希表中的索引; 步骤23、获取次关键字链表的第一个数据节点,判断是否到达次关键字链表尾部,若是,就结束,若否,进入步骤24; 步骤24、判断该数据节点的哈希值是否与步骤21中的哈希值相等,若是,根据对应节点的主关键字获取数据,并进入步骤25,若否,则获取下一个次关键字链表的节点,回到步骤23 ; 步骤25、判断是否为待访问的数据,若 是,返回数据并结束;若否,则获取下一个次关键字链表的节点,回到步骤23。
2.根据权利要求1所述的一种支持多关键字快速访问的方法,其特征在于:所述哈希表的构造包括初始化哈希表、获取数据、插入所有数据的过程,其中,每插入一条数据的过程包括: 步骤31、开始,计算主关键字的哈希值和插入位置; 步骤32、根据计算所得的插入位置将数据插入主关键字链表; 步骤33、判断是否还需要其他次关键字,若否,则结束,若是,计算该次关键字的哈希值,进入步骤34 ; 步骤34、将哈希值和主关键字形成数据节点并插入到次关键字链表中,回到步骤33。
3.根据权利要求2所述的一种支持多关键字快速访问的方法,其特征在于:所述哈希表中数据的删除过程包括主关键字的删除过程和次关键字的删除过程; 所述主关键字的删除过程包括: 步骤41、开始,根据主关键字获取数据,即判断数据是否存在,若是,进入步骤42,若否,则结束; 步骤42、判断数据是否还有未处理的次关键字,若是,分别进入步骤43,若否,则进入步骤48 ; 步骤43、计算次关键字的哈希值并定位到对应的哈希位置; 步骤44、获取次关键字链表的第一个节点;步骤45、判断是否到达次关键字链表的尾部,是,则回到步骤42,若否,进入步骤46 ;步骤46、判断该节点的主关键字与待删除的主关键字是否相等,若是,进入步骤47,若否,进入步骤48 ; 步骤47、从次关键字链表删除节点,进入步骤48 ; 步骤48、获取次关键字链表的下一个节点,并回到步骤45 ; 步骤49、从主关键字链表中删除数据后结束; 所述次关键字的删除过程包括: 步骤51、开始,根据次关键字获取对应的数据,即判断数据是否存在,若是,进入步骤52,若否,则结束; 步骤52、获取主关键字,根据主关键字进行删除数据,然后结束。
4.根据权利要求3所述的一种支持多关键字快速访问的方法,其特征在于:所述哈希表中数据的更改过程包括更改非关键字内容的过程和更改次关键字内容; 所述更改非关键字内容的过程是根据主关键字获取数据;然后修改数据后结束; 所述更改次关键字内容的过程包括: 步骤61、开始,根据主关键字获取数据; 步骤62、根据数据的次关键字定位到对应哈希表头的位置; 步骤63、判断主关键字与待修改的主关键字是否相等,若是,进入步骤64,若否,则结束; 步骤64、从次关键字链表删除该次关键字节点; 步骤65、将数据节点修改为目标数据; 步骤66、生成次关键字的哈希值,并定位到对应哈希表头索引的位置; 步骤67、将哈希值和主关键字形成数据节点并插入到改表头节点下的次关键字链表后结束。
5.一种支持多关键字快速访问的装置,其特征在于:该装置包括哈希表,所述哈希表包括哈希表头、主数据节点组合、次关键字哈希与主关键字组合,所述主数据节点组合的键值为主关键字,数据为用户实际数据,所述次关键字哈希与主关键字组合的内容为次关键字的哈希值和主关键字,从而建立起次关键字与数据的映射;所述主数据节点组合包括多个主关键字链表,所述次关键字哈希与主关键字组合包括多个次关键字链表,所述主关键字链表和次关键字链表对应地链接在哈希表头节点上。
全文摘要
本发明提供一种支持多关键字快速访问的方法,建立哈希表,使哈希表包括哈希表头、主数据节点组合、次关键字哈希与主关键字组合,主数据节点组合的键值为主关键字,数据为用户实际数据,次关键字哈希与主关键字组合的内容为次关键字的哈希值和主关键字,从而建立起次关键字与数据的映射;主数据节点组合包括多个主关键字链表,次关键字哈希与主关键字组合包括多个次关键字链表,主关键字链表和次关键字链表对应地链接在哈希表头节点上;所述方法中的访问数据分为主关键字访问数据的流程和次关键字访问数据的流程。本发明针对所需的不同类型的关键字,有效解决嵌入式设备中,在资源受限的情况下进行多关键字的访问效率问题和资源问题。
文档编号G06F17/30GK103226591SQ20131012904
公开日2013年7月31日 申请日期2013年4月15日 优先权日2013年4月15日
发明者严柱海 申请人:厦门亿联网络技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1