用于确定数据值在存储设备中的存储地址的方法和访问装置的制作方法

文档序号:6418857阅读:207来源:国知局
专利名称:用于确定数据值在存储设备中的存储地址的方法和访问装置的制作方法
技术领域
本发明的领域本发明涉及确定存储设备中预定数据值存储地址的方法,其中所述数据值按照节点、分支、子树和叶的二进制树型数据结构存储在预定存储地址上。具体地,该存储设备可以利用由两部分组成的地址编址,即列地址部分和行地址部分,其中存储设备中的条目被存储在二维矩阵中。
本发明
背景技术
经常需要在包含了大量条目的存储器中对特定数据值执行快速搜索。例如,假设在存储设备中存储了个人的个人标识号码,并具有与关于个人年龄、职业和汽车登记的某些信息有关的情况。该标识号码可以包括许多数字,即在存储器中存储了大量数据值。不同的例子是CD-ROM,其中存储了电话号码而每个电话号码与表示属于该电话号码的住址的特定信息相关。
为避免必须使用其中存储各个条目特定位置即其中存储存储地址的第二存储设备,在包含多个数据值的存储设备中搜索特定数据值,当该数据值已经找到时读取有关信息。当然,数据值(个人标识号码或电话号码)可以随机地存储在存储设备中,此时不得不按照列和行搜索以定位数据值,因为没有有关想要的数据值可能安置在哪里的信息。
为避免逐条目完全搜索存储设备,根据存储设备的大小这可能花费几乎许多时间,数据值按照预定规则存储在存储设备中,此规则以后可以用于在搜索进程中重新定位数据值。
图5表示二维存储器的示例,其中数据条目按照具有行地址部分A和列地址部分B的地址编址,即地址S=〈A(X),B(X)〉,X可以被认为是二进制树的节点,其中指定行地址和列地址交点。如图5中所见,单个数据值D可以随机存储在存储设备中,常规过程是使用二进制树型数据结构代表所存储的数据值。
如图6所示,在二进制树型数据结构中,每个节点(数据值可以写入和读出的交叉点X)与两个其它节点连接。对二进制树型(或具有映射到其上的条目的存储设备)的搜索过程如下。从节点X读出数据值D1(位于行地址A(X)和列地址B(X)),然后将数据值D1与存储地址将要确定的数据值D进行比较。如果D<D1则采用树型的左分支L,而如果D1<D则采用树型的右分支R。数据结构(或存储设备中的数据值)按照节点X2将具有数据值D2<D1和数据值D3>D1的方式逻辑地排列。可是,由于各个数据值D1,D2,D3固有地随机存储在存储设备中,在A(X1),B(X1)读取D1后,二进制树型搜索是必要的以提供该信息作为位置或D2或D3的存储地址。
因此,常规方法是每个数据值D1,D2,D3具有相关的(存储的)两个指针,即包括表示比读取数据值更大(R)或更小(L)数据值位置的两个另外存储器位置。同时逻辑地使用在二进制树型结构中,其中每个另外子层和所存储数据值分别比如图5所示存储设备自己前面的子层(子树)更大或更小,只有一个使用地址指针的逻辑映射,同时原则上数据值被随机地存储在存储设备中。
使用具有不同地址指针的数据条目需要预定义路径节点RN,该节点是数据值将被读取并与要搜索的数据值进行比较的第一节点。这种搜索算法在Aho Hopcroft、Ullmann的“数据结构和算法”中进行了描述,ISDN0-201-0002307,第155页。明显地,有一个缺点,即存储各种数据值所需要的存储空间要求每个数据值存储两个表示分支L,R的另外指针条目。
同时在图5中,存储设备中只有逻辑二进制树型的隐含表示,另一个方案是使用对存储设备中固定地址的二进制树型数据结构的映射,即对矩阵单元的映射。在此情况下,通过对存储设备中预定位置的二进制树型节点的映射可以预先知道分支地址,因此在此不需要指针和不占用存储空间。由于不需要估计指针,搜索次数可能更高,如同Aho、Hoppcraft、Ullmann的“数据结构和算法”ISDN-0-201-0023-7第271页所公开的那样。使用将各个节点X1、X2、X3直接映射到存储设备中特定位置的方法,在一个子树(!)内代表“子”节点X2、X3的地址可以计算。实际上,由列地址A代表左和右分支,左分支计算如下A(L(X))=2A(X)+0
同时右分支R计算如下A(R(X))=2A(X)+1可是,使用这种映射方法,在初始转换树型后,地址的高位部分在转换的每个进一步步骤中改变。因此,搜索次数对于大型树型仍然是相当大,由于它们尺寸而必须存储在动态随机访问存储装置。对于实际应用,需要快速方法以尽可能避免特别是高位部分的改变。
本发明概述如上所述,常规方法使用了存储集约指针方案或使用了列地址A的计算以确定与子树中左分支或右分支连接的下个节点的地址。这浪费时间并需要在转换为二进制树型的每个进一步步骤中改变地址的高位部分(行地址B)。
因此,本发明的目的是提供一种方法和一种访问装置,用于确定存储设备中预定数据值的存储地址,而不需要使用指针在二进制树搜索期间确定存储器单元,还可以比所上述方法更快地确定存储地址,其中计算存储地址的一部分来替代使用指针。
该目的由按照权利要求1的方法实现。另外,该目的通过按照权利要求13的访问装置实现。
按照本发明必须认识到,不需要执行地址高位部分的频繁改变而提供一种算法,其中按照比较结果和当前地址不仅确定地址的列部分而且确定地址的行部分。在本发明中,列地址部分的映射对应于上述现有技术的映射,而行部分的映射和根据两个部分地址的重要结合允许减少搜索次数,直到在存储器中定位该数据值。
按照本发明,当在搜索中到达子树中的一个叶时,确定另一个子树的新的根节点。如果在该子树中,数据值仍然没有找到,搜索过程进行到前面子树中的下个叶树,并确定另一个子树的新根节点。这些就顺序地使用了前面子树的叶,以确定新的子树。由于搜索总是意味着从树的顶部到底部的横移动(traverse),搜索主要产生到子树中的横移动。只有最少的步骤会产生子树改变。映射的结果,只有列地址在子树内横移动期间改变。因此,产生行地址改变的步骤数量最少,即行地址中的改变保持最少。因此,明显减少搜索次数。
可以根据从属权利要求而采用更先进的实施例和改进。此后,将参照附图描述本发明。
附图简介图中

