CN114780533A - 基于双数组字典树的存储空间分配方法、装置及电子设备 - Google Patents
基于双数组字典树的存储空间分配方法、装置及电子设备 Download PDFInfo
- Publication number
- CN114780533A CN114780533A CN202210119190.3A CN202210119190A CN114780533A CN 114780533 A CN114780533 A CN 114780533A CN 202210119190 A CN202210119190 A CN 202210119190A CN 114780533 A CN114780533 A CN 114780533A
- Authority
- CN
- China
- Prior art keywords
- node
- list
- level
- storage space
- child
- 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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种基于双数组字典树的存储空间分配方法、装置、电子设备及计算机可读存储介质,涉及计算机技术领域。该方法包括:在更新第一列表之后,在层级节点第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为层级节点第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,层级节点第一列表包括第一层级的至少一个层级节点,至少一个层级节点按照层级节点的子节点的数量由大到小的顺序排序,层级节点目标位置之前不存在空闲的存储空间;在层级节点第一列表中移除层级节点目标节点以更新层级节点第一列表。
Description
技术领域
本公开实施例涉及计算机技术领域,更具体地,涉及一种基于双数组字典树的存储空间分配方法、装置、电子设备及计算机可读存储介质。
背景技术
字典树(Trie树)是一种树形结构,经常使用在搜索引擎系统中以建立有效的数据检索组织结构,但是会导致系统内存空间利用率偏低。内存空间利用率与字符集区间中字符的数量相关,字符的数量越小,内存空间利用率便越高,反之便越低。因此,相较于字符数量较小的语言(例如英语,只有A~Z共26个字母)而言,字符的数量较大的语言(例如汉语、日语等)所导致的内存空间利用率偏低的情况更为严重,不可忽视。
目前,相关技术中提出双数组字典树以提升上述内存空间利用率,避免过多内存空间被浪费。实际情况中,由于汉语中汉字字符的数量巨大,内存空间利用率偏低的问题依然无法得到有效改善。
发明内容
本申请实施例的一个目的是提供一种基于双数组字典树的存储空间分配的新的技术方案,以解决现有技术中在通过双数组字典树建立数据结构的过程中内存空间利用率偏低的问题。
根据本申请的第一方面,提供了一种基于双数组字典树的存储空间分配方法,包括:在更新第一列表之后,在第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,第一列表包括第一层级的至少一个层级节点,至少一个层级节点按照层级节点的子节点的数量由大到小的顺序排序,目标位置之前不存在空闲的存储空间;在第一列表中移除目标节点以更新第一列表。
可选地,在第一列表中移除目标节点以更新第一列表之前,该方法还包括:将至少一个第一子节点添加至第二层级的第二列表中;其中,第二层级为第一层级的子层级;在第一列表中移除目标节点以更新第一列表之后,该方法还包括:在第一列表为空且第二层级的第二列表不为空的情况下,将第二层级调整为第一层级;根据当前的第一层级中至少一个层级节点的子节点的数量,按照层级节点的子节点的数量对至少一个层级节点进行排序以更新第一列表。
可选地,该方法还包括:在未获取第一层级的至少一个层级节点的情况下,获取字典树的根节点的至少一个第二子节点;将至少一个第二子节点作为第一层级的至少一个层级节点,按照层级节点的子节点的数量由大到小的顺序排序对至少一个层级节点排序,根据排序结果将至少一个层级节点存储在第一列表中以更新第一列表。
可选地,在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间,包括:将空闲位置起始指针指向目标位置;根据至少一个第一子节点的离散间距,在目标位置之后的空闲的存储空间中确定至少一个第一子节点一一对应的空闲的子节点存储空间;将第一子节点存储在对应的子节点空闲存储空间中。
根据本申请的第二方面,还提供了一种基于双数组字典树的存储空间分配装置,包括:处理模块,用于在更新第一列表之后,在第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,第一列表包括第一层级的至少一个层级节点,至少一个层级节点按照层级节点的子节点的数量由大到小的顺序排序,目标位置之前不存在空闲的存储空间;第一更新模块,用于在第一列表中移除目标节点以更新第一列表。
可选地,该装置还包括:添加模块,用于在第一更新模块在第一列表中移除目标节点以更新第一列表之前,将至少一个第一子节点添加至第二层级的第二列表中;其中,第二层级为第一层级的子层级;调整模块,用于在第一更新模块在第一列表中移除目标节点以更新第一列表之后,在第一列表为空且第二层级的第二列表不为空的情况下,将第二层级调整为第一层级;第二更新模块,用于根据调整模块调整后的当前的第一层级中至少一个层级节点的子节点的数量,按照层级节点的子节点的数量对至少一个层级节点进行排序以更新第一列表。
可选地,该装置还包括:获取模块,用于在未获取第一层级的至少一个层级节点的情况下,获取字典树的根节点的至少一个第二子节点;第三更新模块,用于将至少一个第二子节点作为第一层级的至少一个层级节点,按照层级节点的子节点的数量由大到小的顺序排序对至少一个层级节点排序,根据排序结果将至少一个层级节点存储在第一列表中以更新第一列表。
可选地,处理模块用于:将空闲位置起始指针指向目标位置;根据至少一个第一子节点的离散间距,在目标位置之后的空闲的存储空间中确定至少一个第一子节点一一对应的空闲的子节点存储空间;将第一子节点存储在对应的子节点空闲存储空间中。
根据本申请的第三方面,还提供了一种电子设备,包括存储器和处理器,存储器用于存储计算机程序;处理器用于执行计算机程序,以实现根据本申请第一方面的方法。
根据本申请的第四方面,还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序在被处理器执行时实现根据本申请的第一方面的方法。
本申请实施例的一个有益效果在于,更新第一列表之后,在第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,第一列表包括第一层级的至少一个层级节点,至少一个层级节点按照层级节点的子节点的数量由大到小的顺序排序,目标位置之前不存在空闲的存储空间;目标位置之前不存在空闲的存储空间,目标位置之后的空闲的存储空间中存在离散的存储空间,在此情况下,本申请实施例能够有效避免空闲的存储空间中的离散的存储空间被浪费,有效解决内存空间利用率偏低的问题。提升内存空间利用率。在第一列表中移除目标节点以更新第一列表,以便于在满足第一列表不为空的情况下再次触发执行为第一列表中在顺序上位于第一位的目标节点的至少一个子节点分配存储空间的过程,完成对第一列表中的每个层级节点的子节点分配存储空间的过程。由此可见,本申请实施例能够解决现有技术中在通过字典树建立数据检索组织结构的过程中内存空间利用率偏低的问题,提高系统内存空间利用率。
通过以下参照附图对本申请的示例性实施例的详细描述,本申请实施例的其它特征及其优点将会变得清楚。
附图说明
被结合在说明书中并构成说明书的一部分的附图示出了本公开的实施例,并且连同其说明一起用于解释本公开实施例的原理。
图1A是相关技术中根据双数组字典树的一存储列表示意图;
图1B是相关技术中根据双数组字典树的另一存储列表示意图;
图2是根据本申请一些实施例的一种基于双数组字典树的存储空间分配方法的方法流程图;
图3是根据本申请一些实施例的字典树中层级的示意图;
图4是根据本申请一些实施例的另一种基于双数组字典树的存储空间分配方法的方法流程图;
图5A是根据本申请一些实施例的基于双数组字典树的存储空间分配方法的一种分配结果示意图;
图5B是根据本申请一些实施例的基于双数组字典树的存储空间分配方法的另一种分配结果示意图;‘
图5C是根据本申请一些实施例的基于双数组字典树的存储空间分配方法的再一种分配结果示意图;
图6是根据本申请一些实施例中一具体示例中至少一个层级节点以及层级节点的子节点的示意图;
图7A是图6所示的至少一个层级节点中一层级节点的子节点的存储空间分配结果示意图;
图7B是图6所示的至少一个层级节点中另一层级节点的子节点的存储空间分配结果示意图;
图7C是图6所示的至少一个层级节点中再一层级节点的子节点的存储空间分配结果示意图;
图7D是图6所示的至少一个层级节点中又一层级节点的子节点的存储空间分配结果示意图;
图7E是图6所示的至少一个层级节点中又一层级节点的子节点的存储空间分配结果示意图;
图8是根据本申请一些实施例的一种基于双数组字典树的存储空间分配装置的功能结构框图;
图9是根据本申请一些实施例的电子设备的硬件结构示意图。
具体实施方式
现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
下面,参照附图描述根据本申请的各个实施例和例子。
字典树包括根节点和除根节点以外的至少一个节点。根节点不包含字符,除根节点以外的至少一个节点中每个节点包含一个字符。目前,双数组字典树是利用2个数组控制节点之间的状态转移,以对每个节点的子节点进行空间分配以建立数据结构。
如图1A所示,节点存储在节点列表10中。节点列表10中以阴影表示列表中已被分配的空间,已被分配的空间已被占用,不能再用于存储节点;节点列表10中以空白表示列表中未被分配的空间,未被分配的空间没有被占用,可以用于存储节点。
请继续参见图1A,双数组字典树在对每个节点的子节点进行空间分配时,将空闲空间起始位置指针(free_start)11指向节点列表10中最后一个已被分配的空间之后的第一个未被分配的空间的位置处。
实际情况中,由于节点的编码是离散的,因此不可避免会出现如图1B所示的存储结果,即节点列表10中已被分配的空间并不是连续的,最后一个已被分配的空间之前的空间中还存在离散的未被分配的空间。在此情况下,位于已被分配的空间之前的未被分配的空间不能得到利用,导致内存空间中的大量空间被浪费,内存空间利用率偏低。对于汉语而言,其字符数量以及字符编码的离散性都较大,因此内存空间被浪费的情况尤甚,内存空间利用率偏低的情况无法得到有效改善。
基于上述存在的问题,本申请实施例提供一种基于双数组字典树的存储空间分配方法,用于解决现有技术中在通过双数组字典树建立数据结构的过程中内存空间利用率偏低的问题。
<方法实施例>
图2是根据本申请一些实施例的一种基于双数组字典树的存储空间分配方法的方法流程图。如图2所示,该方法包括如下步骤S210~S220。
步骤S210:在更新第一列表之后,在第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,第一列表包括第一层级的至少一个层级节点,至少一个层级节点按照层级节点的第一子节点的数量由大到小的顺序排序,目标位置之前不存在空闲的存储空间。
在介绍本步骤之前,首先对第一层级以及第一层级的至少一个层级节点进行介绍。
具体地,根据字典树中根节点以外的各节点与字典树的根节点的子孙关系(例如从根节点到达一个节点所要经历的节点的个数),将与根节点具有相同子孙关系的节点划分到一个层级中,由此可以得到多个层级。
例如,如图3所示,多个层级包括层级1~层级n,n为自然数且n大于1,根节点的第二子节点所在的层级为层级1,层级1中节点的子节点所在层级为层级2,依次类推。
第一层级为上述多个层级中的一个层级。第一层级的至少一个层级节点包括划分至第一层级中的所有节点中的一个或多个节点。
需要说明的是,在未对第一列表中的节点进行移除(对第一列表中的节点进行移除参见步骤S220)的情况下,第一列表包括第一层级的至少一个层级节点,该至少一个层级节点包括划分至第一层级中的所有节点;在至少一次对第一列表中的节点进行移除(对第一列表中的节点进行移除参见步骤S220)的情况下,第一列表包括第一层级的至少一个层级节点,该至少一个层级节点包括:划分至第一层级中的所有节点中除已移除的节点以外的其他节点。
例如,如图3所示,第一层级为层级1,第一层级的至少一个层级节点可以包括第一节点31、第二节点32和第三节点33中的一个或多个层级节点。在未对第一列表中的节点进行移除的情况下,第一层级的至少一个层级节点包括第一节点31、第二节点32和第三节点33;在至少一次对第一列表中的节点进行移除的情况下,例如对第二节点33进行移除的情况下,第一层级的至少一个层级节点包括:第一节点31和第三节点33。
至少一个层级节点按照层级节点的子节点的数量由大到小的顺序排序。
示例地,以未对第一列表中的节点进行移除的情况为例,参见图3所示,若第一层级为层级1,第一层级包括第一节点31、第二节点32和第三节点33共3个层级节点,第一节点31的子节点数量为2,第二节点32的子节点数量为1,第三节点33的子节点数量为4,按照子节点数量由大到小的顺序对第一节点31、第二节点32和第三节点33进行排序,可以得到如下排序结果:第三节点33-第一节点31-第二节点32,第一列表中的节点及其对应的排序为:第三节点33-第一节点31-第二节点32。若对第三节点33进行了移除,第一列表中第一层级的至少一个层级节点包括:第一节点31和第二节点32,第一列表中的节点及其对应的排序为:第一节点31-第二节点32。
第一列表包括第一层级的至少一个层级节点,更新第一列表即对第一列表中的至少一个层级节点进行更新,例如对第一列表中存储的第一层级中的层级节点进行移除(例如步骤S220),又如对第一列表中的至少一个层级节点进行排序(例如后文实施例中的步骤S490)。只要是对第一列表中的至少一个层级节点进行了修改,都可以认为是更新了第一列表。
第一列表不为空即第一列表中存储有一个或多个层级节点;反之,第一列表为空即第一列表中没有存储数据。
在满足更新第一列表之后,在第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个子节点分配存储空间。空闲的存储空间为没有存储数据的,可以用存储数据的存储空间。目标节点为第一列表中的至少一个层级节点在排序上位于第一位的节点。
可以首先将双数组字典树中的空闲位置起始指针(free_start)指向目标位置,然后根据至少一个子节点的离散间距,在目标位置之后(包括目标位置)的空闲的存储空间中确定该至少一个子节点一一对应的空闲的子节点存储空间,例如可以根据至少一个子节点的离散间距,在目标位置之后的空闲的存储空间中确定符合上述离散间距的、与至少一个子节点一一对应的空闲的子节点存储空间,将子节点的编码存储在对应的子节点空闲存储空间中。目标位置之前不存在空闲的存储空间,目标位置之后的空闲的存储空间中存在离散的存储空间,在此情况下,本申请实施例能够有效避免空闲的存储空间中的离散的存储空间被浪费,有效解决内存空间利用率偏低的问题。提升内存空间利用率。
步骤S220:在第一列表中移除目标节点以更新第一列表。
由于步骤S210中已经对目标节点的至少一个第一子节点分配了存储空间,因此在步骤S220中在第一列表中移除(即删除)目标节点,以更新第一列表,以便于在满足第一列表不为空的情况下再次触发执行步骤S210,完成对第一列表中的每个层级节点的子节点分配存储空间的过程。
由此可见,在更新第一列表之后,在第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,第一列表包括第一层级的至少一个层级节点,至少一个层级节点按照层级节点的子节点的数量由大到小的顺序排序,目标位置之前不存在空闲的存储空间;目标位置之前不存在空闲的存储空间,目标位置之后的空闲的存储空间中存在离散的存储空间,在此情况下,本申请实施例能够有效避免空闲的存储空间中的离散的存储空间被浪费,有效解决内存空间利用率偏低的问题。提升内存空间利用率。在第一列表中移除目标节点以更新第一列表。以便于在满足第一列表不为空的情况下再次触发执行为第一列表中在顺序上位于第一位的目标节点的至少一个子节点分配存储空间的过程,完成对第一列表中的每个层级节点的子节点分配存储空间的过程。由此可见,本申请实施例能够解决现有技术中在通过字典树建立数据检索组织结构的过程中内存空间利用率偏低的问题,提高系统内存空间利用率。
下面通过一个具体实施例对本申请中方案的执行过程进行说明。如图4所示,本申请中方案的执行过程包括如下步骤S410~S490。
步骤S410:在未获取第一层级的至少一个层级节点的情况下,获取字典树的根节点的至少一个第二子节点。
步骤S410在还未获取到第一列表之前执行。获取字典树的根节点的至少一个第二子节点的目的在于:在后续步骤(对应步骤S420)中根据字典树的根节点的至少一个第二子节点首次更新第一列表。
步骤S420:将至少一个第二子节点作为第一层级的至少一个层级节点,按照层级节点的子节点的数量由大到小的顺序排序对至少一个层级节点排序,根据排序结果将至少一个层级节点存储在第一列表中以更新第一列表。
步骤S430:在更新第一列表的情况下,判断第一列表是否为空。
若判断结果为否,即第一列表不为空,执行步骤S440;若判断结果为是,即第一列表为空,执行步骤S470。
步骤S440:在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间。
步骤S440的执行过程与步骤210相同,具体可以参见步骤S210中的对应描述,此处不再赘述。
步骤S450:将至少一个第一子节点添加至第二层级的第二列表中;其中,第二层级为第一层级的子层级。
在字典树中,相邻的两个层级为父子层级。其中,子层级的节点包括父层级中的各节点的子节点。
如图3所示,层级1和层级2为父子层级,层级2为层级1的子层级,层级2的节点包括层级1中各节点的子节点。
第二层级为第一层级的子层级,第二层级和第一层级中的节点满足:第二层级中的节点包括第一层级中所有节点的子节点。
步骤S460:在第一列表中移除目标节点以更新第一列表。
步骤S460的执行过程与步骤220相同,具体可以参见步骤S220中的对应描述,此处不再赘述。
由于在第一列表中移除目标节点触发了更新第一列表的操作,因此在执行完步骤S460后,重新执行步骤S430。
步骤S470:判断第二层级的第二列表是否为空。
若判断结果为否,即第二列表不为空,执行步骤S480;若判断结果为是,即第二列表为空,结束本次流程。
步骤S480:将第二层级调整为第一层级。
将第二层级调整为第一层级,在此情况下,第二层级的第二列表被调整第一层级的第一列表。
步骤S490:根据当前的第一层级中至少一个层级节点的子节点的数量,按照层级节点的子节点的数量对至少一个层级节点进行排序以更新第一列表。
根据当前的第一层级中至少一个层级节点的子节点的数量,按照层级节点的子节点的数量对至少一个层级节点进行排序,以更新第一列表。
在步骤S490中,由于按照层级节点的子节点的数量对至少一个层级节点进行了排序从而进行了更新第一列表的操作,因此在执行完步骤S490后,重新执行步骤S430,以便于在满足第一列表不为空的情况下再次触发执行步骤S440,完成对第一列表中的每个层级节点的子节点分配存储空间的过程。
步骤S410~步骤S490的执行过程适用于字典树中存在至少两个层级的情况。
如图5A所示,斜线阴影部分为已分配空间,空白部分为未分配空间,交叉线阴影部分为本次确定的存储第一子节点的子节点空闲存储空间。在第一次为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间时,目标节点的至少一个第一子节点包括编码离散的5个第一子节点,在此情况下,将空闲位置起始指针(free_start)11指向目标位置,目标位置之前不存在空闲的存储空间,然后在数据存储空间的目标位置之后的所有空闲的存储空间中,确定与编码离散的5个第一子节点一一对应的空闲的子节点存储空间,最后将子节点存储在对应的子节点空闲存储空间中。
如图5B或图5C所示,斜线阴影部分为已分配空间,空白部分为未分配空间,交叉线阴影部分为本次确定的存储第一子节点的子节点空闲存储空间。在图5A中第一次为第一列表中在顺序上位于第一位的目标节点的5个第一子节点分配存储空间的基础上,图5B或图5C为第二次为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间。
如图5B或图5C所示,目标节点的至少一个第一子节点包括编码离散的3个第一子节点,在此情况下,在已经在上次存储了5个第一子节点的数据存储空间中,将空闲位置起始指针(free_start)指向目标位置,由于目标位置之前不存在空闲的存储空间,因此可以看到目标位置指在了上一次最后一个已被分配的存储空间之前的空闲的存储空间的位置上,目标位置之后的存储空间包括数据存储空间中上一次最后一个已被分配的空间之前的空闲的存储空间、以及上一次最后一个已被分配的空间之后的空闲的存储空间。在此情况下,确定与本次编码离散的3个第一子节点一一对应的空闲的子节点存储空间后,若一个或多个子节点存储空间位于上一次最后一个已被分配的空间之前的空闲的存储空间,则能够实现对上一次最后一个已被分配的空间之前的空闲的存储空间的有效利用,提高空间利用率。
如图5B所示,本次编码离散的3个第一子节点一一对应的空闲的子节点存储空间均位于上一次最后一个已被分配的空间之前的空闲的存储空间中,实现了对上一次最后一个已被分配的空间之前的空闲的存储空间的有效利用。
如图5C所示,本次编码离散的3个第一子节点一一对应的空闲的子节点存储空间中的2个空闲的子节点存储空间位于上一次最后一个已被分配的空间之前的空闲的存储空间中,本次编码离散的3个第一子节点一一对应的空闲的子节点存储空间中的另外1个空闲的的子节点存储空间位于上一次最后一个已被分配的空间之后的空闲的存储空间中,实现了对上一次最后一个已被分配的空间之前的空闲的存储空间的有效利用。
下面以字符集是汉语的字符集为例,对本申请实施例的方案进行举例说明。
对“北京”、“北海”、“南京”、“南海”、“海上”、“海下”、“海信”、“海关”、“海军”、“湖北”、“湖南”、“湖塘”这12个词构建字典树后,进行基于双数组字典树的存储空间分配。对这12个词构建字典树如图6所示。
从如图6所示的字典树可知,第一层级的至少一个层级节点包括:“北”、“南”、“海”和“湖”这4个字符对应的4个节点,下面将“北”对应的节点称为“北”节点、“南”对应的节点称为“南”节点、“海”对应的节点称为“海”节点、“湖”对应的节点称为“湖”节点,参见图6,“北”节点的子节点数量为2,“南”节点的子节点数量为2,“海”节点的子节点数量为5,“湖”节点的子节点数量为3,按照“北”、“南”、“海”和“湖”这4个字符对应的4个节点的子节点的数量由大到小的顺序对该4个节点进行排序,可以得到如下排序结果:海、湖、北、南。其中,由于“北”节点和“南”节点的数量相同,因此二者的相对顺序上任意排序即可。
在未对“北”、“南”、“海”和“湖”这4个字符对应的4个节点的子节点分配存储空间之前,该4个节点的子节点存储列表如图7A所示。其中“65536”为存储空间的序列号。空闲位置起始指针(free_start)指在目标位置上,目标位置之前不存在空闲的存储空间。
根据上述排序结果,首先对“海”节点的子节点分配存储空间。在图7A所示的目标位置之后(包括目标位置)的所有空闲的存储空间中,为“海上”、“海下”、“海信”、“海关”、“海军”分配存储空间,分配结果如图7B所示,“海上”、“海下”、“海信”、“海关”、“海军”离散地分配于子节点存储列表中,在此情况下,“海上”的后一个存储空间为空闲的存储空间,空闲位置起始指针(free_start)指在“海上”的后一个存储空间上。
根据上述排序结果,对“湖”节点的子节点分配存储空间。在“海上”的后一个存储空间之后(包括“海上”的后一个存储空间)的所有空闲的存储空间中,为“湖北”、“湖南”、“湖塘”分配存储空间,分配结果如图7C所示,“湖北”、“湖南”、“湖塘”离散地分配于子节点存储列表中,在此情况下,“海上”的后一个存储空间为空闲的存储空间,空闲位置起始指针(free_start)依旧指在“海上”的后一个存储空间上。
类似地,对“北”节点的子节点分配存储空间。在“海上”的后一个存储空间之后(包括“海上”的后一个存储空间)的所有空闲的存储空间中,为“北京”、“北海”分配存储空间,分配结果如图7D所示,“北京”、“北海”离散地分配于子节点存储列表中,在此情况下,“北京”的后一个存储空间为空闲的存储空间,空闲位置起始指针(free_start)依旧指在“北京”的后一个存储空间上。
类似地,对“南”节点的子节点分配存储空间。在“北京”的后一个存储空间之后(包括“北京”的后一个存储空间)的所有空闲的存储空间中,为“南京”、“南海”分配存储空间,分配结果如图7E所示,“南京”、“南海”离散地分配于子节点存储列表中,在此情况下,“南京”的后一个存储空间为空闲的存储空间,空闲位置起始指针(free_start)依旧指在“南京”的后一个存储空间上。
<设备实施例>
图8是根据本申请一些实施例的基于双数组字典树的存储空间分配装置的功能结构框图。如图8所示,基于双数组字典树的存储空间分配装置800可以包括:处理模块801和第一更新模块802。
处理模块801,用于在更新第一列表之后,在第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,第一列表包括第一层级的至少一个层级节点,至少一个层级节点按照层级节点的子节点的数量由大到小的顺序排序,目标位置之前不存在空闲的存储空间.。
第一更新模块802,用于在第一列表中移除目标节点以更新第一列表。
可选地,基于双数组字典树的存储空间分配装置800还包括:添加模块,用于在第一更新模块在第一列表中移除目标节点以更新第一列表之前,将至少一个第一子节点添加至第二层级的第二列表中;其中,第二层级为第一层级的子层级;调整模块,用于在第一更新模块在第一列表中移除目标节点以更新第一列表之后,在第一列表为空且第二层级的第二列表不为空的情况下,将第二层级调整为第一层级;第二更新模块,用于根据调整模块调整后的当前的第一层级中至少一个层级节点的子节点的数量,按照层级节点的子节点的数量对至少一个层级节点进行排序以更新第一列表。
可选地,基于双数组字典树的存储空间分配装置800还包括:获取模块,用于在未获取第一层级的至少一个层级节点的情况下,获取字典树的根节点的至少一个第二子节点;第三更新模块,用于将至少一个第二子节点作为第一层级的至少一个层级节点,按照层级节点的子节点的数量由大到小的顺序排序对至少一个层级节点排序,根据排序结果将至少一个层级节点存储在第一列表中以更新第一列表。
可选地,处理模块801用于:将空闲位置起始指针指向目标位置;根据至少一个第一子节点的离散间距,在目标位置之后的空闲的存储空间中确定至少一个第一子节点一一对应的空闲的子节点存储空间;将第一子节点存储在对应的子节点空闲存储空间中。
本申请实施例的一个有益效果在于,更新第一列表之后,在第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,第一列表包括第一层级的至少一个层级节点,至少一个层级节点按照层级节点的子节点的数量由大到小的顺序排序,目标位置之前不存在空闲的存储空间;目标位置之前不存在空闲的存储空间,目标位置之后的空闲的存储空间中存在离散的存储空间,在此情况下,本申请实施例能够有效避免空闲的存储空间中的离散的存储空间被浪费,有效解决内存空间利用率偏低的问题。提升内存空间利用率。在第一列表中移除目标节点以更新第一列表。以便于在满足第一列表不为空的情况下再次触发执行为第一列表中在顺序上位于第一位的目标节点的至少一个子节点分配存储空间的过程,完成对第一列表中的每个层级节点的子节点分配存储空间的过程。由此可见,本申请实施例能够解决现有技术中在通过字典树建立数据检索组织结构的过程中内存空间利用率偏低的问题,提高系统内存空间利用率。
图9是根据本申请一些实施例的电子设备的硬件结构示意图。
如图9所示,该电子设备900包括处理器901和存储器902,该存储器902用于存储可执行的计算机程序,该处理器901用于根据该计算机程序的控制,执行如以上任意方法实施例的方法。
以上基于双数组字典树的存储空间分配装置800的各模块可以由本实施例中的处理器901执行存储器902存储的计算机程序实现,也可以通过其他电路结构实现,在此不做限定。
本申请可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本申请的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本申请操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本申请的各个方面。
这里参照根据本申请实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本申请的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本申请的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。
以上已经描述了本申请的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。本申请的范围由所附权利要求来限定。
Claims (10)
1.一种基于双数组字典树的存储空间分配方法,其特征在于,包括:
在更新第一列表之后,在所述第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为所述第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,所述第一列表包括第一层级的至少一个层级节点,所述至少一个层级节点按照所述层级节点的子节点的数量由大到小的顺序排序,所述目标位置之前不存在空闲的存储空间;
在所述第一列表中移除所述目标节点以更新所述第一列表。
2.根据权利要求1所述的方法,其特征在于,所述在所述第一列表中移除所述目标节点以更新所述第一列表之前,所述方法还包括:
将所述至少一个第一子节点添加至第二层级的第二列表中;其中,所述第二层级为所述第一层级的子层级;
所述在所述第一列表中移除所述目标节点以更新所述第一列表之后,所述方法还包括:
在所述第一列表为空且所述第二层级的第二列表不为空的情况下,将所述第二层级调整为所述第一层级;
根据当前的第一层级中至少一个层级节点的子节点的数量,按照所述层级节点的子节点的数量对所述至少一个层级节点进行排序以更新所述第一列表。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在未获取所述第一层级的至少一个层级节点的情况下,获取字典树的根节点的至少一个第二子节点;
将所述至少一个第二子节点作为所述第一层级的至少一个层级节点,按照所述层级节点的子节点的数量由大到小的顺序排序对所述至少一个层级节点排序,根据排序结果将所述至少一个层级节点存储在第一列表中以更新所述第一列表。
4.根据权利要求1所述的方法,其特征在于,所述在数据存储空间的目标位置之后的所有空闲的存储空间中,为所述第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间,包括:
将空闲位置起始指针指向所述目标位置;
根据所述至少一个第一子节点的离散间距,在所述目标位置之后的空闲的存储空间中确定所述至少一个第一子节点一一对应的空闲的子节点存储空间;
将所述第一子节点存储在对应的子节点空闲存储空间中。
5.一种基于双数组字典树的存储空间分配装置,其特征在于,包括:
处理模块,用于在更新第一列表之后,在所述第一列表不为空的情况下,在数据存储空间的目标位置之后的所有空闲的存储空间中,为所述第一列表中在顺序上位于第一位的目标节点的至少一个第一子节点分配存储空间;其中,所述第一列表包括第一层级的至少一个层级节点,所述至少一个层级节点按照所述层级节点的子节点的数量由大到小的顺序排序,所述目标位置之前不存在空闲的存储空间;
第一更新模块,用于在所述第一列表中移除所述目标节点以更新所述第一列表。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
添加模块,用于在所述第一更新模块在所述第一列表中移除所述目标节点以更新所述第一列表之前,将所述至少一个第一子节点添加至第二层级的第二列表中;其中,所述第二层级为所述第一层级的子层级;
调整模块,用于在所述第一更新模块在所述第一列表中移除所述目标节点以更新所述第一列表之后,在所述第一列表为空且所述第二层级的第二列表不为空的情况下,将所述第二层级调整为所述第一层级;
第二更新模块,用于根据所述调整模块调整后的当前的第一层级中至少一个层级节点的子节点的数量,按照所述层级节点的子节点的数量对所述至少一个层级节点进行排序以更新所述第一列表。
7.根据权利要求5所述的装置,其特征在于,所述装置还包括:
获取模块,用于在未获取所述第一层级的至少一个层级节点的情况下,获取字典树的根节点的至少一个第二子节点;
第三更新模块,用于将所述至少一个第二子节点作为所述第一层级的至少一个层级节点,按照所述层级节点的子节点的数量由大到小的顺序排序对所述至少一个层级节点排序,根据排序结果将所述至少一个层级节点存储在第一列表中以更新所述第一列表。
8.根据权利要求5所述的装置,其特征在于,所述处理模块用于:
将空闲位置起始指针指向所述目标位置;
根据所述至少一个第一子节点的离散间距,在所述目标位置之后的空闲的存储空间中确定所述至少一个第一子节点一一对应的空闲的子节点存储空间;
将所述第一子节点存储在对应的子节点空闲存储空间中。
9.一种电子设备,其特征在于,包括存储器和处理器,所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序,以实现根据权利要求1-4中任意一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-4中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210119190.3A CN114780533A (zh) | 2022-02-08 | 2022-02-08 | 基于双数组字典树的存储空间分配方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210119190.3A CN114780533A (zh) | 2022-02-08 | 2022-02-08 | 基于双数组字典树的存储空间分配方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114780533A true CN114780533A (zh) | 2022-07-22 |
Family
ID=82423851
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210119190.3A Pending CN114780533A (zh) | 2022-02-08 | 2022-02-08 | 基于双数组字典树的存储空间分配方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114780533A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116610769A (zh) * | 2023-07-19 | 2023-08-18 | 北京惠每云科技有限公司 | 一种基于双数组trie树的医疗数据空间分配方法和装置 |
-
2022
- 2022-02-08 CN CN202210119190.3A patent/CN114780533A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116610769A (zh) * | 2023-07-19 | 2023-08-18 | 北京惠每云科技有限公司 | 一种基于双数组trie树的医疗数据空间分配方法和装置 |
CN116610769B (zh) * | 2023-07-19 | 2023-10-10 | 北京惠每云科技有限公司 | 一种基于双数组trie树的医疗数据空间分配方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109377232B (zh) | 基于dag的区块链的交易定序方法及设备 | |
US9385748B2 (en) | Parallel dictionary-based compression encoder | |
US10802923B2 (en) | Method and apparatus for incremental backup based on file paths and a prefix tree | |
CN104933747A (zh) | 将矢量动画转换为位图动画的方法及装置 | |
CN112667860A (zh) | 一种子图匹配方法、装置、设备及存储介质 | |
CN111143513B (zh) | 一种敏感词识别方法、装置及电子设备 | |
CN108733312B (zh) | 存储管理方法和设备 | |
CN102867049A (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN114780533A (zh) | 基于双数组字典树的存储空间分配方法、装置及电子设备 | |
US10620950B2 (en) | Message parsing in a distributed stream processing system | |
CN109657060B (zh) | 安全生产事故案例推送方法及系统 | |
CN113722416A (zh) | 一种数据清洗方法、装置、设备及可读存储介质 | |
CN113568877B (zh) | 一种文件合并方法、装置、电子设备及存储介质 | |
CN103701590A (zh) | 一种基于字典的复杂密码遍历方法及装置 | |
CN104850591A (zh) | 一种数据的转换存储方法及装置 | |
CN115563116A (zh) | 一种数据库表扫描方法、装置以及设备 | |
CN111475424A (zh) | 用于管理存储系统的方法、设备和计算机程序产品 | |
CN108572921B (zh) | 规则集更新方法、装置、规则匹配方法及装置 | |
US11244156B1 (en) | Locality-sensitive hashing to clean and normalize text logs | |
CN108011735B (zh) | 社区发现方法及装置 | |
CN104572432B (zh) | 一种无锁链表管理装置 | |
CN112486400A (zh) | 管理存储系统的索引的方法、设备和计算机程序产品 | |
CN111930705B (zh) | 二进制消息协议数据处理方法及装置 | |
CN114564253B (zh) | 任务创建方法、系统、电子设备及可读存储介质 | |
CN112069794B (zh) | 文本预测方法、装置、设备以及存储介质 |
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 |