用于基于阵列的数据存储和搜索的系统及方法技术方案

技术编号:11604499 阅读:66 留言:0更新日期:2015-06-17 01:56
本发明专利技术涉及一种用于基于阵列的数据存储和搜索的系统及方法。提供了用于有效地产生和更新排序的阵列以用于快速数据访问的计算机设备和方法。该阵列分配比其所存储的元素所需的空间更多的空间。换句话说,阵列在元素之间留下空的空间,使得对新元素的插入仅需移动阵列中的少量现有元素,或者甚至不移动阵列中的现有元素。

【技术实现步骤摘要】

技术介绍
在计算机系统中阵列是常见的、有用的、和重要的用来存储和处理数据的数据结构。阵列是在同一名称下组合的一组连续的内存位置,其中每个单独的位置经由其索引或下标访问。在计算机科学中,阵列通常用于实现静态查找表以保存具有相同数据类型的多个值。对阵列进行排序可用于以有序的形式组织数据和迅速获得这些数据。排序的阵列中的元素使用以O(log n)表示的二分搜索来查找;因此,排序的阵列适用于需要能够快速查找元素的情况。查找的复杂度与自平衡二叉搜索树的复杂度相同。然而,已知在排序的阵列中插入和删除元素是成本高的。在排序的阵列中插入和删除元素以O(n)执行。这是因为需要对待插入或待删除的元素以后的所有元素进行移动。相比之下,自平衡二叉搜索树以O(log n)进行插入和删除。例如,当建立含有n个元素的新的排序的阵列时,用于将所有n个元素一个接一个插入到阵列中的成本为O(n2)。当n大时,成本非常高且使得常规阵列无法用于存储排序的数据元素。然而,阵列是简单的且具有良好的局部引用性。在现代计算机系统中,阵列能利用高速缓存存储器来发挥其高性能。
技术实现思路
本公开提供了用于创建和使用排序的阵列的计算机系统和方法,该排序的阵列被快速搜索且也快速形成和更新。在本专利技术的计算机系统和方法中实现的新的数据结构被称为“排序的弹性阵列”(SEA)。SEA分配比实际存储的元素更多的阵列单元,但并不包含如在二叉搜索树或多路树中的所有指针,因此其存储效率仍然高效。更重要的是,它将插入操作从O(n)改进为O(log n)。因此,在一个实施方式中,提供了一种用于将输入数据元素插入阵列中的计算机系统,包括处理器、存储器和程序指令,所述程序指令当由处理器执行时,配置所述系统以便:(a)将阵列加载到存储器中,其中所述阵列的大小为B用于存储最多B个数据元素,其中,所述阵列包含T个数据元素,其中所述数据元素在所述阵列中被排序,使得所述阵列中的任何不是空的位置包含的数据元素比所有存储在左侧的位置中的数据元素大,且比所有存储在右侧的位置中的数据元素小;(b)在所述阵列中确定小于所述输入数据元素的所有数据元素中最大的第一数据元素、和大于所述输入数据元素的所有数据元素中最小的第二数据元素,其中,所述第一数据元素和所述第二数据元素彼此相邻或者被所述第一数据元素和所述第二数据元素之间的一个或多个空位置分隔;以及(c)(i)如果所述第一数据元素和所述第二数据元素处于相邻的位置,则将所述第一数据元素和所有左侧相邻的数据元素向左侧移动一个位置,然后将所述输入数据元素放置到所述第一数据元素空出的位置中,或者将所述第二数据元素和所有右侧相邻的数据元素向右侧移动一个位置,然后将所述输入数据元素放置到所述第二数据元素空出的位置中,或者(ii)将所述输入数据元素放置到介于所述第一数据元素和所述第二数据元素之间的位置中。在一些方面,B至少比T大20%。在一些方面,所述第一数据元素和所述第二数据元素被至少三个空位置分隔,且所述输入数据元素被放置到所述空位置中的中间位置中。在一些方面,所述程序指令还使所述系统配置成:当比值f=T/B大于预定的阈值时,通过将用于L-B个附加位置的内存分配给所述阵列来将所述阵列的大小扩大至L。在一些方面,所述预定的阈值在0.5和0.9之间。在一些方面,所述程序指令还使所述系统配置成移动所述阵列中的一个或多个数据元素,使得所述述阵列中的空位置分布得更均匀。在一些方面,所述程序指令还使所述系统配置成针对一个或多个新的输入数据元素重复步骤(b)和步骤(c)。在一些方面,针对不同的输入数据元素,步骤(i)和步骤(ii)都被执行。在一些方面,所述程序指令还使所述系统配置成在第二索引阵列的位置p插入值i,其中p是所述输入数据元素的散列函数输出,i是所述输入数据元素在所述阵列中的位置。在一些方面,所述阵列和所述第二索引阵列的长度相同。在一些方面,所述散列函数针对所述阵列中的每个数据元素产生唯一的非负整数值。在一个实施方式中,还提供了一种从阵列中删除查询数据元素的计算机系统,包括处理器、存储器和程序指令,所述程序指令当由所述处理器执行时,使所述系统配置成:(a)访问包含T个数据元素的阵列,其中所述阵列的大小为B用于存储最多B个数据元素,所述数据元素在所述阵列中被排序,使得所述阵列中的任何不是空的位置包含的数据元素比所有存储在左侧的位置中的数据元素大,而比所有存储在右侧的位置中的数据元素小;(d)确定所述阵列中包含与查询数据元素相同的数据元素的位置;以及(c)将所述位置标记为空。在一些方面,所述程序指令还使所述系统配置成:当比值f=T/B小于预定的阈值时,移动所述阵列中的数据元素,使得所述阵列的一端具有一个或多个空位置,并从所述阵列中删除所述空位置,从而减小所述阵列的大小。在一些方面,所述预定的阈值在0.1和0.7之间。在一些方面,在所述一端的所述空位置的数量为B的至少10%。附图说明作为本公开的实施方式,仅以示例性而非限制性的方式提供了附图,其中:图1是示出包含四个数据元素和五个空阵列单元的存储单元阵列的示意图;图2是示出包含到外部数据元素的四个引用和五个空阵列单元的存储单元阵列的示意图;图3是示出将弹性阵列从长度B调整(增大)到长度L的示意图;图4是示出将来自旧的阵列的元素重映射到新的阵列后阵列元素的大小和位置的示意图;以及图5是示出弹性阵列中的数据元素和对应的索引散列元素的示意图。应当认识到,这些图中的一些或全部是示例性的示意图,因此,这些图并不一定反映示出的元素的实际相对大小或位置。这些图为了清晰地说明一个或多个实施方式的目的而给出,并不用来限制以下给出的权利要求的范围或含义。具体实施方式本公开提供了采用用于快速数据访问和存储的排序的阵列的计算机系统和方法。如上所述,更新传统的排序的阵列是成本高的,这是因为根据新的元素应当所要插入的位置,插入每个新的元素需要对阵列中现有元素的大约一半进行移动。然而,在一个实施方式中,本专利技术的技术提供了分配比其所存储的元素所需要的空间更多的空间(即阵列中的位置或单元)的排序的阵列。也就是说,该阵列在元素之间留下空的空间,使得插入新的元素需要移动少量现有元素或者甚至不移动现有元素。由于这样的阵列能够容纳新的元素而不需要在每次插入时都增加其大小,因此该阵列也被称为“排序的弹性阵列(SEA)”。即使需要增加存储空间,本文档来自技高网...
<a href="http://www.xjishu.com/zhuanli/55/CN104715006.html" title="用于基于阵列的数据存储和搜索的系统及方法原文来自X技术">用于基于阵列的数据存储和搜索的系统及方法</a>