图1a表示按照本发明使用子树的二进制树型结构;图1b表示图1a子树上映射每个行的存储设备;图2是说明按照本发明搜索方法的流程图;图3a表示如何根据位于第一行的叶节点地址确定新子树新根地址的示例;图3b表示在图3a所示的存储设备第一和第二行中两个二进制树型搜索的示例;图4表示按照本发明访问装置的实施例,用于访问存储在DRAM存储器中的数据值;图5表示存储设备,其中按照现有技术在特定地址位置随机存储了数据值;图6表示按照现有技术用于执行二进制树型搜索的常规逻辑二进制树型结构。
在图中相同或相似的参考数字代表相同或相似的部分。
本发明原理本发明的方法和访问装置是基于将二进制树型的节点映射为存储设备的地址,最好是动态随机访问存储器(DRAM)。DRAM通常提供高密度的存储,可是,相对随机分布的访问而相当慢。使用按照本发明的特定寻址方式,可以实现更低的访问次数。为此,由连续访问的特定顺序的某些限制必须满足。按照本发明的映射保证树型搜索总是产生顺序访问而满足这些限制。可实现的性能增加(次数的减少)为大约10倍。
如上所述DRAM的地址位一般被分成两个部分,称为行地址B和列地址A(见图5)。通常,行和列地址大小相等。因为DRAM的内部实现,如果连续访问可以通过只改变列地址而尽可能保持行地址不变进行,访问时间明显缩短。可是,按照本发明映射的新颖方法和访问装置允许树型搜索满足尽可能保持行地址不变原则的算法。
按照本发明的节点映射图1a表示按照本发明二进制树型分成大量子树。完整的树型包括大量子树1,2,3,4,5。在图1a中每个子树具有一个根节点,被指定为“k=1”。同样地,子树的每个叶节点被指定为“k=K”。K是子树的“深度”,即在每个子树内仅由虚线描绘的其它节点数量。所以实际上,图1a中描绘的每个子树包括K层,对应于每个子树总共2K个节点。
一旦通过行和列地址访问一个根节点,在具有大量层K的子树中分别执行搜索。每个子树具有(最低)叶节点,该叶节点与下个子树的各自根节点连接。可以注意到,在图1a中只有完整地描绘出了作为子树的或根节点或叶节点的节点。例如子树1的叶节点LN直接连接到子树3的根节点X1上。在根节点X1与其叶节点X2、X3之间有许多中间节点。根节点位于k=1而叶节点位于k=K。子树5的叶节点LN同时也构成整个二进制树型的叶节点。因此,区别整个树型的路径和叶与子树的路径和叶是重要的。在每个子树中,变量k对于每个子树横移动重复地从1步进到k,直到要寻找的搜索值被发现或到达整个树型的叶节点。
子树中的层数量取决于实际存储器硬件。按照本发明对存储器位置的映射是按照一行包含2K-1个条目即列的方式执行的。如同下面所要看到的,按照本发明在每个子树中的搜索对应一个单独行内的搜索。沿行(例如沿子树1)的存储器位置对应根节点,子树节点和特定子树叶节点LN。每个读取数据值D1、D2、D3与数据值D比较以进行定位,进行关于需要采用子树中的左分支还是右分支的判决。
数据的组成如下在子树中节点的层k(k=1、2、……,K)变得越深则数据值越高。这等效于按照沿列方向递增顺序排列数据。即尽管还不知道特定数据值D的位置,肯定知道D1<D2<D3等。这意味着条目存储在完全均衡的二进制树型上,该树型按照树型中从左到右的递增顺序存储(而且也在由图1a、1b中数据值D1、D2、D3表示的子树中如此)。
当然,在二进制树型中按照从左到右的递增顺序(按存储器中列方向中的递增顺序)对各个数据值进行存储对于在每个子树中使用的搜索算法有影响。如上所述,主要目的是尽可能使行改变最小,即由于列方向搜索非常快而尽可能不经常改变地址S=〈A,B〉的高位部分。在列方向按照递增顺序存储数据值导致结果为列方向的最后条目必须构成每个子树的叶节点LN。指定多少叶节点LN(在图1b中的叶节点存储器单元LN)取决于子树内的层数,即取决于列方向上存储器的大小。例如具有K=3层的子树包括列方向上四个最右侧位置上的四个叶节点LN(见图3a,3b)。
第一实施例(搜索策略)如上所述,本发明提供将二进制树型变成为二维存储空间的映射,以便每个行对应一个子树而在每个行或子树中使用特定的搜索策略。如果发现读取数据值与要搜索数据值之间匹配或如果发现叶节点LF,在每个子树中的搜索停止。因此,与在每个子树中执行搜索的同时,搜索算法必须保持对层的跟踪,因为当到达叶节点时只执行行地址的改变。在本发明中可以发现,不仅可以在每个子树中计算搜索地址,而且也可以只根据比较结果和叶节点的当前地址计算下个子树特定新根节点的地址。即按照本发明,可以根据现在读取存储器位置的当前地址和比较结果计算出指定要读取下个数据节点存储地址的新的完整地址S=〈A,B〉。这应用于子树内下个节点的地址并且也可以用于查找要搜索的下个子树的下个根节点的存储地址。
图2表示按照本发明的搜索方法实施例的流程图。应当注意,为该算法完整的二进制树型按照图1b分成了子树,而在低于根子树层上的最左侧的子树被切断。
如同所解释的那样,在子树中的层数等于实际DRAM硬件列地址中的位数。因此,在步骤S1开始搜索方法后,第一子树的层被设置为k=1,即在子树1根节点RN处开始搜索(见图1a)。然后,在步骤S3,输入要搜索的数据值I、每个子树的层数K以及根节点RN位置或根地址A(0),B(0)。因此,第一子树1的根节点RN是搜索算法的入口点。
在步骤S4中,从子树1的根节点RN读取当前地址〈A(0),B(0)〉上的数据值D。在步骤S5中,读取的数据值D与要定位的数据值I进行比较。如果在步骤S5中建立匹配D=I,则在步骤S7中读取与发现的数据值D有关的信息,而后搜索进行到步骤S11结束。
如果在步骤S5中读取的数据值D大于要搜索的数据值I,步骤S6确定是否到达叶节点LN。这可以通过比较运行数字k与给出的层数K确定。如果在步骤S6中,建立了k<K则执行步骤S9,S14。在步骤S9中使用下列公式计算沿左分支排列的子树1内的节点新地址(I<D)
B(L(X))=B(X)A(L(X))=2*A(X)+0(1)在此,B(L(X))和A(L(X))代表子树1内下个子节点的新的行地址和列地址。此后,深度层k的运行数据值在步骤S14增加。
同样地,如果在步骤S5中确定了I<D则采用根节点RN的右分支,而如果在步骤S8中确定还未到达子树的全部深度,即k<K,步骤S12、S16模拟步骤S9、S14执行,其中公式(2)定义了子树1内下个条目或子节点的存储地址如下B(R(X))=B(X)A(R(X))=2*A(X)+1(2)如同可以从步骤S5、S6、S8、S9、S12中可以看出,在子树中只有列地址部分A被修改,即或者因为左分支翻倍或者因为右分支翻倍和移动到更右侧的列。注意到行地址部分B独立于步骤S5的确定而保持相同是重要的。当然,公式(1)、(2)中给出的限定是沿列方向数据值顺序递增的直接结果。如果读取的数据值越大列地址跳跃两倍,而如果读取的数据值小于要搜索的数据值I则其为当前列地址的两倍加一。
当然,由于只对k<K执行步骤S9、S12(K=一个子树内最大深度或层数;K为预定的),在步骤S9、S12所确定的新地址A、B上的新数据值D在步骤S4被读取。参考数字R分别代表整个各个步骤S4、S5、S6、S9、S14和S4、S5、S8、S12、S16的循环运行。在循环过程中,如果在一个子树中发现数据值(I=D),算法进行到步骤S11结束。
可是,在k次迭代后,步骤S6和步骤S8确定到达了所指定子树的全部深度,即k=K,这意味着叶节点存储器单元LN一定已经到达。使用数据值的递增顺序,即在列方向上每个行的数据值增加,其中在下个行中列位置1的数据值总是大于在下个更小行中最高列位置2K上的数据值,很清楚图1b中存储设备的地址空间上的叶节点LN必须对应列地址A右端上的最后存储器单元。
如果到达子树1中的叶节点LN,则在步骤S10、S13中应用下列公式(3)、(4)分别计算下个子树根节点的新行地址和列地址B(L(X))=2K*B(X)+2*A(X)+0-2K(3)A(L(X))=1
B(R(X))=2K*B(X)+2*A(X)+1-2K(4)A(R(X))=1从公式(3)(4)中看出,在出现叶节点的情况下,列地址A独立于步骤S5的决定被设置为第一列,即A(L(X))=A(R(X))=1。可是,新行地址B的选择取决于步骤S5的决定。
有趣地注意到,根据图1B来自叶节点LN的箭头表示按照公式(3)、(4)的计算,而下个子树下个根节点确实位于列A=1中,可是,它不位于下个相邻子树2上如同人们所希望的那样。相反,公式(3)(4)执行了一种列行映射,其中要搜索的下个子树的下个根节点的新地址对应于公式(4)转置的叶节点地址和公式(3)的转置地址-1。
已经在步骤S13中确定了要搜索的下个子树的下个根节点,在步骤S17中k被设置为k=1,因为下个子树中的搜索明显地在层1开始,即在根节点地址上。然后在步骤S4读取数据值D,步骤S5、S6、S9、S14或步骤S5、S8、S12、S16循环执行直到在D和I之间发现匹配或发现新子树的叶节点。
当然,偶尔在图1b中子树4或子树5内没有发现数据值,因此到达了叶节点LN。例如,如果在子树5中到达叶节点LN,假如行和列数量相同则公式(3)和公式(4)都不能产生仍然包含在地址空间内的地址。如果行数量大于列数量,则当然可以实现新子树的进一步计算。可是,仍然有问题,即如果当在子树4中到达叶节点时如果不能确定进一步子树的根节点会怎样。首先,这表示在对整个子树4的二进制搜索中没有发现数据值,其次,要搜索的数据值I必须明显大于或小于存储在低于LN存储地址的行和列地址中的所有数据值D。在此情况下,该算法返回到子树1中的叶节点LN的存储地址,根据它来计算子树4的根节点地址(在图1b中用虚线表示)。然后在子树1中右侧下个叶节点LN被作为计算新子树根节点的依据而使用。即,列地址A向上步进一个列A+1,同时B保持不变。当然,这导致例如对子树5计算新根节点。
应当注意到,实际上并不需要在返回叶节点LN(通过对用虚线表示的叶节点地址重新计算)后再到左侧的叶节点(如果有的话),因为在子树1中返回叶节点地址自动地意味着所有读取的数据值D小于要搜索的数据值I。因此,在列方向(子树的水平方向)所有现在为递增顺序的叶节点用于确定新子树的根节点。如果到达例如子树5的最后叶节点LN,则数据值I没有包含在所指定地址空间中的存储设备中。
应当注意,在步骤S5中最好容许一定的公差,以便在一定公差值内建立D与I的匹配,即如果|D-I|<△D就算找到匹配,其中△D代表预先指定的一定公差。
K=3的例子图3a、b表示用于指定例子的图1a、1b的一般算法,在该例子中二进制符号用于列地址A和行地址B。K3意味着在存储地址空间中原则上提供8列和8行。如果在二进制树型顶部的最先根节点RN具有地址A(0),B(0)=(000,000),由于公式(1)(2)没有给出在列地址上的改变,第一列地址A=000不被使用。因此,当第一次执行图2的步骤S4时,要查找的第一节点总是图3a中存储器顶部左侧存储器单元,即第一子树顶部和第一根节点的B(0)=0|A(0)=1。
利用行和列地址数字的二进制表示法,图3b表示位于头两行具有地址000,001的子树1和子树2。对于左侧分支L乘以二仅意味着列地址部分A向左偏移。右分支R导致列地址部分A向左侧偏移并且加“1”。因此,k=2的中间节点和k=3的叶节点上的各个地址对应特定的行和列,其中定位了具体的数据值D。图3b表示在各个中间节点和叶节点上的数据值D=3,5,6,7……。明显地,无论何时到达四个节点0,100或0,101,或0,110或0,111之一,图2的算法计算出了下个子树的新的根节点地址。对于计算新的根节点只有一个分支是不允许的,就是在读取数据值D=7大于要搜索的数据值I的情况下对于地址0,100的节点。在此情况下,将采用根据地址0,100的左侧分支,即将利用公式(3)。可是,在此情况下,对于左侧分支公式(3)将产生B(L(X))=2K(000)+2(100)-2K=0000+1000-1000=0000。因此,在000,100和000,001之间的图1a中用“cut”或虚线表示的第一左侧分支一定不能使用,因为搜索将再次从根节点地址开始。
可是,当采用右侧分支B(R(X))=01时,这意味着具有地址0,100的最左侧叶节点LN导致下个叶节点根地址001,001。如同图3b所示,这实际上对应于位于第二行的子树2的根节点。如同在图3a可以看出,子树1的每个叶节点可以被“映射”或“变换”为特定行地址上位于位置A=1处的新子树的新的根节点。如果行数量至少与列大小相同,可以保证子树1的每个叶节点“映射”或“变换”为第一列中的新的根节点地址。
如同也在图3a、3b中所见,如果在列方向数据值为顺序递增,公式(1)到(4)表示的搜索算法保证利用行地址改变的最少量,同时仍然进行整个存储器矩阵的搜索以发现与要搜索数据值I的匹配(在一个公差内)。
利用最好列地址部分A和行地址部分B的二进制表示法,搜索可以被简化,因为乘以2意味着在移位寄存器中地址向左移位。
实际上,如同可以从图3a所见也根据一般公式(3)(4),新的行地址B(根据A的左侧分支)恰好意味着叶节点列地址部分A的反转,即B(L(X))=010=101。同样地,对于根据叶节点的右侧分支,新的根节点的新的列地址部分是叶节点列地址+1的反转,即B(R(X))=101+1=011。当然这固有地假设在二进制树型顶部的第一根节点RN指定为B(0)=0,A(0)=1。
此后,将参照图4解释使用这种图1到3中所述搜索方法的本发明的访问装置硬件实现的实施例。
第二实施例(硬件实现)在图4中DRAM代表存储设备和访问装置,包括一个比较装置MC用于比较读取数据值D与要搜索的数据值I以确定所述读取数字D是否大于或小于所述要搜索的数据值I。如果通过比较装置发现D与E匹配,输出一个匹配信号M。比较结果C表示值D是否大于或小于值I。一个读取装置R(未详细表示)在从两个寄存器RA、RB输入的预定当前搜索地址A,B上读取一个数据值,这两个寄存器在树型变换期间保持中间行和列地址。
访问装置进一步包括包含寄存器RB、RA的确定装置SEQ,SMB,SMA,用于根据比较结果C和所述当前搜索地址A、B确定对于数据值的下个搜索的完整搜索地址。
确定装置包括所述第一和第二寄存器和第一和第二计算电路SMB、SMA,用于根据比较结果C、当前地址B、A和由一个状态机输出的控制信号S来计算出要搜索的下个列和行地址A`、B`。
状态机SEQ在搜索整个二进制树型数据结构期间确定搜索状态(实际上它监视K而因此固有地执行图2中的步骤S6、S8),而且根据比较结果确定控制信号S。状态机SEQ必须包括一个计数器和一个状态确定装置STDM以根据内部STATEt产生控制信号S。状态机的内部状态必须对应于当前层数k,无论何时比较装置MC输出新的比较结果C(表示是否D<I)该层数都更新。即对于子树根节点状态为0,对于非叶节点(除了根节点)为1到K-1,而对于叶节点为K。类似地,对于根节点控制信号S为0,对于非叶节点(子节点)为1,而对于叶节点为2。从状态0的根节点开始,当向下变换树型时状态机SEQ按照子树分割进行。信号S将选择与映射一致的SMB和SMA中的地址计算类型。
具体地,访问装置中的各项执行下列功能。第一计算电路SMB执行下列功能(由功能符号给出),其中K是子树中的层数B`=0,如果S=0;B`=B,如果S=1;B`=2K*B+2*A+C-2K,如果S=2;(6)其中C(对于D>I为0而对于D<I为1)代表比较结果,B和B`代表当前和下个列地址,S代表控制信号,K代表所述子树内预定层数和A代表当前行地址。
第二计算电路SMA执行下列功能(由功能符号给出)A`=1,如果S=0;A`=2*A+C,如果S=1;A`=1,如果S=2;(7)其中C代表比较结果而A和A`代表当前和下个行地址而S代表控制信号。
状态机SEQ根据下列公式(8)(9)计算控制信号SS=0,如果STATEt=0;S=1,如果STATEt=k;S=2,如果0<STATEt<k;(8)其中所述状态机(SEQ)的状态确定装置(STDM)按照下列公式(9)计算状态机(SEQ)的内部状态STATEt(即图2中的值K)STATEt=0,如果t=0;STATEt+1=2,如果STATEt=0;STATEt+1=1,如果STATEt=k;
STATEt+1=STATEt+1,如果0<STATEt<K;(9)其中STATEt和STATEt+1代表在时间t和t+1时的状态,而t代表根据比较结果计数的比较数量,其中0<t<K和其中STATEt=0代表当在对应二进制树型数据结构的根节点RN的存储器单元上执行第一比较时的状态。
如同在图1b、3a中利用虚线已经表示的,图4中的访问装置也分别存储叶节点地址,根据该地址计算根节点子树地址。如果下个子树搜索不产生匹配,即下个子树叶节点没有到达(而且新的子树叶节点的重新计算将产生超过存储器DRAM行地址空间的行地址B),则采用前面子树下个更高或更低叶节点地址作为计算新的子树根节点的依据。因此,图4所示的访问装置也可以执行全部存储器的完整搜索。
在图4中,叶节点监视器LN-MON存储叶节点的最新地址,根据该地址计算下个子树。即如果S=2(表示已经进行了子树的全部搜索)按照公式(3)(4)根据当前列地址A和行地址B计算新的根节点。如果整个子树的下个迭代后发现叶节点LN并根据给叶节点地址重新计算的新的根节点产生行地址,该行地址不包含在存储器的存储地址空间内,则叶节点监视器LN-MON输入由前面子树和对列地址部分A减/加1得到的最新叶节点地址。如果根据“左”(-1)叶节点地址计算出的根节点地址没有产生要查找的数据项目,则在下个步骤中采用旧叶节点右侧的叶节点(+1)作为计算下个根节点地址的依据。如果各自具有根据前面子树叶节点地址的根节点地址的所有子树没有产生定位在存储器中的数据值,则可以肯定推论数据值I没有出现在存储器中。
如上所述,在这种条件下,仅仅采用当前考虑的叶节点向左和向右的下个叶节点作为计算下个根节点地址的依据似乎足够了。例如在图3a中,当搜索整个有关子树时,如果根据前面子树叶节点地址000,110的两个根节点100,001和101,001都没有产生匹配,只采用左侧更低叶节点000,101和下个更高叶节点000,111作为计算下个子树新的根节点地址的依据似乎足够了。没有理由返回到叶节点地址000,100,因为当到达子树1中叶节点000,101时要定位的甚至I大于位于叶节点地址000,100处的数据值D=7已经成立了。因此,连续使用3个叶节点将产生数据值I的要搜索的完整存储器阵列。
实用性如上所述,按照本发明的方法和访问装置在引起子树改变前只使用最少量步骤。因为服从映射,在子树内部横移动中只改变列地址。当不得不使用动态随机访问存储器时,由于数据量,本发明可以提供对按照二进制树型数据结构存储的数据值的快速搜索引擎。将时间减少一个数量级。因此,本发明可以用于所有对大型存储器中定位数据值限制时间的技术领域。唯一限制是数据值在列方向上按照递增顺序存储。
应当注意,在所述说明书中行可以与列交换,因为这取决于存储方向分别由行和列代表的存储器的结构。
如上所述,按照本发明可以实现整个存储器的快速搜索而不用指针,其中包括行部分和列部分的完整存储地址可以分别根据前面的比较结果和根据前面存储地址确定。
权利要求
1.一种方法,用于确定存储设备(DRAM)中预定数据值(D)的存储地址(A(X),B(X)),所述数据值(D)按照节点、分支、子树和叶的二进制树型数据结构存储在预定存储地址(A(X),B(X)),包括下列步骤a)从所述存储设备读取预定当前搜索地址(A(X),B(X))上的数据值(D);b)将所述读取数据值(D)与要搜索的所述数据值(I)进行比较以确定所述数据值(D)是否大于或小于要搜索的所述数据值(I);和c)根据比较结果(C)和所述当前地址(A(X),B(X))确定该数据值要搜索的完整的下个搜索地址(A`,B`);其中d)循环执行步骤a)到c)直到所述读取数据值(D)与要搜索的所述数据值(I)在预定公差内(△D)匹配。
2.按照权利要求1的方法,其特征在于该数据值存储在具有预定层数(K)的二进制树型数据结构中,其中在所述步骤b)中执行完与所述预定层数(K)相同数量的比较后,根据所述比较结果(C)、所述当前搜索地址和所述预定层数(K)在所述步骤c)确定所述下个地址。
3.按照权利要求1的方法,其特征在于所述数据值(D)在最低数据值和最高数据值的范围内,其中对应所述范围中心值的中心数据值被存储在预定根地址(A(0),B(0);“root”),其中,当第一次执行步骤a)时,所述根地址被用作所述当前地址。
4.按照权利要求1的方法,其特征在于所述数据值存储在行和列矩阵结构的所述存储设备内,其中每个数据值(D)被指定了一个行地址(A)和一个列地址(B)。
5.按照权利要求1和4的方法,其特征在于当步骤b)中所述比较结果(C)表示读取数据值小于所述要搜索的数据值(“分支左侧”)时,在步骤c)通过下列公式(1)计算所述下个地址B(L(X))=B(X)A(L(X))=2*A(X)+0(1)这里X代表由当前地址(A(X),B(X))限定的当前存储器单元,A(X)和B(X)代表当前存储器单元X的列地址和行地址,L(X)代表存储小于存储在当前存储器单元X上的数据值的一个数据值的下个存储器单元,而A(L(X))和B(L(X))代表下个存储器单元L(X)的列地址和行地址。
6.按照权利要求1和4的方法,其特征在于当步骤b)中所述比较结果表示读取数据值大于所述要搜索数据值(“分支右侧”)时,在步骤c)通过下列公式(2)计算所述下个地址B(R(X))=B(X)A(R(X))=2*A(X)+1(2)这里X代表由当前地址(A(X),B(X))限定的当前存储器单元,A(X)和B(X)代表当前存储器单元X的列地址和行地址,R(X)代表存储大于存储在当前存储器单元X上的数据值的一个数据值的下个存储器单元,而A(R(X))和B(R(X))代表下个存储器单元R(X)的列地址和行地址。
7.按照权利要求1、2和4的方法,其特征在于当步骤b)中所述比较结果表示读取数据值小于所述要搜索数据值(“分支左侧”)时,在步骤c)通过下列公式(3)计算所述下个地址B(L(X))=2K*B(X)+2*A(X)+0-2K(3)A(L(X))=1这里X代表由当前地址(A(X),B(X))限定的当前存储器单元,A(X)和B(X)代表当前存储器单元X的列地址和行地址,L(X)代表存储小于存储在当前存储器单元X上的数据值的一个数据值的下个存储器单元,而A(L(X))和B(L(X))代表下个存储器单元L(X)的列地址和行地址,和2K是存储设备中的列数。
8.按照权利要求1、2和4的方法,其特征在于当步骤b)中所述比较结果表示读取数据值大于所述要搜索数据值(“分支左侧”)时,在步骤c)通过下列公式(3)计算所述下个地址B(R(X))=2K*B(X)+2*A(X)+1-2K(4)A(R(X))=1这里X代表由当前地址(A(X),B(X))限定的当前存储器单元,A(X)和B(X)代表当前存储器单元X的列地址和行地址,R(X)代表存储小于存储在当前存储器单元X上的数据值的一个数据值的下个存储器单元,而A(R(X))和B(R(X))代表下个存储器单元R(X)的列地址和行地址,和2K是存储设备中的列数。
9.按照权利要求5或7之一的方法,其特征在于存储在所述下个地址的所述数据值是存储在当前地址数据值的一半。
10.按照权利要求6或8之一的方法,其特征在于存储在所述下个地址的所述数据值是存储在当前地址数据值的1.5倍。
11.按照权利要求1的方法,其特征在于在所述步骤d)之后,所存储的与所述匹配数据值有关的数据值被从具有所述当前地址的存储器单元读取。
12.按照权利要求1的方法,其特征在于所述存储设备是DRAM或高速缓冲存储器之一。
13.一种用于存储设备的访问装置,用于确定存储设备(DRAM)中预定数据值(D)的存储地址(A(X),B(X)),所述数据值(D)按照节点、分支、子树和叶的二进制树型数据结构存储在预定存储地址(A(X),B(X)),包括a)一个读取装置(R),用于读取所述存储设备预定当前搜索地址(A(X),B(X))上的数据值(D);b)一个比较装置(MC),用于将所述读取数据值(D)与要搜索的所述数据值(I)进行比较以确定所述数据值(D)是否大于或小于要搜索的所述数据值(I);和c)确定装置(SEQ,SMB,SMA,RB,RA),用于根据比较结果(C)和所述当前地址(A(X),B(X))确定该数据值要搜索的完整的下个搜索地址(A,B);其中(d)所述读取装置,所述比较装置和所述确定装置循环执行所述读取,所述比较和所述确定直到所述读取数据值(D)与要搜索的所述数据值(I)在预定公差内匹配。
14.按照权利要求13的一种访问装置,其特征在于所述数据值存储在行和列的矩阵结构的所述存储设备(DRAM)中,其中每个数据值(D)被指定了一个行地址(A)和一个列地址(B)。
15.按照权利要求14的访问装置,其特征在于所述确定装置包括-第一和第二寄存器(RB;RA),用于保持下一列和行地址(B`,A`);-一个第一和第二计算电路(SMB,SMA),用于根据比较结果(C),当前地址(B,A)和一个控制信号(S)计算下个列和行地址(A`,B`);和-一个状态机(SEQ),用于在对二进制树型数据结构全部搜索期间确定一个搜索状态(STATEt),并用于根据比较结果(C)确定所述控制信号(S)。
16.按照权利要求14的访问装置,其特征在于所述存储设备中的数据值按照具有预定层数(K)的二进制树型数据结构存储,其中所述状态机(SEQ)包括一个计数器(CNT),该计数器计数由所述比较装置(MC)执行的比较(C)的数量。
17.按照权利要求15的访问装置,其特征在于所述比较结果(C)由所述比较装置(MC)按照下列公式(5)计算C=0,如果I<D;C=0,如果I≥D;(5)其中C代表比较结果,I代表要搜索数据值,而D代表读取数据值。
18.按照权利要求17的访问装置,其特征在于所述第一计算电路(SMB)按照下列公式(6)计算下个列地址(B`)B`=0,如果S=0;B`=B,如果S=1;B`=2K*B+2*A+C-2K,如果S=2;(6)其中C代表比较结果,B和B`代表当前和下个列地址,S代表控制信号,K代表二进制树型数据结构中所述预定层数(K),和A代表当前行地址。
19.按照权利要求17的访问装置,其特征在于所述第二计算电路(SMA)按照下列公式(7)计算下个行地址(A`)A`=1,如果S=0;A`=2*A+C,如果S=1;A`=1,如果S=2;(7)其中C代表比较结果,而A和A`代表当前和下个行地址和S代表控制信号。
20.按照权利要求15的访问装置,其特征在于所述状态机(SEQ)按照下列公式(8)计算所述控制信号(S)S=0,如果STATEt=0;S=1,如果0<STATEt<K;S=2,如果STATEt=K;其中所述状态机(SEQ)的状态确定装置(STDM)按照下列公式(9)计算所述状态机(SEQ)的内部状态STATEtSTATEt=0,如果t=0;STATEt+1=2,如果STATEt=0;STATEt+1=1,如果STATEt=K;STATEt+1=STATEt+1,如果0<STATEt<K;(9)其中STATEt和STATEt+1代表在时间t和t+1时的状态,而t代表根据由计数器(CNT)对比较结果计数的比较数量,其中0<t<K和其中STATEt=0代表当在对应二进制树型数据结构的根节点的存储器单元上执行第一比较时的状态。
21.按照权利要求13的访问装置,其特征在于所述读取装置(R)读取存储在与所述匹配数据值有关的所述存储装置(DRAM)中的信息。
22.按照权利要求13的访问装置,其特征在于所述存储设备是DRAM或高速缓冲存储器之一。
全文摘要
本发明涉及确定存储设备中预定数据值的存储地址的方法和访问装置。按照二进制树型数据结构数据值在列方向按接递增顺序存储。当将被搜索的数据值不位于前一子树中时,根据前一叶节点地址计算新的子树根节点。由于总是根据前面叶节点地址和搜索和读取值之间的比较结果计算新的子树根节点,可以使行地址数的改变最小,同时保持子树搜索的高速度。由于不使用指针而速度快该搜索方法和访问装置对存储器是高效的,因为下个将调查的存储器单元总是可以根据前面地址和最后比较结果计算出。
文档编号G06F17/30GK1292903SQ99803918
公开日2001年4月25日 申请日期1999年3月11日 优先权日1998年3月12日
发明者B·E·I·加德, S·E·约翰松, L·-O·克林 申请人:艾利森电话股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1