买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:GSI科技公司
摘要:用于从关联存储器阵列中的项目集合中逐一选择项目的方法和系统包括:确定集合的密度;如果密度稀疏,则重复执行极端项目选择EIS方法,以从集合中选择选定的项目的下一项目并从集合中移除下一项目以创建下一集合;以及如果密度不稀疏,则执行下一索引选择NIS方法,以创建选定的项目的链表并重复地从集合中选择下一选定的项目。关联存储器阵列包括以行和列布置的多个关联存储器单元格,其中,第一行和第一列中的每个第一单元格可以访问相邻列中的第二行中的第二单元格的内容。
主权项:1.一种用于从大型项目数据集中选定的项目集合中逐一选择项目的方法,其中,所述数据集存储在关联存储器阵列中,所述方法包括:确定所述集合的密度是否稀疏;如果所述密度稀疏,则重复执行极端项目选择EIS方法,以从所述集合中选择所选定的项目的下一项目并从所述集合中移除所述下一项目以创建下一集合,其中所述极端项目选择EIS方法选择所述集合中具有最高最低索引的项目;以及如果所述密度不稀疏,则执行下一索引选择NIS方法,以创建所选定的项目的链表并重复地从所述链表中选择下一选定的项目,包括:具有标记矢量,其中,所选定的项目的所有索引具有第一值并且非选定的项目的所有索引具有第二值;对于具有所述第一值的比特,计算从具有所述第一值的第一比特到所述标记矢量中的具有所述第一值的下一比特的增量;将所述增量添加到索引以创建项目的索引的链表;选择所述链表的第一项目;以及从其标记比特具有所述第一值的所述链表中重复选择下一项目。
全文数据:对集合的项目的逐一选择相关申请的交叉引用本申请要求享有来自于2017年8月30日提交的美国专利申请15690,305的优先权,通过引用方式将其并入本文。技术领域概括而言,本发明涉及关联计算,并且具体而言涉及使用关联计算的数据挖掘算法。背景技术应用经常需要从大型项目数据集中逐一挑选或检索若干选定的项目。可以通过以下方式之一创建选定的项目的集合:由用户手动选择;由算法创建;或者作为搜索或任何其他产生应用所需的项目集合的过程的结果。在数据集中,属于集合的项目被显式地标识为该集合的部分。可以一个接一个地检索集合中的项目,使得在每个检索步骤中,检索来自集合的单个项目。在其检索之后,可以从集合中移除检索到的项目,以便其不再被检索。用于拣选在每个特定步骤中检索哪个项目的方法在本文中被称为“项目选择”。可以领会,应用可以重复检索步骤,直到已经检索集合中的所有项目并且集合被清空。假定只要最终检索了集合中的所有项目,从集合中检索项目的次序没有隐式的重要性。朴素的“项目选择”方法可以用于通过项目在数据集中的位置来选择项目。在每个检索操作中,可以扫描整个数据集,从第一项开始直到找到属于集合的项目。一旦被读取,可以将“读取”指示指派给读取的项目,并且应用可以执行下一检索操作。可以领会,扫描整个数据集的单个检索操作的复杂度是ON,其中,N是数据集的大小,并且读取具有P个项目的整个集合的复杂度是OP*N。发明内容根据本发明的优选实施例,提供了用于从大型项目数据集中选定的项目集合中逐一选择项目的方法。方法包括确定集合的密度是否稀疏。如果密度稀疏,则方法包括重复执行极端项目选择EIS方法以从集合中选择选定的项目中的下一项目并从集合中移除该下一项目以创建下一集合。如果密度不稀疏,则方法包括执行下一索引选择NIS方法以创建选定的项目的链表并重复从集合中选择下一选定的项目。此外,根据本发明的优选实施例,数据集存储在关联存储器阵列中。此外,根据本发明的优选实施例,方法还包括:创建具有与数据集相同大小的标记矢量,其中,选定的项目的所有索引具有第一值并且非选定的项目的所有索引具有第二值。此外,根据本发明的优选实施例,第一值是“1”并且第二值是“0”。另外,根据本发明的优选实施例,确定包括:对标记矢量中的第一值的数量进行计数以产生大小,将大小除以数据集中的项目数量,并且将除法结果与预定义的值进行比较以提供密度。此外,根据本发明的优选实施例,确定包括:对标记矢量中的第一值的数量进行计数以产生大小,并且将大小与预定义的值进行比较以提供密度。根据本发明的优选实施例,提供了用于从大型项目数据集中选定的拣选项目集合中选择期望的项目的方法。方法包括:对于标记矢量中的每个标记比特,根据标记比特来创建组合值CV作为CV的最高有效比特MSB并且创建数据集的项目的索引,标记比特具有与集合中的每个项目相关联的第一值和与不在集合中的每个项目相关联的第二值;并且选择期望的项目作为其CV具有极值的项目。此外,根据本发明的优选实施例,极值是最大值或最小值。此外,根据本发明的优选实施例,当极值为最大值时MSB是标记比特的值,并且当极值是最小值时MSB是标记比特的值的逆inverse。根据本发明的优选实施例,提供了用于从大型项目数据集中选定的拣选项目集合中一次选择一个项目的方法。方法包括:具有标记矢量,其中,选定的项目的所有索引具有第一值并且非选定的项目的所有索引具有第二值。对于具有第一值的比特,方法包括:计算从具有第一值的第一比特到标记矢量中具有第一值的下一比特的增量,将增量添加到索引以创建项目的索引的链表,选择列表的第一项目,并且从链表中重复选择其标记比特具有第一值的下一项目。另外,根据本发明的优选实施例,下一项目是其索引是链表中的后面的项目并且其标记比特具有第一值的项目。此外,根据本发明的优选实施例,增量具有最大大小。此外,根据本发明的优选实施例,链表还包括其标记比特具有第二值的中间项目,并且其中,选择包括:当下一项目是中间项目时,选择由中间项目指示的下一项目。此外,根据本发明的优选实施例,计算增量包括:创建增量矢量;将增量矢量的所有元素启动为“0”值;对于增量矢量中的所有比特同时地,如果标记矢量的值是第二值,则将1添加到增量矢量中的当前比特的值;并且对于标记矢量中的所有比特同时地,通过在标记矢量中的后续比特的值与标记矢量中的当前比特的值之间执行布尔运算来更新标记矢量,由此对具有第一值的标记比特进行移位;并且将添加和更新重复预先确定的次数。此外,根据本发明的优选实施例,当第一值为“1”且第二值为“0”时,布尔运算为或运算,并且当第一值为“0”且第二值为“1”时,布尔运算为与运算。根据本发明的优选实施例,提供了关联存储器阵列。关联存储器阵列包括以行和列布置的多个关联存储器单元格,其中,第一行和第一列中的每个第一单元格可以访问相邻列中的第二行中的第二单元格的内容。此外,根据本发明的优选实施例,第一行和第二行是相同行。另外,根据本发明的优选实施例,关联存储器阵列还对于每列包括多路复用器单元,其用于选择在第一列的左侧的相邻列或者在第一列的右侧的相邻列。此外,根据本发明的优选实施例,关联存储器阵列还对于每列包括逻辑单元,其用于在从第一列中读取的内容和从第二列中读取的内容之间执行布尔运算。此外,根据本发明的优选实施例,关联存储器阵列还包括电路,其用于将布尔运算的结果存储在第一列中的单元格中。根据本发明的优选实施例,提供了用于从大型项目数据集中选定的项目集合中逐一选择项目的系统。系统包括项目选择器、极端项目选择器EIS和下一索引选择器NIS。项目选择器确定集合的密度是否稀疏。如果集合稀疏,则EIS重复从集合中选择选定的项目的下一项目,并且从集合中移除下一项目以创建下一集合。如果该集合不稀疏,则NIS创建选定的项目的链表并且重复从集合中选择下一选定的项目。此外,根据本发明的优选实施例,系统还包括用于存储数据集的关联存储器阵列。此外,根据本发明的优选实施例,系统包括:具有与数据集相同大小的标记矢量,其中,选定的项目的索引用第一值标记,并且非选定的项目的索引用第二值标记。此外,根据本发明的优选实施例,第一值是“1”并且第二值是“0”。根据本发明的优选实施例,提供了用于从大型项目数据集中选定的拣选项目集合中选择期望的项目的系统。系统包括关联存储器阵列和EIS。关联存储器包括多个列,每列用于存储组合值CV,其中,与项目数据集的每个项目相关联的标记比特是CV中的每一者的最高有效比特MSB,并且与项目数据集的每个项目相关联的索引提供CV中的每一者的其他比特。EIS选择与具有极值的CV相关联的项目。此外,根据本发明的优选实施例,当极值是最大值时MSB是标记比特的值,并且当极值是最小值时MSB是标记比特的值的逆。根据本发明的优选实施例,提供了用于从大型项目数据集中选定的拣选项目集合中一次选择一个项目的系统。系统包括关联存储器阵列和NIS。关联存储器阵列包括多个列,每列用于存储来自标记矢量的比特。NIS最初计算从具有第一值的第一比特到标记矢量中具有第一值的下一比特的增量,将增量添加到索引以创建标记项目的索引的链表,随后选择链表的第一项目,并且重复选择其索引是链表中下一项目的项目。附图说明在说明书的结论部分中特别指出并清楚地要求保护被视为发明的主题。然而,本发明就操作的组织和方法二者而言,连同其目的、特征和优点可以通过参考以下详细描述当与附图一起阅读时被最好地理解,其中:图1是根据本发明的优选实施例构造和操作的项目选择系统的示意图;图2A和图2B是根据本发明的优选实施例构造和操作的形成图1系统的部分的关联存储器阵列的一部分的示意图;图3是根据本发明的优选实施例的存储在关联存储器阵列组件中的数据的示意图;图4是根据本发明的优选实施例的描述由图1的系统使用的方法的状态机;图5是根据本发明的优选实施例的存储在图1的系统中的示例性数据和极端项目选择器对其的使用的示意图;图6是根据本发明的优选实施例的存储在图1的系统中的示例性数据和下一项目选择器对其的使用的示意图;图7是根据本发明的优选实施例的示出由图6的下一项目选择器执行的用于构建链表的步骤的流程图;图8和图9是根据本发明的优选实施例的由图7的流程创建和操纵以创建集合的项目之间的增量的数据的示意图;图10是根据本发明的优选实施例的由图7的流程创建的最终链表的示意图;以及图11是根据本发明的优选实施例的由下一项目选择器实现的项目提取流程。应当领会,为了说明的简单和清楚,附图所示的元素不一定按比例绘制。例如,为了清楚,元素中的一些元素的尺寸可以相对于其他元素被扩大。此外,在认为适当的情况下,可以在附图当中重复附图标记以指示对应或类似的元素。具体实施方式在以下详细描述中,阐述了许多具体细节以便提供对本发明的透彻理解。然而,本领域技术人员将理解,可以在没有这些具体细节的情况下实践本发明。在其他实例中,没有详细描述众所周知的方法、过程和组件,以免模糊本发明。申请人已经认识到,通过扫描整个数据集来选择项目、从第一项目开始对于集合中的每个项目再次全部扫描是不高效的,这是因为复杂度与数据集大小成比例。随着数据集的增长,提取或挑选或选择项目的平均时间将增加,并且响应时间可能恶化。申请人还已经认识到,关联存储器设备可以用于存储大型数据集,并且可以提供高效的存储器内系统,所述存储器内系统可以以恒定的计算复杂度O1执行“项目选择”方法,而不论数据集的大小。在以下文献中描述了可以提供这样的恒定复杂度的存储器设备:于2012年8月7日发布的美国专利第8,238,173号题为“USINGSTORAGECELLSTOPERFORMCOMPUTATION”;于2015年5月14日公布的美国专利公开第US20150131383号题为“NON-VOLATILEIN-MEMORYCOMPUTINGDEVICE”;于2015年7月16日公布的美国专利公开第20150200009号题为“MEMORYDEVICE”,其于2018年1月2日被发布为美国专利第9,859,005号;于2016年8月16日发布的美国专利第9,418,719号题为“IN-MEMORYCOMPUTATIONALDEVICE”和于2017年1月31日发布的美国专利第9,558,812号题为“SRAMMULTI-CELLOPERATIONS”,以上被转让给了本发明的共同受让人并且通过引用方式被并入本文。现在参考的图1示意性地示出了根据本发明的优选实施例构造和操作的项目选择系统100。项目选择系统100包括项目选择器110和可以存储数据集和任何相关信息的关联存储器阵列120。项目选择器110可以根据下文描述的选择方法之一从集合中选择项目。项目选择器110还包括:在下文中被详细描述的找到并选择FS矢量112、选择在集合中具有最高最低索引的项目的“极端项目选择器”EIS114以及选择项目的链表中的下一项目的“下一索引选择器”NIS116。项目选择器110可以将选择的项目的指示添加到FS112,其可以用于提取或挑选选择的项目。项目选择器110可以在项目被提取之后从FS112中移除指示。可以领会,在每次提取操作中,FS矢量112中存在单个指示。项目选择器110还可以在项目已经被提取之后从集合中移除该项目。关联存储器阵列120可以是根据本发明的优选实施例构造和操作并如现在参考的图2A和图2B中更详细地示出的包括多个部分122的存储器设备。部分122可以布置在存储器单元230的行210和列220中,其中,三列标记为LJ、J和RJ。每个存储器单元230可以存储其自己的数据232,并且可以访问存储在每侧上的相邻存储器单元中的数据232。如虚线箭头241所示,MU-J可以读取存储在其左侧的存储器单元230MU-LJ中的数据232,或者如虚线箭头242所示,可以读取存储在其右侧的存储器单元230MU-RJ中的数据232。图2B示意性地示出了根据本发明的优选实施例构造和操作的与图2A的部分122的列J相关联的电路200。电路200可以使存储器单元MU-J能够访问相邻的存储器单元MU-RJ和MU-LJ,并且可以可选地执行存储在其中的数据232与MU-J的数据232之间的布尔运算。电路200包括两个元件:多路复用器mux260和逻辑单元280以及导线。电路200的导线提供列J的存储器单元230与电路200的元件之间的连接。导线250-J可以提供列J的存储器单元230与逻辑单元280之间的连接。导线250-LJ可以提供列-LJ的存储器单元230与mux260之间的连接。导线250-RJ可以提供列RJ的存储器单元230与mux260之间的连接。可以领会,列LJ、J、RJ与电路200中的元件之间的导线250-LJ、250-J、250-RJ可以读取存储在该列中的任何存储器单元230中的数据232。另外地或替代地,导线250-LJ、250-J和250-RJ分别可以提供执行存储在列LJ、J、RJ中的若干存储器单元230单元格中的数据232之间的布尔运算的结果。导线270可以提供mux260和逻辑单元280之间的连接,并且导线290可以提供逻辑单元280和MU-J之间的连接。Mux260可以选择从MU-LJ或MU-RJ读取数据232。逻辑单元280可以从MU-J读取数据232并且可以从mux260接收数据。逻辑单元280可以执行从MU-J读取的数据232与从mux260接收的数据之间的布尔运算。逻辑单元280可以将结果写入列J的存储器单元230,例如MU-J。可以领会,使用电路200,存储器单元MU-J可以用相邻存储器单元的数据替换其自己存储的数据。存储器单元MU-J可以替代地执行其自己的存储数据232与来自相邻存储器单元的数据之间的布尔运算,并且可以用执行的布尔运算的结果来替换其自己的数据。可以领会,类似的电路可以与图1的关联存储器阵列120的图2A的每个部分122的每列相关联。现在参考的图3示出了数据及其存储在关联存储器阵列120中的方式。关联存储器阵列120可以存储数据集310、具有与每个项目相关联的独特值的索引320以及标记矢量330。数据集310的每个项目可以存储在横跨若干行的专用列220中。与特定项目相关的索引可以存储在与特定项目相同的列220中。索引可以形成存储在存储器部分122的若干行中的矢量320。存储在部分122的行210图2A中的标记矢量330中的指示可以存储在特定项目的相同列中并且可以指示存储在列中的项目是否是集合的部分。在本发明的一个实施例中,标记矢量330的单元格中的值1可以指示存储在列中的项目在集合中因此,标记矢量330的单元格中的值0可以指示存储在列中的项目不在集合中。如图3所示,在列中实际存储和大多数计算是垂直完成的。可以领会,逻辑操作在所有列220上并行执行,即在与存储在数据集中的所有项目有关的数据上同时地执行。图3提供了存储在关联存储器阵列120中的示例数据集310。数据集310存储数据项目:数据-0、数据-1……数据-n。在该示例中,在整个数据集中,三个项目在选定的集合中,即在标记矢量330中的具有值1的那些项目,并且可以领会,在该示例中,数据项目数据-1、数据-2和数据-x被选定且应当被读取。项目选择器110可以使用任何适当的“项目选择”方法。如上文描述的,EIS114可以选择具有集合中最高最低索引的项目。并且如果集合中的项目的链表被建立并且可以是可提前访问的,则NIS116可以从列表中的第一项目开始选择项目的链表中的下一项目。下文详细描述了EIS114和NIS116二者。在一个实施例中,项目选择器110可以选择使用根据标记矢量330的密度的方法。如现在参考的图4所示,项目选择器110可以检查步骤410标记矢量330的密度。可以通过对标记矢量330中的标记的数量进行计数并将结果除以整个数据集中的项目数量来完成检查。如果比率小于预定义的值例如,5%、10%、15%等,则标记矢量330可以被认为是稀疏的,否则认为是密集的。替代地,可以通过将集合中的项目数量与预定义的值进行比较来确定密度,并且如果集合中的项目数量小于预定义的值,则标记矢量330可以被认为是稀疏的。可以领会,可以以任何其他方式评估标记的密度。当标记矢量330稀疏时,如步骤420中指示的,项目选择器110可以使用EIS114,而当标记矢量330密集时,如步骤430中指示的,项目选择器110可以使用NIS116。还可以领会,项目选择器110可以根据除了标记矢量330的密度之外的考虑来选择EIS114或NIS116。项目选择器110可以仅使用EIS114、仅使用NIS116以及使用EIS114和NIS116的任何混合。EIS114可以将与存储在数据集中的数据项目相关联的索引以及与数据项目相关联的标记二者均存储在相同列中认为是与数据项目相关联的一个组合值CV,其中,标记比特是组合值的最高有效比特MSB,并且索引提供其余比特。以该方式考虑CV,被保证的是:在标记矢量330中用“1”标记的选定的项目将具有大于用“0”标记的非选定的项目的值,这是因为在其MSB中具有1的二进制数大于在其MSB中具有0的二进制数;并且最终将挑选单个项目,这是因为每个项目都具有独特的索引,因此CV是独特的,并且将存在单个极端CV。可以领会,EIS114还可以将索引和标记比特的逆非NOT-标记认为是CV的MSB,并且找到集合中的最低索引。以该方式考虑CV,保证的是在标记矢量330中用“1”标记的选定的项目将具有0非1作为其CV的MSB,从而确保它们具有小于在其MSB中具有1非0的非选定的项目的值。EIS114可以使用任何搜索方法来找到CV之间的最大值或最小值。可以领会,通过引用并入的美国专利9,859,005可以描述用于找到数据集中的最大值的方法,其具有恒定的计算复杂度而不论数据集的大小并且可以由EIS114使用。现在参考的图5示出了存储在系统100中的示例性数据以及EIS114方法对其的使用。存储在系统100中的不同数据项目由若干水平矢量呈现:存储实际数据的数据510;对存储的项目的索引进行存储的索引520;以及存储选定的项目集合的标记矢量530。由项目选择器110使用的另外的信息是CV矢量540和FS矢量112,所述CV矢量540和FS矢量112具有对在特定提取请求中项目选择器110所选择的项目的指示。可以领会,CV540可以实际上不被存储在项目选择系统100中,并且为了清楚而在图5中示出。可以领会,为了清楚,存储在矢量的位置x中的值在本文中被表示为矢量[x]。在图5的示例中,标记矢量530包括标记[2]、标记[4]、标记[7]、标记[8]、标记[10]和标记[14]中的指示,所述指示分别对其索引为4、7、8、10和14的项目在选定的项目的集合中进行指示。可以领会,位于那些索引中的数据项目分别是数据-2、数据-4、数据-7、数据-8、数据-10和数据-14。可以通过将标记矢量530的比特称为由标记和数据项目的索引创建的值的MSB来创建CV540。还可以领会,CV540中的最大值是18、20、23、24、26、30,其如预期地与项目数据-2、数据-4、数据-7、数据-8、数据-10和数据-14相关联。使用美国专利9,859,005中描述的方法,项目选择器110可以找到CV540中的最大数。可以领会,数据项目数据-14与30相关联,其中,30是CV540中的最大值。如所示,项目选择器110可以在FS112中将FS[14]的值设置为1,并且然后可以读取与FS[14]相关联的项目。在读取提取项目之后,项目选择器110可以将标记[14]即,与相关读取数据项目相关联的比特置零,本质上从集合中移除读取项目。在将标记比特置零后,可以重新计算CV[14]并且可以将FS[14]置零。原始值由列220A指示,并且修改的值由列220B指示。项目选择器110现在可以准备好进行EIS114的另一操作。可以领会,找到最大值并将标记矢量530中的条目置零的这些步骤被重复,直到标记矢量530中不再有标记的对象,即集合为空。如上文已经提到的,当集合中的项目数量大时,NIS116可以更高效,这是因为链表被构建一次,并且一旦被构建,所有相关项目就可以被直接访问而不是最大值或最小值搜索操作。NIS116可以通过计算标记之间的“增量”来创建标记的项目的索引的链表。增量是标记矢量中具有值“1”的每两个连续单元格之间具有值“0”的单元格的数量。可以将每个计算的增量添加到当前选定的项目的索引,以获得下一选定的项目的索引。现在参考的图6示出了存储在系统100中的示例性数据以及NIS116对其的使用。存储在系统100中的不同数据项目由若干水平矢量呈现:包含存储的项目的索引的索引610;包含实际数据的数据620;以及包含选定的项目集合的标记矢量630。NIS116可以使用另外的信息:用于中间计算的临时矢量Temp635;增量矢量640;列表650以及具有对项目选择器110当前选择的一个项目的指示的FS矢量112。在图6的示例中,标记矢量630包括标记[3]、标记[5]、标记[10]、标记[19]、标记[20]、标记[23]、标记[25]和标记[27]中的指示,所述指示分别对其索引为索引[3]、索引[5]、索引[10]、索引[19]、索引[20]、索引[23]、索引[25]和索引[27]的值即,数据-3、数据-5、数据-10、数据-19、数据-20、数据-23、数据-25和数据-27的项目在选定的项目的集合中并且链表650应当包括这些索引进行指示。NIS116可以首先同时计算标记矢量630中的标记之间的增量,其中,增量是标记矢量630中每两个连续标记之间的零的数量。链表中的第一项目可以是第一增量的值。在示例中,第一标记比特与其索引为3的项目相关联,因此列650中的第一值即,位于索引0中的值是3列表[0]=3。列表650中的下一项目可以通过将到下一标记的增量添加到当前标记的项目的索引加上一其为由当前标记的项目占用的空间来计算。用于计算列表650中的项目的值的公式在等式1中被定义。列表[x]=索引[x]+增量[x+1]+1等式1在示例中,列表650中的下一项目是列表[3]。要存储在列表[3]中的值是通过添加来自增量640增量[3+1]的相关值其在该示例中为1并且添加另一个1来计算的,即列表[3]=3+1+1=5。箭头651在视觉上指向由列表650中的第一项目指向的列。列表650中的下一项目存储在由前一项目指向的位置中,即列表[3]中。箭头652在视觉上指向由列表[3]指向的项目,并且箭头653在视觉上指向列表中的下一项目。可以领会,列表650中的最后项目的值可能是无效的,这是因为它可能指向链表外部。在示例中并且如箭头654所示,在标记630中设置的最后比特是标记[27],并且它“指向”列表外部的29。下文描述了用于构建链表并用于使用它的详细机制。现在参考图7、图8和图9。图7是描述由NIS116执行的用于构建链表的步骤的流程图700。图8和图9示出了在执行流程700的步骤时增量640和列表650的数据。在步骤710中,NIS116可以创建增量640和列表650并且可以将它们初始化为0。另外,NIS116可以创建Temp635,以存储要在计算期间使用和操纵的标记630的副本,同时保持标记630的原始值未被改变以供以后使用。图8示出了在图7的步骤710中存储在索引610、标记630、Temp635、增量640和列表650中的值的示例。返回到图7,步骤720是可以将步骤730的计算重复K次的循环。K是可以由任何启发法heuristic定义的某个预定义的值,所述启发法例如固定数、数据集的大小除以标记的数量、数据集的大小除以标记的数量乘以2或任何其他启发法。步骤730描述了增量是如何在整个矢量中被同时计算的。只要在临时矢量的位置ii=0...N,N是数据集的大小即,Temp[i]中存在“0”,增量640的每个相同位置i中的值增量[i]就递增。在每次迭代中,可以计算Temp矢量635的每个单元格i中的值,作为单元格i的值和单元格i+1的值的布尔或OR的结果,所述单元i+1是矢量中的下一单元格,如在等式2中定义的。Temp[i]=Temp[i]ORTemp[i+1]等式2可以领会,对Temp635的条目的布尔或运算的影响本质上是将具有值“1”的条目复制到左侧至多K次。可以领会,仅将值1复制到左侧,而不复制0的值。只要Temp635中的条目的值为“0”,增量640的值就递增。即,在每次迭代中,增量矢量640中的每个单元格增量[i]的值可以被计算为增量[i]加上存储在Temp635中的相应单元格Temp[i]中的值的逆,如在公式3中定义的。增量[i]=增量[i]+NOTTemp[i]等式3结果是,在迭代期间,每个增量[i]将递增1直到Temp[i]变为1。现在参考的图9示出了在若干迭代之后增量640和Temp635的值。Temp1示出了第一迭代之后Temp635的值,Temp2示出了第二迭代之后Temp635的值,并且Tempk示出了最后第K迭代之后Temp635的值,其中,Temp635中每个单元格的值是使用等式2计算的。可以领会,Temp635的最后单元格的值不改变,这是因为最后单元格之后没有单元格。注意,Temp635中的单元格的值可以从0改变为1,但反过来从1改变为0不成立。可以领会,在最后迭代之后,增量k[0]与最近的集合标记标记630中之间的距离为3,增量k[1]与最近的标记之间的距离为2,增量k[2]与最近的标记之间的距离为1,并且增量k[3]是标记的实际位置,因此到最近标记的距离为0。增量1示出了第一次迭代之后增量640的值,增量2示出了下一迭代之后增量640的值,并且增量k示出了最后第K迭代之后增量640的值,其中,增量640中的每个单元格的值是使用等式3计算的。注意,单元格的值增加并表示对于每个i在过去的迭代中在Temp635中遇到的零的数量,并且最终表示项目与下一标记的项目之间的零的数量。返回到图7,步骤740描述了在步骤730的最后迭代之后列表650的计算。可以根据索引610和存储在增量640中的增量来创建列表650。列表650中的第一项目可以是第一增量的值,所述第一增量可以与数据集中的具有索引0的第一项目相关联。列表650的除了第一项目之外的所有项目可以计算为增量和“指向”下一项目的项目的索引的函数,如上文中等式1中定义的。现在参考的图10示出了使用存储在Temp635和增量640中的值来计算的列表650的值,如所示。可以领会,列表650中的第一项目指向第一标记的项目,即列表[0]=3。列表650中的下一项目是列表[3],其指向5。箭头指向列表650的条目,并且列表的其他条目具有NIS116不使用的无意义的值。应当注意,K迭代数量是在与实际标记矢量中的标记之间的实际增量没有任何关联的情况下被选择的。因此,可能的是存在大于K的增量。在该情况下,在仅K次迭代中不能计算大增量,因此,它将不在列表650中被列出。相反,列表650可以包含条目列表[x],其是指向未标记的项目的中间指针,即标记[x]的值可以是0。尽管如此,列表[x]可以指向列表650中可以最终与标记的条目相关联的另一条目。一旦列表650准备好,它就可以用于读取项目。在现在参考图11中描述了由NIS116实现的项目提取流程。流程1100在步骤1110中描述了要读取的第一项目可以是具有位于列表的第一项目中的索引的项目,即索引=列表[0]。步骤1130指示如果标记被设置即,标记[索引]==1,则图1的NIS116可以提取数据[索引],并且在步骤1140中,NIS116可以读取下一项目的索引以从列表中的当前位置提取,即索引=列表[索引]。步骤1145检查索引有效,即其值小于N,所述N是集合的大小。如果索引大于集合,则流程在步骤1150中终止。本领域技术人员可以领会,流程700和流程1100中所示的步骤并非旨在进行限制,并且可以用更多或更少的步骤或使用不同的步骤顺序或其任何组合来实践两个流程。可以领会,项目选择系统100可以减少用于从数据库中提取选定的项目的计算时间。可以同时对矢量Temp635和增量640的所有单元格同时执行计算步骤。关联存储器设备的能力即,对所有列的同时布尔运算和对存储在相同行中的相邻单元格中的数据的同时访问可以为两种项目选择方法提供不取决于的矢量大小的计算复杂度。对于大小为P的集合,EIS114的计算复杂度为OP,并且NIS116的计算复杂度为OK。虽然本文已经示出和描述了本发明的某些特征,但是本领域普通技术人员现在将想到许多修改、替换、改变和等同物。因此,应当理解,所附权利要求旨在覆盖落入本发明的真正精神内的所有这样的修改和改变。
权利要求:1.一种用于从大型项目数据集中选定的项目集合中逐一选择项目的方法,所述方法包括:确定所述集合的密度是否稀疏;如果所述密度稀疏,则重复执行极端项目选择EIS方法,以从所述集合中选择所选定的项目的下一项目并从所述集合中移除所述下一项目以创建下一集合;以及如果所述密度不稀疏,则执行下一索引选择NIS方法,以创建所选定的项目的链表并重复地从所述集合中选择下一选定的项目。2.如权利要求1所述的方法,其中,所述数据集存储在关联存储器阵列中。3.如权利要求1所述的方法,还包括:创建具有与所述数据集相同大小的标记矢量,其中,所选定的项目的所有索引具有第一值,并且非选定的项目的所有索引具有第二值。4.如权利要求3所述的方法,其中,所述第一值是“1”,并且所述第二值是“0”。5.如权利要求3所述的方法,其中,所述确定包括:对所述标记矢量中的所述第一值的数量进行计数以产生大小;将所述大小除以所述数据集中的项目数量;以及将除法的结果与预定义的值进行比较以提供所述密度。6.如权利要求3所述的方法,其中,所述确定包括:对所述标记矢量中的所述第一值的数量进行计数以产生大小;以及将所述大小与预定义的值进行比较以提供所述密度。7.一种用于从大型项目数据集中选定的拣选项目集合中选择期望的项目的方法,所述方法包括:对于标记矢量中的每个标记比特,根据所述标记比特来创建组合值CV作为所述CV的最高有效比特MSB并且创建所述数据集的所述项目的索引,所述标记比特具有与所述集合中的每个项目相关联的第一值以及与不在所述集合中的每个项目相关联的第二值;以及选择所述期望的项目作为其CV具有极值的项目。8.如权利要求7所述的方法,其中,所述极值是以下各项之一:最大值和最小值。9.如权利要求8所述的方法,其中,当所述极值是最大值时,所述MSB是所述标记比特的值,并且当所述极值是最小值时,所述MSB是所述标记比特的值的逆。10.一种用于从大型项目数据集中选定的拣选项目集合中一次选择一个项目的方法,所述方法包括:具有标记矢量,其中,所选定的项目的所有索引具有第一值并且非选定的项目的所有索引具有第二值;对于具有所述第一值的比特,计算从具有所述第一值的第一比特到所述标记矢量中的具有所述第一值的下一比特的增量;将所述增量添加到索引以创建项目的索引的链表;选择所述列表的第一项目;以及从其标记比特具有所述第一值的所述链表中重复选择下一项目。11.如权利要求10所述的方法,其中,所述下一项目是其索引是所述链表中的后面的项目并且其标记比特具有所述第一值的项目。12.如权利要求10所述的方法,其中,所述增量具有最大大小。13.如权利要求12所述的方法,其中,所述链表还包括其标记比特具有第二值的中间项目,并且其中,所述选择包括:当所述下一项目是中间项目时,选择由所述中间项目指示的下一项目。14.如权利要求12所述的方法,其中,所述计算增量还包括:创建增量矢量;将所述增量矢量的所有元素启动为“0”值;对于所述增量矢量中的所有比特同时地,如果所述标记矢量的所述值是所述第二值,则将1添加到所述增量矢量中的当前比特的值;对于所述标记矢量中的所有比特同时地,通过执行所述标记矢量中的后续比特的值与所述标记矢量中的当前比特的值之间的布尔运算来更新所述标记矢量,从而使具有所述第一值的标记比特移位;以及将所述添加和所述更新重复预先确定的次数。15.如权利要求14所述的方法,其中,当所述第一值为“1”且所述第二值为“0”时,所述布尔运算为或运算;并且当所述第一值为“0”且所述第二值为“1”时,所述布尔运算为与运算。16.一种关联存储器阵列,其包括:以行和列布置的多个关联存储器单元格,其中,第一行和第一列中的每个第一单元格能访问相邻列中第二行中的第二单元格的内容。17.如权利要求16所述的关联存储器阵列,其中,所述第一行和所述第二行是相同行。18.如权利要求16所述的关联存储器阵列,并且还包括:对于每列,多路复用器单元,其用于选择以下各项之一:在所述第一列的左侧的相邻列和在所述第一列的右侧的相邻列。19.如权利要求16所述的关联存储器阵列,并且还包括:对于每列,逻辑单元,其用于执行从第一列中读取的内容和从第二列中读取的内容之间的布尔运算。20.如权利要求16所述的关联存储器阵列并且还包括:电路,其用于将所述布尔运算的结果存储在所述第一列中的单元格中。21.一种用于从大型项目数据集中选定的项目集合中逐一选择项目的系统,所述系统包括:项目选择器,其用于确定所述集合的密度是否稀疏;极端项目选择器EIS,其用于在所述集合稀疏的情况下从所述集合中重复选择所选定的项目的下一项目,并且从所述集合中移除所述下一项目以创建下一集合;以及下一索引选择器NIS方法,其用于在所述集合不稀疏的情况下创建所选定的项目的链表,并且从所述集合中重复选择下一选定的项目。22.如权利要求21所述的系统,并且还包括用于存储所述数据集的关联存储器阵列。23.如权利要求21所述的系统,并且还包括:具有与所述数据集相同大小的标记矢量,其中,所选定的项目的索引用第一值标记,并且非选定的项目的索引用第二值标记。24.如权利要求21所述的系统,其中,所述第一值是“1”,并且所述第二值是“0”。25.一种用于从大型项目数据集中选定的拣选项目集合中选择期望的项目的系统,所述系统包括:关联存储器阵列,其包括多个列,每列用于存储组合值CV,其中,与所述项目数据集的每个项目相关联的标记比特是所述CV中的每一者的最高有效比特MSB,以及与所述项目数据集的每个项目相关联的索引提供所述CV中的每一者的其他比特;以及极端项目选择器EIS,其用于选择与具有极值的CV相关联的项目。26.如权利要求25所述的系统,其中,所述极值是以下各项之一:最大值和最小值。27.如权利要求25所述的系统,并且其中,当所述极值是最大值时,所述MSB是所述标记比特的值,并且当所述极值是最小值时,所述MSB是所述标记比特的值的逆。28.一种用于从大型项目数据集中选定的拣选项目集合中一次选择一个项目的系统,所述系统包括:关联存储器阵列,其包括多个列,每列用于存储来自标记矢量的比特;以及下一项目选择器NIS,其用于:初始地计算从具有所述第一值的第一比特到所述标记矢量中的具有所述第一值的下一比特的增量,将所述增量添加到索引以创建标记的项目的索引的链表,随后选择所述链表的第一项目,并且重复地选择其索引是所述链表中的下一项目的项目。
百度查询: GSI科技公司 对集合的项目的逐一选择
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。