【技术保护点】
一种在阵列中插入输入数据元素的方法,包括:a)计算机处理器将阵列加载到计算机可读存储器中,其中所述阵列的大小为B,用于存储最多B个数据元素,其中,所述阵列包含T个数据元素,其中所述数据元素在所述阵列中被排序,使得所述阵列中的任何不是空的位置包含的数据元素比所有存储在左侧的位置中的数据元素大,且比所有存储在右侧的位置中的数据元素小;b)在所述阵列中确定小于所述输入数据元素的所有数据元素中最大的第一数据元素、和大于所述输入数据元素的所有数据元素中最小的第二数据元素,其中,所述第一数据元素和所述第二数据元素彼此相邻或者被所述第一数据元素和所述第二数据元素之间的一个或多个空位置分隔;以及c)i)如果所述第一数据元素和所述第二数据元素处于相邻的位置,则将所述第一数据元素和所有左侧相邻的数据元素向左侧移动一个位置,然后将所述输入数据元素放置到所述第一数据元素空出的位置中,或者将所述第二数据元素和所有右侧相邻的数据元素向右侧移动一个位置,然后将所述输入数据元素放置到所述第二数据元素空出的位置中,或者ii)将所述输入数据元素放置到所述第一数据元素和所述第二数据元素之间的位置中。

