CN112506440A - 基于二分法的数据查找方法和设备 - Google Patents
基于二分法的数据查找方法和设备 Download PDFInfo
- Publication number
- CN112506440A CN112506440A CN202011496155.0A CN202011496155A CN112506440A CN 112506440 A CN112506440 A CN 112506440A CN 202011496155 A CN202011496155 A CN 202011496155A CN 112506440 A CN112506440 A CN 112506440A
- Authority
- CN
- China
- Prior art keywords
- array
- array element
- storage unit
- level
- given value
- 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
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000003672 processing method Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 238000003491 array Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
- G06F3/0622—Securing storage systems in relation to access
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
Abstract
本公开提供一种基于二分法的数据查找方法和设备,所述方法应用于在多级存储单元中进行查找,多级存储单元中包括相邻的一级存储单元和二级存储单元,包括:接收待查找的第一给定值;通过第一读接口读取所述一级存储单元中第一数组的第一数组元素,比较第一给定值与第一数组元素;若第一给定值与第一数组元素不相等,通过第二读接口读取二级存储单元中第二数组的第二数组元素,比较第一给定值与第二数组元素,第二数组元素基于第一给定值与第一数组元素的比较结果确定。本公开使用分级存储和流水并行处理的方法,提高了二分法查找的速度。
Description
技术领域
本公开涉及查找算法技术领域,尤其涉及一种基于二分法的数据查找方法和设备。
背景技术
在用二分法进行查找时,所查找的数组必须是有序的,即各数组元素是按其值的大小顺序存储的。查找时从有序数组的中间位置开始,比较给定值与数组元素,若相等,则查找成功;若给定值比该数组元素的值小(或大),则给定值必在数组的前半部分(或后半部分),然后在新的查找范围内进行同样的查找。如此反复多次查找,直到查找到与给定值相等的数组元素或确定有序数组中没有待查找的给定值为止。
现有的技术方案在通过二分法查找时,将排序后的数组直接放入一块存储器中,比如FPGA(Field Programmable Gate Array,现场可编程门阵列)芯片内部的一块RAM(Random Access Memory,随机存取存储器)中,在收到一次查找请求后进行查找操作时,占用RAM的读接口来读取数组元素,并与给定值比较,后续的查找请求必须等待上一次查找操作完成释放读接口。例如,当一个二分法查找操作的最大比较次数为8次时,最多会8次读取比较持续占用读接口,下一个查找请求要等待最多8次读取比较完成,读接口释放后,才开始进行下一个的查找操作,造成后续的查找请求堆积。对于高性能查找场景,将无法满足性能要求,必须通过复制查找模块来提高性能,但是复制查找模块会造成存储资源紧张,并非所有场景都适用。
发明内容
有鉴于此,本公开提供一种基于二分法的数据查找方法和设备,以解决二分法查找性能低的问题,并且不用占用更多的存储资源。
具体地,本公开是通过如下技术方案实现的:
第一方面,提供一种基于二分法的数据查找方法,所述方法应用于在多级存储单元中进行查找,所述多级存储单元的每级存储单元用于存储通过二分法在有序数组中进行查找时,每次要比较的数组元素,所述每级存储单元至少对应一个读接口,其中,所述多级存储单元中包括相邻的一级存储单元和二级存储单元,所述方法包括:
接收待查找的第一给定值;
通过第一读接口读取所述一级存储单元中第一数组的第一数组元素,比较所述第一给定值与所述第一数组元素,所述第一读接口为所述一级存储单元对应的读接口;
若所述第一给定值与所述第一数组元素不相等,通过第二读接口读取所述二级存储单元中第二数组的第二数组元素,比较所述第一给定值与所述第二数组元素,所述第二数组元素基于所述第一给定值与所述第一数组元素的比较结果确定,所述第二读接口为所述二级存储单元对应的读接口。
第二方面,提供一种基于二分法的数据查找设备,所述设备包括:
多级存储单元,所述多级存储单元的每级存储单元用于存储通过二分法在有序数组中进行查找时,每次要比较的数组元素,所述每级存储单元至少对应一个读接口,其中,所述多级存储单元中包括相邻的一级存储单元和二级存储单元;
接收模块,用于接收待查找的第一给定值;
一级查找模块,用于通过第一读接口读取所述一级存储单元中第一数组的第一数组元素,比较所述第一给定值与所述第一数组元素,所述第一读接口为所述一级存储单元对应的读接口;
二级查找模块,用于所述第一给定值与所述第一数组元素不相等时,通过第二读接口读取所述二级存储单元中第二数组的第二数组元素,比较所述第一给定值与所述第二数组元素,所述第二数组元素基于所述第一给定值与所述第一数组元素的比较结果确定,所述第二读接口为所述二级存储单元对应的读接口。
本公开提供的技术方案使用分级存储的存储结构,将每次查找要比较的数组元素存储在不同的存储单元,通过每级存储单元对应的读接口读取数组元素,以使多个请求的查找操作能够同时读取不同的存储单元,实现流水并行处理,在不浪费紧张的存储资源的前提下,提升二分法查找的性能,使其适用于高性能查找的应用场景。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
为了更清楚地说明本公开一个或多个实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开一个或多个实施例中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是现有的二分法查找方案的存储结构及查找次序示意图;
图2是本公开实施例示出的一种基于二分法的数据查找方法的流程图;
图3是本公开实施例示出的四级存储单元的存储结构及查找次序示意图;
图4是本公开实施例示出的一种基于二分法的数据查找设备的框图;
图5是本公开实施例示出的另一种基于二分法的数据查找设备的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的设备和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
二分法查找是一种非常高效的搜索方法,主要原理是每次搜索可以抛弃一半的值来缩小范围,其时间复杂度是O(log2n),最大比较次数为现有的方案在通过二分法在有序数组中进行查找时,将排序后的数组直接放入一块存储器中。如图1,以包含15个数组元素的数组为例,此时最大比较次数为4次,排序好的15个数组元素直接存入RAM中,这样的存储方式通常使这个数组只对应RAM的一个读接口。在使用二分法查找一个给定值14时,需要4次读取并比较数组元素,4次读取比较过程中持续占用数组对应的读接口,一次读取比较时间称作一拍,那么,需要4拍才能处理完这次查找,这样的速度不满足高性能场景的应用。现有的解决方法是通过复制查找模块,牺牲存储资源换取查找速度,这种方法容易造成存储资源紧张。
针对上述技术问题,发明人经过深入研究发现:在有序数组中进行二分法查找时,每次比较的数组元素都在新的查找范围的中间位置,因此,每次要比较的数组元素范围是确定的。如图1所示,对于15个数组元素一次查找最多需要4次比较,第一次比较中间数组元素为7,第二次可能比较的数组元素为3、11,第三次可能比较的数组元素为1、5、9、13,第四次可能比较的数组元素为0、2、4、6、8、10、12、14,不论要查找的给定值是多少,查找时每次可能比较的数组元素都在上述各个范围中。
有鉴于此,本公开提供一种基于二分法的数据查找方法,利用二分法查找的特性,在不浪费紧张的存储资源的前提下,提升二分法查找的性能,使其适用于高性能查找的应用场景。
请参见图2,图2为本公开示出的一种基于二分法的数据查找方法的流程图,该方法可用于具有二分法查找功能的设备(以下简称查找设备)进行查找,如FPGA芯片,包括以下步骤:
步骤S101,接收待查找的第一给定值。
查找设备接收查找请求中的第一给定值,第一给定值可能在多级存储单元中存储的数组元素之中,也可能不在。多级存储单元在查找设备的存储器中,对存储器的种类不做限制。
在本公开实施例中,多级存储单元可以为M级,用于存储N个数组元素,M,N均为正整数,M为通过二分法在包含N个数组元素的有序数组中查找的最大比较次数。比如,对于包含1023个数组元素的有序数组,最大比较次数为10。之前已经说明通过二分法查找时,每次要比较的数组元素的范围是确定的,这里每级存储单元用于存储通过二分法在有序数组中进行查找时,每次要比较的数组元素,即第X次比较时,可能与给定值比较的数组元素都在第X级存储单元,X是正整数且不大于M。
M级存储单元中包括相邻的一级存储单元和二级存储单元,这里的一级存储单元为第Y级存储单元时,则二级存储单元为第Y+1级存储单元,Y是正整数且小于M,即一级存储单元和二级存储单元可以是第一级存储单元和第二级存储单元,也可以是第二级存储单元和第三级存储单元。
在M级存储单元中,第一级存储单元中只存储一个N个数组元素的有序数组的中间数组元素,即通过二分法在N个数组元素的有序数组中查找时,第一次要读取比较的数组元素。第二级存储单元中存储第二次要读取比较的数组元素,在第二级存储单元不为第M级存储单元的情况下,第二级存储单元中数组包括两个数组元素,并与第一级存储单元中唯一的数组元素对应,其中,一个数组元素比第一级存储单元中数组元素大,一个数组元素比第一级存储单元中数组元素小。第三级存储单元中存储第三次要读取比较的数组元素,在第三级存储单元不为第M级存储单元的情况下,第三级存储单元中数组包括四个数组元素,其中,较小的两个数组元素与第二级存储单元的较小的数组元素对应,较大的两个数组元素与第二级存储单元的较大的数组元素对应。以此类推,直到第M级存储单元中存储第M次要读取比较的数组元素,数组元素的个数可能不再是上一级存储单元中数组元素个数的两倍,由N的大小决定,第M级存储单元中数组的数组元素个数为N+1-2M-1。
将数组元素分级存储之后,每级存储单元将至少对应一个读接口。
下面以四级存储单元为例进行说明多级存储单元的存储结构,参见图3,图3为本公开实施例所示的四级存储单元的存储结构示意图。RAM中的四级存储单元存储着0-14一共15个数组元素,对于15个有序数组元素一次二分法查找最多需要4次比较,所以多级存储单元为四级。第一级存储单元,即1级RAM,存储着的数组包括第一次要读取比较的最中间数组元素7;第二级存储单元,即2级RAM,存储着的数组{3,11}包括第二次可能读取比较的数组元素;第三级存储单元,即3级RAM,存储着的数组{1,5,9,13}包括第三次可能读取比较的数组元素;第四级存储单元即4级RAM,存储着的数组{0,2,4,6,8,10,12,14}包括第四次可能读取比较的数组元素。
按照二分法查找的规则,在{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14}有序数组中进行查找时,第一次先比较中间数组元素7,根据比较结果,比较剩余数组的中间数组元素3或11,所以1级RAM中的数组元素7与2级RAM中的数组元素3和11对应;当第二次比较数组元素3时,根据第二次的比较结果,比较剩余数组的中间数组元素1或5,所以2级RAM中的数组元素3与3级RAM中的数组元素1和5对应。以此类推,每级存储单元中数组的每个数组元素对应下一级存储单元中数组的两个数组元素。除此之外,在其他实施例中还存在多级存储单元的最后一级存储单元的数组元素个数不再是上一级的两倍,这时最后一级存储单元的数组元素依然和上一级存储单元中数组元素存在对应关系。
图中各级存储单元存储着的数组是有序的,实际上,只要保持与上一级数组元素的对应关系,本公开不限制各数组中数组元素的顺序。
分级存储可以使用RAM更多的已有读接口,对于一般的RAM,每级存储单元对应一个读接口,特别的,对于双口RAM,每级储单元对应两个读接口。
步骤S102,通过第一读接口读取所述一级存储单元中第一数组的第一数组元素,比较所述第一给定值与所述第一数组元素,所述第一读接口为所述一级存储单元对应的读接口。
在本公开实施例中,一级存储单元为第一级存储单元时,即接收第一给定值之后,开始进行查找时,第一次要读取的第一数组元素就是第一级存储单元中的唯一数组元素,通过第一存储单元对应的第一个读接口读取唯一数组元素,比较第一给定值唯一数组元素的大小。
而在一级存储单元不为第一级存储单元时,则根据上一级存储单元读取的数组元素与给定值的比较结果,通过本级存储单元对应的读接口读取数组中的数组元素,再进行比较。
步骤S103,若所述第一给定值与所述第一数组元素不相等,通过第二读接口读取所述二级存储单元中第二数组的第二数组元素,比较所述第一给定值与所述第二数组元素,所述第二数组元素基于所述第一给定值与所述第一数组元素的比较结果确定,所述第二读接口为所述二级存储单元对应的读接口。
在本公开实施例中,一级存储单元为第Y级存储单元,二级存储单元为第Y+1级存储单元。
若第Y级的比较结果是第一给定值与第一数组元素相等,则确定查找成功,结束本次查找。
若第Y级的比较结果是第一给定值与第一数组元素不相等,则根据比较结果读取第Y+1级存储单元中数组的数组元素,所使用的读接口是第Y+1级存储单元对应的读接口,继续与第一给定值比较。若比较结果为相等,则确定查找成功,结束本次查找;否则,重复步骤S103。
二级存储单元为最后一级存储单元时,若比较结果仍为不相等,则查找失败,第一给定值不在多级存储单元中。
在一实施例中,第二数组元素基于所述第一给定值与所述第一数组元素的比较结果确定包括:
当二级存储单元不为所述多级存储单元的最后一级时,所述第一数组的每个数组元素对应所述第二数组的两个数组元素;即在第Y+1级存储单元不为第M级存储单元的情况下,第Y级存储单元中数组的数组元素对应两个第Y+1级存储单元中数组的数组元素。
若所述第一给定值大于所述第一数组元素,确定所述第二数组元素为:所述第一数组元素对应的所述第二数组的两个数组元素中较大的数组元素,即读取所对应的第Y+1级存储单元的两个数组元素中较大的。
若所述第一给定值小于所述第一数组元素,确定所述第二数组元素为:所述第一数组元素对应的所述第二数组的两个数组元素中较小的数组元素,即读取所对应的第Y+1级存储单元的两个数组元素中较小的。
步骤S102与步骤S103表示两级相邻存储单元的顺序查找关系,除了对于第一级存储单元只能执行步骤S102,和对于最后一级存储单元只能执行步骤S103之外,在其他级存储单元执行步骤S103时,对于下一级存储单元而言是在其他级存储单元执行步骤S102。
仍以图3为例,进一步说明使用本公开实施例的技术方案查找一个给定值的过程,一次读取比较时间称作一拍,当接收到查找请求查找给定值6:
第一拍:通过1级RAM对应的读接口1读取数组元素7,并与给定值6比较。
第二拍:由于给定值6小于数组元素7,所以通过2级RAM对应的读接口2读取数组{3,11}中较小的数组元素3,比较给定值6与数组元素3。
第三拍:由于给定值6大于数组元素3,数组元素3对应着下一级存储单元数组{1,5,9,13}中的{1,5},所以通过3级RAM对应的读接口3读取数组{1,5}中较大的数组元素5,比较给定值6与数组元素5。
第四拍:由于给定值6大于数组元素5,数组元素5对应着下一级存储单元数组{0,2,4,6,8,10,12,14}中的{4,6},所以通过3级RAM对应的读接口4读取数组{4,6}中较大的数组元素6,比较给定值6与数组元素6,比较结果相等,查找成功。
本公开实施例提供的技术方案设计了一种分级存储的存储结构,以使更多的读接口可以使用,将每次查找要比较的数组元素存储在不同的存储单元,通过每级存储单元对应的读接口读取数组元素,一个查找请求使用依次占用各级存储单元的读接口,以使多个请求的查找操作能够同时读取不同的存储单元,实现流水并行处理。本技术方案在存储空间存储的依然是原有的数组元素,不浪费紧张的存储资源的前提下,提升了二分法查找的性能,使其适用于高性能查找的应用场景。
下面进一步说明本技术方案是如何实现二分法查找操作并行处理的,在上述实施例的基础上,本公开实施例或其他实施例还包括:
接收待查找的第二给定值。查找设备接收查找请求中的第一给定值和第二给定值可以是同时的,或者查找设备在接收查找请求中的第一给定值之后,接收又一查找请求中的第二给定值。
在所述通过第一读接口读取所述一级存储单元中第一数组的第一数组元素之后,通过所述第一读接口读取所述一级存储单元中第一数组的第三数组元素。若查找第一给定值的操作正在读取第一数组元素,一级存储单元对应的第一读接口被占用,则等读取完毕后释放第一读接口后,查找第二给定值的操作可以使用第一读接口读取一级存储单元中第一数组的第三数组元素。此时,查找第一给定值的操作可能查找成功并结束查找,也可能正在占用第二读接口读取第二数组元素。第一数组元素和第三数组元素可能相同,也可能不同。
比较第二给定值与第三数组元素。
若第二给定值与第三数组元素的比较结果为相等,则查找成功,结束对第二给定值的查找。
若所述第二给定值与所述第三数组元素的比较结果为不相等,在所述通过第二读接口读取所述二级存储单元中第二数组的第二数组元素之后,通过所述第二读接口读取所述二级存储单元中第二数组的第四数组元素。在查找第二给定值的操作准备占用第二读接口时,查找第一给定值的操作已经使用完第二读接口,查找第二给定值的操作通过第二读接口读取二级存储单元中第二数组的第四数组元素。此时,查找第一给定值的操作可能查找成功并结束查找,也可能正在占用下一级存储单元的读接口。
仍以图3为例,进一步说明使用本公开实施例的技术方案查找四个给定值的过程,一次读取比较时间称作一拍,当同时接收到查找请求查找给定值0,16,3,9:
第一拍:
通过1级RAM对应的读接口1读取数组元素7,并与给定值0比较。
第二拍:
由于给定值0小于数组元素7,所以通过2级RAM对应的读接口2读取数组元素3,比较给定值0与数组元素3;
通过1级RAM对应的读接口1读取数组元素7,并与给定值16比较。
第三拍:
由于给定值0小于数组元素3,所以通过3级RAM对应的读接口3读取数组元素1,比较给定值0与数组元素1;
由于给定值16大于数组元素7,所以通过2级RAM对应的读接口2读取数组元素11,比较给定值16与数组元素11;
通过1级RAM对应的读接口1读取数组元素7,并与给定值3比较。
第四拍:
由于给定值0小于数组元素1,所以通过4级RAM对应的读接口4读取数组元素0,比较给定值0与数组元素0,比较结果相等,查找成功;
由于给定值16大于数组元素11,所以通过3级RAM对应的读接口3读取数组元素13,比较给定值16与数组元素13;
由于给定值3小于数组元素7,所以通过2级RAM对应的读接口2读取数组元素3,比较给定值3与数组元素3,比较结果相等,查找成功;
通过1级RAM对应的读接口1读取数组元素7,并与给定值9比较。
第五拍:
由于给定值16大于数组元素13,所以通过4级RAM对应的读接口4读取数组元素14,比较给定值16与数组元素14,在最后一级存储单元的比较结果为不相等,查找失败;
由于给定值9大于数组元素7,所以通过2级RAM对应的读接口2读取数组元素11,比较给定值9与数组元素11。
第六拍:
由于给定值9小于数组元素11,所以通过3级RAM对应的读接口3读取数组元素9,比较给定值9与数组元素9,比较结果相等,查找成功。
在上述以图3示例的过程中,第一给定值可以是给定值0,第二给定值可以是16,一级存储单元可以是1级RAM,二级存储单元可以是2级RAM。从第一拍开始,第一读接口是读接口1,第二读接口是读接口2,第一数组是{7},第一数组元素是数组元素7,第三数组元素也是数组元素7,第二数组是{3,11},第二数组元素是3,第四数组元素是11。
或者,第一给定值可以是给定值16,第二给定值可以是3,一级存储单元可以是2级RAM,二级存储单元可以是3级RAM。从第三拍开始,第一读接口是读接口2,第二读接口是读接口3,第一数组是{3,11},第一数组元素是数组元素11,第三数组元素是3,第二数组是{1,5,9,13},第二数组元素是13,由于给定值3查找成功所以没有第四数组元素。
或者,第一给定值可以是给定值16,第二给定值可以是9,一级存储单元可以是3级RAM,二级存储单元可以是4级RAM。从第四拍开始,第一读接口是读接口3,第二读接口是读接口4,第一数组是{1,5,9,13},第一数组元素是数组元素13,第三数组元素是9,第二数组是{0,2,4,6,8,10,12,14},第二数组元素是14,由于给定值9查找成功所以没有第四数组元素。
其他情况,在此不再赘述。
通过本公开提供的技术方案对给定值0,16,3,9进行二分法查找,一共需要6拍。如果二分查找原始方案,一个有序数组对应一个读接口,先对给定值0进行查找,需要4拍;再对给定值16进行查找,需要4拍;再对给定值3进行查找,需要2拍;最后对给定值9进行查找,需要3拍;一共需要13拍。从13拍提升到6拍,本技术方案大大提升了二分法查找的速度。特别是,在第四拍,四级存储单元中每级存储单元都在进行读取比较操作,在查找请求的个数足够多的情况下,可以几乎实现每一拍的每级存储单元都在进行读取比较操作,如此平均下来一个查找操作只需要一拍就可以完成。
在本公开实施例中,查找第二给定值的操作不必等待查找第一给定值的操作多次读取比较持续占用读接口后,才开始进行查找,而是将一个查找操作的多次读取比较分成多级流水处理。在第一个查找操作占用读接口读取完一级存储单元并比较,准备读取二级存储单元的时刻,第二个查找操作就可以占用读接口读取一级存储单元并进行比较,解决了查找操作互相阻塞的问题。同时进行多个查找操作时,最多可以实现每级存储单元都在进行读取比较操作,一次读取比较时间称作一拍,此时平均近似相当于一个查找操作只需要一拍就可以完成。在数组元素越多的情况下本技术方案对查找性能的提升越为明显,例如,对于包含1023个数组元素的有序数组,二分查找原始方案需要10拍完成一次查找,在查找请求很多的情况下,使用本技术方案仍然几乎是1拍完成。
此外,本公开的技术方案可以应用于共享式多端口存储器,分级存储后每级存储单元至少对应两个读接口,例如双口RAM,无需增加其他资源即可增加一组读接口。下面对每级存储单元对应两个读接口的例子进行说明,在前述实施例的基础上,本公开实施例提供的基于二分法的数据查找方法还包括:
在所述接收待查找的第一给定值的同时,接收待查找的第三给定值。查找第一给定值的操作与查找第三给定值的操作可以同时进行。
在所述通过第一读接口读取所述一级存储单元中第一数组的第一数组元素的同时,通过第三读接口读取所述一级存储单元中第一数组的第五数组元素,所述第三读接口也为所述一级存储单元对应的读接口。一级存储单元对应两个读接口,查找第一给定值的操作占用第一读接口,查找第三给定值的操作占用第三读接口,二者互不干扰。读取完毕后,释放出的第一读接口和第三读接口即可为后面的查找操作使用。
比较所述第三给定值与所述第五数组元素,根据比较结果,继续进行下一步。
本公开实施例的技术方案应用于共享式多端口存储器,新的读接口可以使一个存储器支持两个流水线同时查找使用,相对于上个实施例提升了一倍性能而无需增加存储资源。
与前述基于二分法的数据查找方法的实施例相对应,本公开实施例还提供了基于二分法的数据查找设备。如图4所示,图4是本公开实施例示出的一种基于二分法的数据查找设备的框图,所述设备包括:
多级存储单元23,多级存储单元23的每级存储单元存储通过二分法在有序数组中进行查找时,每次要比较的数组元素,每级存储单元至少对应一个读接口,多级存储单元23包括相邻的一级存储单元和二级存储单元;
接收模块20,用于接收待查找的第一给定值。
一级查找模块21,用于通过第一读接口读取所述一级存储单元中第一数组的第一数组元素,比较所述第一给定值与所述第一数组元素,所述第一读接口为所述一级存储单元对应的读接口。
二级查找模块22,用于所述第一给定值与所述第一数组元素不相等时,通过第二读接口读取所述二级存储单元中第二数组的第二数组元素,比较所述第一给定值与所述第二数组元素,所述第二数组元素基于所述第一给定值与所述第一数组元素的比较结果确定,所述第二读接口为所述二级存储单元对应的读接口。
本公开实施例的设备使用分级存储的存储结构,将每次查找要比较的数组元素存储在不同的存储单元,通过每级存储单元对应的读接口读取数组元素,以使多个请求的查找操作能够同时读取不同的存储单元,实现流水并行处理,在不浪费紧张的存储资源的前提下,提升二分法查找的性能,使其适用于高性能查找的应用场景。
如图5所示,图5是本公开实施例示出的另一种基于二分法的数据查找设备的框图,在前述设备实施例的基础上,
所述接收模块20,还用于接收待查找的第二给定值,以及接收待查找的第一给定值的同时,接收待查找的第三给定值。
所述一级查找模块21,还用于在所述通过第一读接口读取所述一级存储单元中第一数组的第一数组元素之后,通过第一读接口读取所述一级存储单元中第一数组的第三数组元素,比较所述第二给定值与所述第三数组元素;在所述通过第一读接口读取所述一级存储单元中第一数组的第一数组元素的同时,通过第三读接口读取所述一级存储单元中第一数组的第五数组元素,所述第三读接口也为所述一级存储单元对应的读接口,比较所述第三给定值与所述第五数组元素。
所述二级查找模块22,还用于所述第二给定值与所述第一数组元素不相等时,在所述通过第二读接口读取所述二级存储单元中第二数组的第二数组元素之后,通过所述第二读接口读取所述二级存储单元中第二数组的第四数组元素。
所述二级查找模块22,还包括:比较确定模块220,用于当二级存储单元不为所述多级存储单元的最后一级时,所述第一数组的每个数组元素对应所述第二数组的两个数组元素;若所述第一给定值大于所述第一数组元素,确定所述第二数组元素为:所述第一数组元素对应的所述第二数组的两个数组元素中较大的数组元素;若所述第一给定值小于所述第一数组元素,确定所述第二数组元素为:所述第一数组元素对应的所述第二数组的两个数组元素中较小的数组元素。
本公开实施例还提供了一种基于二分法的数据查找设备,所述设备为FPGA芯片,所述FPGA芯片包括嵌入式随机存取存储器RAM,所述RAM包括多级存储单元,所述多级存储单元的每级存储单元存储通过二分法在有序数组中进行查找时,每次要比较的数组元素,所述每级存储单元至少对应一个RAM读接口;所述FPGA芯片用于实现本公开任一实施例所述的基于二分法的数据查找方法。
上述设备中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (8)
1.一种基于二分法的数据查找方法,其特征在于,所述方法应用于在多级存储单元中进行查找,所述多级存储单元的每级存储单元用于存储通过二分法在有序数组中进行查找时,每次要比较的数组元素,所述每级存储单元至少对应一个读接口,其中,所述多级存储单元中包括相邻的一级存储单元和二级存储单元,所述方法包括:
接收待查找的第一给定值;
通过第一读接口读取所述一级存储单元中第一数组的第一数组元素,比较所述第一给定值与所述第一数组元素,所述第一读接口为所述一级存储单元对应的读接口;
若所述第一给定值与所述第一数组元素不相等,通过第二读接口读取所述二级存储单元中第二数组的第二数组元素,比较所述第一给定值与所述第二数组元素,所述第二数组元素基于所述第一给定值与所述第一数组元素的比较结果确定,所述第二读接口为所述二级存储单元对应的读接口。
2.根据权利要求1所述的方法,其特征在于,所述第二数组元素基于所述第一给定值与所述第一数组元素的比较结果确定,包括:
当二级存储单元不为所述多级存储单元的最后一级时,所述第一数组的每个数组元素对应所述第二数组的两个数组元素;
若所述第一给定值大于所述第一数组元素,确定所述第二数组元素为:所述第一数组元素对应的所述第二数组的两个数组元素中较大的数组元素;
若所述第一给定值小于所述第一数组元素,确定所述第二数组元素为:所述第一数组元素对应的所述第二数组的两个数组元素中较小的数组元素。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收待查找的第二给定值;
在所述通过第一读接口读取所述一级存储单元中第一数组的第一数组元素之后,通过所述第一读接口读取所述一级存储单元中第一数组的第三数组元素;
比较所述第二给定值与所述第三数组元素;
若所述第二给定值与所述第三数组元素不相等,在所述通过第二读接口读取所述二级存储单元中第二数组的第二数组元素之后,通过所述第二读接口读取所述二级存储单元中第二数组的第四数组元素。
4.根据权利要求1所述的方法,其特征在于,所述每级存储单元至少对应两个读接口,所述方法还包括:
在所述接收待查找的第一给定值的同时,接收待查找的第三给定值;
在所述通过第一读接口读取所述一级存储单元中第一数组的第一数组元素的同时,通过第三读接口读取所述一级存储单元中第一数组的第五数组元素,所述第三读接口也为所述一级存储单元对应的读接口;
比较所述第三给定值与所述第五数组元素。
5.一种基于二分法的数据查找设备,其特征在于,所述设备包括多级存储单元,所述多级存储单元的每级存储单元用于存储通过二分法在有序数组中进行查找时,每次要比较的数组元素,所述每级存储单元至少对应一个读接口,其中,所述多级存储单元中包括相邻的一级存储单元和二级存储单元,所述设备包括:
接收模块,用于接收待查找的第一给定值;
一级查找模块,用于通过第一读接口读取所述一级存储单元中第一数组的第一数组元素,比较所述第一给定值与所述第一数组元素,所述第一读接口为所述一级存储单元对应的读接口;
二级查找模块,用于所述第一给定值与所述第一数组元素不相等时,通过第二读接口读取所述二级存储单元中第二数组的第二数组元素,比较所述第一给定值与所述第二数组元素,所述第二数组元素基于所述第一给定值与所述第一数组元素的比较结果确定,所述第二读接口为所述二级存储单元对应的读接口。
6.根据权利要求5所述的设备,其特征在于,所述二级查找模块中所述第二数组元素基于所述第一给定值与所述第一数组元素的比较结果确定,包括:
当二级存储单元不为所述多级存储单元的最后一级时,所述第一数组的每个数组元素对应所述第二数组的两个数组元素;
若所述第一给定值大于所述第一数组元素,确定所述第二数组元素为:所述第一数组元素对应的所述第二数组的两个数组元素中较大的数组元素;
若所述第一给定值小于所述第一数组元素,确定所述第二数组元素为:所述第一数组元素对应的所述第二数组的两个数组元素中较小的数组元素。
7.根据权利要求5所述的设备,其特征在于,
所述接收模块,还用于接收待查找的第二给定值;
所述一级查找模块,还用于在所述通过第一读接口读取所述一级存储单元中第一数组的第一数组元素之后,通过第一读接口读取所述一级存储单元中第一数组的第三数组元素,比较所述第二给定值与所述第三数组元素;
所述二级查找模块,还用于所述第二给定值与所述第一数组元素不相等时,在所述通过第二读接口读取所述二级存储单元中第二数组的第二数组元素之后,通过所述第二读接口读取所述二级存储单元中第二数组的第四数组元素。
8.根据权利要求5所述的设备,其特征在于,所述每级存储单元至少对应两个读接口;
所述接收模块,还用于在所述接收待查找的第一给定值的同时,接收待查找的第三给定值;
所述一级查找模块,还用于在所述通过第一读接口读取所述一级存储单元中第一数组的第一数组元素的同时,通过第三读接口读取所述一级存储单元中第一数组的第五数组元素,所述第三读接口也为所述一级存储单元对应的读接口,比较所述第三给定值与所述第五数组元素。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011496155.0A CN112506440A (zh) | 2020-12-17 | 2020-12-17 | 基于二分法的数据查找方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011496155.0A CN112506440A (zh) | 2020-12-17 | 2020-12-17 | 基于二分法的数据查找方法和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112506440A true CN112506440A (zh) | 2021-03-16 |
Family
ID=74922173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011496155.0A Pending CN112506440A (zh) | 2020-12-17 | 2020-12-17 | 基于二分法的数据查找方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112506440A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114969164A (zh) * | 2022-07-22 | 2022-08-30 | 华控清交信息科技(北京)有限公司 | 一种数据查询方法、装置和可读存储介质 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060200747A1 (en) * | 2005-03-07 | 2006-09-07 | Rishi Bhatia | System and method for providing data manipulation using web services |
US20080205403A1 (en) * | 2007-01-19 | 2008-08-28 | Bora Akyol | Network packet processing using multi-stage classification |
US20120023282A1 (en) * | 2010-07-21 | 2012-01-26 | Seagate Technology Llc | Multi-Tier Address Mapping in Flash Memory |
US20130124491A1 (en) * | 2011-11-11 | 2013-05-16 | Gerald Pepper | Efficient Pipelined Binary Search |
US20130229867A1 (en) * | 2012-01-27 | 2013-09-05 | Link_A_Media Devices Corporation | Generating soft read values using bins and/or multiple reads |
KR20140042522A (ko) * | 2012-09-28 | 2014-04-07 | 삼성전자주식회사 | 디렉토리 엔트리 조회 장치, 그 방법 및 디렉토리 엔트리 조회 프로그램이 기록된 기록 매체 |
CN103927265A (zh) * | 2013-01-04 | 2014-07-16 | 深圳市龙视传媒有限公司 | 一种内容分级存储装置、内容获取方法及内容获取装置 |
CN105653198A (zh) * | 2014-11-13 | 2016-06-08 | 杭州迪普科技有限公司 | 数据处理方法及装置 |
WO2017133344A1 (zh) * | 2016-02-02 | 2017-08-10 | 中国互联网络信息中心 | 应用于dns查询的ip地址列表存储和查询方法 |
CN107357520A (zh) * | 2016-05-10 | 2017-11-17 | 群联电子股份有限公司 | 整理指令处理方法、存储器控制电路单元及其存储装置 |
WO2018001085A1 (zh) * | 2016-06-30 | 2018-01-04 | 中兴通讯股份有限公司 | 数据存储方法和装置、数据查找请求的处理方法和装置 |
CN110069523A (zh) * | 2017-11-23 | 2019-07-30 | 阿里巴巴集团控股有限公司 | 一种数据查询方法、装置和查询系统 |
CN110166318A (zh) * | 2019-05-15 | 2019-08-23 | 杭州迪普科技股份有限公司 | 一种数据统计方法及装置 |
CN110750494A (zh) * | 2019-09-06 | 2020-02-04 | 浙江无极互联科技有限公司 | 一种计算机领域中文件的分级存储系统 |
WO2020109733A2 (fr) * | 2018-11-29 | 2020-06-04 | Silkan Rt | Gestion des données pour le stockage de trames de données dans la mémoire d'un système de transmission de données |
-
2020
- 2020-12-17 CN CN202011496155.0A patent/CN112506440A/zh active Pending
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060200747A1 (en) * | 2005-03-07 | 2006-09-07 | Rishi Bhatia | System and method for providing data manipulation using web services |
US20080205403A1 (en) * | 2007-01-19 | 2008-08-28 | Bora Akyol | Network packet processing using multi-stage classification |
US20120023282A1 (en) * | 2010-07-21 | 2012-01-26 | Seagate Technology Llc | Multi-Tier Address Mapping in Flash Memory |
US20130124491A1 (en) * | 2011-11-11 | 2013-05-16 | Gerald Pepper | Efficient Pipelined Binary Search |
US20130229867A1 (en) * | 2012-01-27 | 2013-09-05 | Link_A_Media Devices Corporation | Generating soft read values using bins and/or multiple reads |
KR20140042522A (ko) * | 2012-09-28 | 2014-04-07 | 삼성전자주식회사 | 디렉토리 엔트리 조회 장치, 그 방법 및 디렉토리 엔트리 조회 프로그램이 기록된 기록 매체 |
CN103927265A (zh) * | 2013-01-04 | 2014-07-16 | 深圳市龙视传媒有限公司 | 一种内容分级存储装置、内容获取方法及内容获取装置 |
CN105653198A (zh) * | 2014-11-13 | 2016-06-08 | 杭州迪普科技有限公司 | 数据处理方法及装置 |
WO2017133344A1 (zh) * | 2016-02-02 | 2017-08-10 | 中国互联网络信息中心 | 应用于dns查询的ip地址列表存储和查询方法 |
CN107357520A (zh) * | 2016-05-10 | 2017-11-17 | 群联电子股份有限公司 | 整理指令处理方法、存储器控制电路单元及其存储装置 |
WO2018001085A1 (zh) * | 2016-06-30 | 2018-01-04 | 中兴通讯股份有限公司 | 数据存储方法和装置、数据查找请求的处理方法和装置 |
CN110069523A (zh) * | 2017-11-23 | 2019-07-30 | 阿里巴巴集团控股有限公司 | 一种数据查询方法、装置和查询系统 |
WO2020109733A2 (fr) * | 2018-11-29 | 2020-06-04 | Silkan Rt | Gestion des données pour le stockage de trames de données dans la mémoire d'un système de transmission de données |
CN110166318A (zh) * | 2019-05-15 | 2019-08-23 | 杭州迪普科技股份有限公司 | 一种数据统计方法及装置 |
CN110750494A (zh) * | 2019-09-06 | 2020-02-04 | 浙江无极互联科技有限公司 | 一种计算机领域中文件的分级存储系统 |
Non-Patent Citations (1)
Title |
---|
王海涛等: "改进的二分法查找", 《计算机工程》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114969164A (zh) * | 2022-07-22 | 2022-08-30 | 华控清交信息科技(北京)有限公司 | 一种数据查询方法、装置和可读存储介质 |
CN114969164B (zh) * | 2022-07-22 | 2022-10-21 | 华控清交信息科技(北京)有限公司 | 一种数据查询方法、装置和可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11706020B2 (en) | Circuit and method for overcoming memory bottleneck of ASIC-resistant cryptographic algorithms | |
US11604834B2 (en) | Technologies for performing stochastic similarity searches in an online clustering space | |
US20120136846A1 (en) | Methods of hashing for networks and systems thereof | |
CN107622020B (zh) | 一种数据存储方法、访问方法及装置 | |
CN111801665B (zh) | 用于大数据应用的分层局部敏感哈希(lsh)分区索引 | |
CN106599091B (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN111858651A (zh) | 一种数据处理方法以及数据处理装置 | |
CN107341507B (zh) | 一种基于gpu与级联哈希的快速图像sift特征匹配方法 | |
US20150058352A1 (en) | Thin database indexing | |
CN112000846B (zh) | 基于gpu分组lsm树索引的方法 | |
CN107330094B (zh) | 动态存储键值对的布鲁姆过滤器树结构及键值对存储方法 | |
WO2017192284A1 (en) | Generating and optimizing summary index levels in a deduplication storage system | |
US20200265045A1 (en) | Technologies for refining stochastic similarity search candidates | |
CN112882663B (zh) | 一种随机写的方法、电子设备及存储介质 | |
CN112506440A (zh) | 基于二分法的数据查找方法和设备 | |
US6757780B2 (en) | Multiple module content addressable memories | |
US20150058351A1 (en) | Queries for thin database indexing | |
CN108647289B (zh) | 基于布谷哈希和布隆过滤器的Hash建表方法 | |
US6708168B2 (en) | Method and apparatus for searching a data stream for character patterns | |
CN117891858B (zh) | 一种时空高效的并行近似成员查询方法及系统 | |
CN108984780B (zh) | 基于支持重复键值树数据结构管理磁盘数据的方法和装置 | |
US8743883B2 (en) | Apparatus and method for parallel processing data flow | |
Kurpicz et al. | Scalable Distributed String Sorting | |
Nakano et al. | The super warp architecture with random address shift | |
US20200004840A1 (en) | Optimizing files stored in a distributed file system |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210316 |
|
RJ01 | Rejection of invention patent application after publication |