【技术特征摘要】
2013.12.16 US 14/107,8631.一种在阵列中插入输入数据元素的方法,包括:
a)计算机处理器将阵列加载到计算机可读存储器中,其中所述阵列的大小
为B,用于存储最多B个数据元素,其中,所述阵列包含T个数据元素,其中
所述数据元素在所述阵列中被排序,使得所述阵列中的任何不是空的位置包含
的数据元素比所有存储在左侧的位置中的数据元素大,且比所有存储在右侧的
位置中的数据元素小;
b)在所述阵列中确定小于所述输入数据元素的所有数据元素中最大的第一
数据元素、和大于所述输入数据元素的所有数据元素中最小的第二数据元素,
其中,所述第一数据元素和所述第二数据元素彼此相邻或者被所述第一数据元
素和所述第二数据元素之间的一个或多个空位置分隔;以及
c)i)如果所述第一数据元素和所述第二数据元素处于相邻的位置,则将所
述第一数据元素和所有左侧相邻的数据元素向左侧移动一个位置,然后将所述
输入数据元素放置到所述第一数据元素空出的位置中,或者将所述第二数据元
素和所有右侧相邻的数据元素向右侧移动一个位置,然后将所述输入数据元素
放置到所述第二数据元素空出的位置中,或者
ii)将所述输入数据元素放置到所述第一数据元素和所述第二数据元素之
间的位置中。
2.根据权利要求1所述的方法,其中,B至少比T大20%。
3.根据权利要求1所述的方法,其中,所述第一数据元素和所述第二数据
元素被至少三个空位置分隔,且所述输入数据元素被放置到所述空位置中的中
间位置中。
4.根据权利要求1所述的方法,其中,当比值f=T/B大于预定的阈值时,
通过将用于L-B个附加位置的内存分配给所述阵列来将所述阵列的大小扩大
至L。
5.根据权利要求4所述的方法,其中,所述预定的阈值在0.5和0.9之间。
6.根据权利要求4所述的方法,其中,移动所述阵列中的一个或多个数据
元素,使得所述述阵列中的空位置分布得更均匀。
7.根据权利要求1所述的方法,其中,针对一个或多个新的输入数据元素
重复步骤b)和步骤c)。
8.根据权利要求7所述的方法,其中,针对不同的输入数据元素,步骤i)
和步骤ii)都被执行。
9.根据权利要求1所述的方法,其中,在第二索引阵列的位置p插入值i,
其中p是所述输入数据元素的散列函数输出,i是所述输入数据元素在所述阵列
中的位置。
10.根据权利要求9所述的方法,其中,所述阵列和所述第二索引阵列的
长度相同。
11.根据权利要求9所述的...

【专利技术属性】
技术研发人员:乔纳森·战军·岳
申请(专利权)人:速锐科技有限公司
类型:发明
国别省市:美国;US

相关技术
    暂无相关专利
网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1