压缩匹配枚举的制作方法

文档序号:6484776阅读:243来源:国知局
压缩匹配枚举的制作方法
【专利摘要】在压缩匹配枚举的实施例中,可生成代表存储在存储缓冲器中的数据序列的后缀数组。后缀数组之后可被转换成特里结构,由于特里结构在后缀数组的原地生成,所以其在存储缓冲器中盖写后缀数组。特里结构包括节点,每一节点代表后缀数组的一个或多个后缀,其中每一连续节点或者与特里结构中的现有节点群聚,或者被添加为特里结构的新节点。之后,数据序列匹配可如从特里结构确定的那样被枚举。
【专利说明】压缩匹配枚举【背景技术】
[0001]计算设备执行用于数据压缩的各种技术来压缩数据字节,从而使用较少的存储器和其它计算设备资源来存储、处理、保持和/或传送数据。常规的数据压缩技术从处理资源的立场来说可能是低效的,并且/或者在查找数据匹配(例如,重复的字节序列)以压缩数据时可能是不可靠的。例如,对于诸如LZX和LZMA的任何LZ77压缩实现(implementation)来说,一个关键的挑战是有效且可靠地查找产生最小压缩数据的数据匹配。
[0002]各种LZ77压缩算法尝试确定重复的字节序列,并且用(距离,长度)对(pair)来编码匹配。当压缩算法从头到尾处理缓冲器时,在每一位置处,可能的匹配是与缓冲器的当前位置处的字节相同的、来自缓冲器中更早处的字节序列。倒回(back into)缓冲器中的较短距离可用较少的比特来编码,而更长的长度则覆盖更多的数据。距离指示了在缓冲器中数据匹配之间的以字节计的距离,而长度指示了匹配的数据字节的数量。为了获得好的压缩比,对于缓冲器中的每一位置,算法应当能够为每一可能的长度枚举最短的距离。为了快速,算法不应当花费时间来枚举对于其长度来说不是最短距离的匹配。例如,在缓冲器的某位置中,可能的匹配的全部集(full set)可能是(距离=50,长度=3)、(100,4)、(120,3)、(150,4)、(200,5)。算法将仅枚举(50,3)、(100,4)和(200,5),这是因为另外两个(120,3)和(150,4)被至少同样长(例如,长度3和4)但在距离上更近的匹配所取代。在最优化方面,算法应当快速枚举匹配的帕莱托前沿(Pareto frontier),其中两个最优化准则是更长的长度和更短的距离。
[0003]LZX算法使用分裂树(splay tree)来确定压缩匹配并解决问题。分裂树是二叉树,其中新元素被插在根处。这提供了以下属性:当算法搜索树来确定匹配时,最新近的且因此是最短距离的匹配被首先遇到。如果树变得不平衡,诸如若以字母顺序插入串,则算法的执行欠佳,并且在实践中,LZX算法对于大匹配历史的伸縮性欠佳。
[0004]LZMA算法可使用哈希(Hash)链、二叉树和帕特丽夏(Patricia)树的变体来确定压缩匹配并解决问题。还存在空·间高效的树实现的技术,如果它们被用在树的每一节点处最新近插入的数据串的某个概念(notion)来修改,则可以解决问题。然而,这些技术被实施成从树的根部按层次结构向下到更低级别节点来遍历树结构,并且它们在最新近的匹配也是长匹配时是次优的。

【发明内容】

[0005]本概要介绍压缩匹配枚举的简化的概念,并且所述概念还将在下面的详细说明中描述和/或在附图中示出。本概要不应被视为描述所要求保护的主题的必要特征,也不应被用来确定或限制所要求保护的主题的范围。
[0006]压缩匹配枚举被实施成利用由叶到根的特里(trie)结构来枚举在存储的数据序列中的所有的数据匹配可能性。在实施例中,可生成代表存储在存储缓冲器中的数据序列的后缀数组(suffix array)。后缀数组然后可被转换成特里结构,由于特里结构在后缀数组的原地(in-place)生成,所以其在存储缓冲器中盖写后缀数组。特里结构包括节点,每一节点代表后缀数组的一个或多个后缀,其中每一连续后缀或者被与特里结构中的现有节点群聚(group),或者被添加为特里结构中的新节点。当后缀数组的后缀具有如特里结构中的现有节点的数据序列的共同匹配长度时,该后缀可被与该现有节点群聚。数据序列匹配然后可如从特里结构确定的那样被枚举。
[0007]在其它实施例中,后缀数组是在存储缓冲器中的缓冲位置的数组,其中缓冲位置由在相应缓冲位置处开始数据序列的数据串按字母顺序排序。后缀数组可通过从后缀数组的连续后缀步进地更新特里结构而被转换成特里结构。特里结构的节点每个均包括对父节点的引用、用于后代(descendant)节点的数据序列的共同匹配长度(例如,以包括节点的直接子节点)和最新近遍历(traverse)的后代节点的缓冲位置。特里结构的生成可基于:特里结构包括一个或多个非叶节点,其每一个具有至少两个直接子节点;用于后代节点的数据序列的共同匹配长度是最大的;以及在特里结构中的节点的总数被最小化。
【专利附图】

【附图说明】
[0008]参照以下附图来描述压缩匹配枚举的实施例。相同的标号被贯穿全文地使用以引用附图中示出的同样的特征和部件:
图1图解在其中可实施压缩匹配枚举的实施例的示例性系统。
[0009]图2图解根据一个或多个实施例的特里结构和压缩匹配枚举的例子。
[0010]图3图解根据一个或多个实施例的压缩匹配枚举的(多个)示例性方法。
[0011]图4图解可实施压缩匹配枚举的实施例的示例性设备的各种部件。
【具体实施方式】
[0012]描述并实施压缩匹配枚举的实施例来枚举在存储的数据序列中的所有的数据匹配可能性。诸如可结合LZ77压缩算法使用的压缩匹配枚举利用由叶到根的特里结构来枚举数据匹配。在实施例中,生成代表存储在存储缓冲器中的数据序列的后缀数组。后缀数组然后被转换成特里结构,由于特里结构在后缀数组的原地生成,所以其在存储缓冲器中盖写后缀数组。后缀数组可通过从后缀数组的连续后缀步进地更新特里结构而被转换成特里结构。不是在特里结构中存储对节点的子节点的引用(这通常是复杂的,因为节点可以具有可变数量的子节点),特里结构的节点每个均包括对父节点的引用、用于后代节点的数据序列的共同匹配长度以及最新近遍历的后代节点的缓冲位置。后代节点可包括节点的直接子节点,或任何其它子节点、孙节点或后代节点。
[0013]尽管压缩匹配枚举的特征和概念可在任何数量的不同的设备、系统、环境、网络和/或配置中实施,但压缩匹配枚举的实施例在以下示例性的设备、系统和方法的上下文中被描述。
[0014]图1图解在其中可实施压缩匹配枚举的各种实施例的示例性系统100。该示例性系统包括计算设备102,其可以是执行枚举的压缩数据匹配的任何类型的服务器、计算机或设备。本文所提及的任何计算设备可以利用各种部件来实施,诸如一个或多个处理器和存储设备,以及任何数量的如参照图4示出的示例性设备进一步描述的不同部件,和它们的组合。
[0015]在示例性系统100中,计算设备102包括存储或保持存储的数据序列106的存储缓冲器104。存储缓冲器可被实施为使得能进行数据存储的任何类型的计算机可读存储介质,诸如任何类型的存储器、存储介质和/或合适的电子数据存储装置。存储的数据序列106是存储在存储器中的字节,其可能具有能被识别并被压缩成数据的更小表示的重复的字节序列。
[0016]实施压缩匹配枚举的实施例来枚举在存储的数据序列中的所有的数据匹配可能性。例如,数据串“abacde”可在第一缓冲位置处开始数据序列。第一可能匹配“abacfd”可在第二缓冲位置处被确定,并且对于“abac”的四字节匹配以及在第一缓冲位置与第二缓冲位置之间的距离为1000字节,该匹配可由(长度=4,距离=1000)代表。第二可能匹配“abacdf”可在第三缓冲位置处被确定,并且对于“abacd”的五字节匹配以及在第一缓冲位置和第三缓冲位置之间的距离为10000字节,该匹配可由(长度=5,距离=10000)代表。
[0017]计算设备102还包括枚举服务108,其实施本文所描述的压缩匹配枚举的实施例。枚举服务可被实施为诸如软件应用和/或算法的计算机可执行指令,并由计算设备的一个或多个处理器执行。在本例中,枚举服务被示为实施为计算设备的部件。替换地,枚举服务可被配置成独立的软件应用、算法或基于网络的服务以实施压缩匹配枚举的实施例。
[0018]在实施例中,枚举服务108被实施来生成代表存储在存储缓冲器104中的存储的数据序列106的后缀数组110。后缀数组是存储缓冲器中的所有缓冲位置(例如,后缀)的数组,并且缓冲位置可由在每一个相应缓冲位置处开始数据序列的数据串按字母顺序排序。生成后缀数组的技术是已知的,并且枚举服务可实施各种技术中的任何技术来生成后缀数组。
[0019]枚举服务108然后被实施来将后缀数组110转换成特里结构112,由于特里结构在后缀数组的原地生成,所以其盖写存储缓冲器104中的后缀数组。这保存了存储器,因为不需要额外的存储器来从后缀数组生成或构建特里结构。后缀数组可通过从后缀数组的连续后缀步进地更新特里结构而被转换成特里结构。特里结构由叶到根生成,而不是在根节点处开始并逐步向下扩展到较低级别的层次结构。叶节点被添加到特里结构以逐步向特里结构的根节点收缩或确定根节点。枚举服务然后可在生成或构建特里结构之后启动对特里结构的搜索来枚举从特里结构确定的数据序列匹配114。
[0020]特里结构112的例子116被示为具有从后缀数组110的后缀生成的几个特里节点118。特里结构包括诸如示例性叶节点120的叶节点,其每一个对应于后缀数组110的后缀。特里结构还包括非叶节点,诸如示例性非叶节点122。叶节点120还可以是特里结构中的父节点的子节点,而非叶节点122在特里结构中可以既是子节点又是父节点。
[0021]特里结构112的例子116仅以字母顺序示出来自大数据串的少许后缀。在存储缓冲器104中的存储的数据序列106可是非常大的数据集,压缩匹配枚举被应用到该数据集。箭头代表父节点引用指针,并且数字代表了用于所有后代节点的数据序列的共同匹配长度,以包括具体节点的直接子节点。例如,具有数据序列“abceb”的叶节点120包括对非叶节点122的父节点引用,其中共同匹配长度四(4)代表两个子节点的数据序列。
[0022]可从后缀数组有效地构建特里结构,这是因为从几何学上来说,它是平面图,其中当生成特里结构时将没有父节点指针线彼此交叉。当每一个后来的叶节点120被连接到特里结构112中时(并且当非叶条目变得不能被后面的条目引用时),由于这个平面属性,新叶节点可连接到的节点集是小的,并且这导致在压缩匹配枚举的实施例中高效且简单的算法。
[0023]特里结构112本质上是树,其中匹配子串被群聚到共同的节点下,并且那些节点被群聚到有效地群聚更短匹配的其它节点下,等等。不需要或不存储节点到子节点的信息。而是,特里结构的特里节点118包括用于父节点引用、用于后代节点的数据序列的共同匹配长度(例如,以包括直接的子节点)以及最新近遍历的后代节点的节点缓冲位置的节点字段。用于父节点引用和共同匹配长度的字段两者可存储在一个三十二(32)比特的值中,例如将二十六(26)比特用于父节点引用索引,并将六(6)比特用于共同数据序列长度。更长的长度可被封顶(cap)于在三十二(32)比特值中可存储的最大长度处。
[0024]当枚举服务108构建特里结构112时,枚举服务的三个算法不变量(invariant)被保持。第一,每个非叶节点122具有至少两个直接子节点。第二,节点的后代节点的共同匹配长度是最大的(例如,如果十个串位置具有共同的长度L,而所述串位置中的两个具有共同的长度L+1,那么这两个串位置被群聚到它们自己的节点下)。第三,在这些约束内,特里结构中节点的总数被最小化(例如,如果两个串位置或子节点可被群聚到某个共同的节点下,那么它们必须被群聚到该共同的节点下)。
[0025]枚举服务108按后缀数组的后缀(例如,缓冲位置)出现在后缀数组110中的顺序来处理它们,并基于随后缀数组一起计算的最长共同前缀字段来做决定。最长共同前缀字段指示后缀与按字典顺序在其下最接近的后缀匹配多少的长度。渐增的匹配长度的小堆栈被保持,并且特里节点118通过在前缀长度减小时展开(unroll)堆栈来构建。在某个实现中,堆栈较小,因为匹配长度被封顶为六比特数字。堆栈条目代表其上可连接将来的节点的所有现有节点的集,或者在特里结构112被生成时可创建新的叶节点120。对于后缀数组的每一后缀,后缀可被与合适长度的现有节点群聚,或被用来生成特里结构的新叶节点。在对合适长度节点进行搜索期间,当堆栈被展开时,非叶节点被指派以父节点。这些群聚决定是基于如上描述的三个算法不变量。
[0026]用于特里结构112中非叶节点122的空间从后缀数组本身来分配,并且由于可以容易地证明分配的非叶节点的数量小于被处理的后缀的数量,所以这是步进地用新的特里结构盖写后缀数组110的“原地”方法。如之前所描述的那样,这保存了存储器,因为两个大数据结构(例如,后缀数组110和特里结构112)两者没有被同时存储。每一叶节点120对应于某个后缀(例如,缓冲位置),并且每一叶节点的父节点通过盖写逆(inverse)后缀数组而被存储。
[0027]枚举服务108还实施匹配枚举搜索方法,并且对于按顺序的每一缓冲位置,沿着特里结构中从叶节点到根节点的父节点指针前进。每一非叶节点122 (例如,也由特里节点118代表)存储或保持父节点引用、共同匹配长度和后代节点的后代节点缓冲位置,以包括直接子节点,非叶节点从该直接子节点被最新近遍历(例如,在此过程期间最新近“访问过”该非叶节点的后代节点的缓冲位置)。对于从其它节点的随后的遍历,这些节点字段为沿着从叶节点到根节点的由叶到根路径的每个长度提供了最短距离数据序列后向匹配。随后,在搜索阶段有关特里结构改变的唯一节点字段是用于与每一非叶节点相关联的最新近遍历的后代节点的后代节点缓冲位置字段。
[0028]如果数据序列的最新近匹配也是长匹配,并且在特里结构112中有不同长度的很多较短匹配被代表,那么相同数据匹配可随着特里结构逐步被遍历而反复发生。例如,长度十(10)的最短距离匹配可能也是长度九(9)、八(8)、七(7)等的最短距离匹配。简单的解决方案是利用存储器的八字节用于特里结构中的每ー非叶节点,诸如大约四字节用于父节点引用,大约近四字节用于后代节点缓冲位置(例如,最新近看到的位置),并且ー些比特用于共同匹配长度。然而,特里结构中的每ー非叶节点使用八字节,且每一叶节点使用四字节,将导致节点数量的十二倍(12n)的总存储器使用。通过特里结构中每ー非叶节点仅使用四字节,这个总存储器使用可減少到节点数量的八倍(Sn)。
[0029]为了节省存储器,枚举服务利用了以下事实:仅按顺序使用由叶到父的引用,并且一旦针对某个位置的数据匹配已被查找,就不再需要用于该位置的叶数据。由于存储缓冲器104被向前遍历,所以存储空间从以前是逆后缀数组那样的东西变得可用,该后缀数组在构建特里结构112时被盖写,并且这个可用的存储空间可被用来存储所有的信息。在某个实现中,字段被存储在“父节点空间”中以查找父本身,因为这个可用存储空间不太可能邻近节点父存储装置。当由叶到父的数组被用作附加存储器时,最新近看到的节点字段几乎就是这样的字段。于是,在特里结构(例如,其过去是后缀数组)的非叶部分,父节点引用被最新近看到的位置代替,并且原先的父节点引用然后被存储在以前用于最新近看到位置的叶父节点的存储器中,其然后可通过从节点获知最新近看到位置来到达。因此,对于捜索方法遍历或访问的每ー节点来说,可确定三个节点字段用于父节点引用、最新近遍历的后代节点和后代节点的共同匹配长度。
[0030]这样不仅节省了存储器的利用,并且还跳过了在既长又在附近的数据匹配被确定时特里结构112中不需要被遍历的节点。这是因为最新近的总体位置实际上是针对每ー节点在其由叶到根的路径中的最新近遍历的(例如,最新近看到的)位置,其具有用于仅ー个父节点引用的存储空间。最初可存储NULL(空)引用以指示父节点是特里结构的根节点。之后,一旦下ー节点位置被处理,该下ー节点位置就变成当在根节点处看时的最新近遍历的,并且先前的最新近遍历的位置的父引用被更新,以使得对两个位置共同的节点被引用(方便地,该节点为遍历中的“当前”节点)。在特里结构的每一节点处,而不仅仅是在根节点处进行这样的操作,这迫使较老的位置在特里结构上越来越向下。这种连续地改变和更新特里结构的技术因在遍历特里结构时跳过不需要的步骤(诸如多次枚举相同的匹配长度或者枚举明显为次优的匹配)而是有效的。
[0031]图2图解特里结构200的例子,以及參照图1所描述的枚举服务108如何被实施来按照本文所描述的压缩匹配枚举的实施例搜索并更新特里结构。特里结构在202处被示作为在从后缀数组转换时并且先于任何匹配枚举被构建。特里结构的节点被标识为节点204到220,并且底层的叶节点还被标识为Pl到P4,以便指示叶节点被枚举服务处理的顺序。遵循两个基本原则来执行匹配枚举:第一,先前遍历的非叶节点指向非叶节点从其被最新近遍历的叶节点;第二,叶节点和尚未遍历的节点指向某个非叶节点(松散地称为父节点,在某些情况下其可为根节点)。
[0032]在从202处所示的特里结构到224处所示的特里结构的第一转变222中,枚举服务108尝试枚举针对与叶节点204 (例如,首先处理的叶节点Pl)相关联的后缀(例如,缓冲位置)的数据匹配。在本例中,没有遇到针对被处理的第一叶节点的匹配,但是特里结构被更新,以使得在从叶节点204到根节点220的路径中的每ー节点现在引用其本身相应的叶节点(例如,这些节点的最新近的“访问者”)。例如,从叶节点204到根节点220的路径穿过节点212、216和218。随着这些节点中的每一个被遍历,用于后代节点缓冲位置的各个节点字段被更新成引用叶节点204。另外,叶节点204的父节点引用字段被更新成引用根节点220。
[0033]在从224处所示的特里结构到228处所示的特里结构的第二转变226中,枚举服务108沿着从叶节点208的搜索路径前进来枚举针对与该叶节点(例如,第二处理的叶节点P2)相关联的后缀的匹配。在本例中,有某个长度(在附图中未具体指明)的匹配在遍历的第二非叶节点216处(例如,在非叶节点214被遍历之后)被枚举。从节点216,可确定匹配叶节点204的位置(例如,如在224处所示,节点216引用叶节点204)。接下来要遍历的父节点(其在本例中为根节点220)也是从叶节点204的父节点引用字段(例如,如在224处所示,节点204引用根节点220)被确定的。在用于叶节点208的原先的由叶到根的路径中的非叶节点218在本例中被跳过,并将如下文进一步描述的那样被处理。另外,叶节点208的父节点引用字段被更新成引用根节点220。
[0034]在从228处所示的特里结构到232处所示的特里结构的第三转变230中,枚举服务108沿着从叶节点206的搜索路径前进来枚举针对与该叶节点(例如,第三处理的叶节点P3)相关联的后缀的匹配。在本例中,两个匹配在叶节点204和叶节点208处被枚举。在叶节点208处的父节点引用字段被更新成引用节点216,并且在搜索路径中的非叶节点212和216被更新成引用叶节点206,该叶节点206是遍历非叶节点212和216的最新近的节点。另外,叶节点206的父节点引用字段被更新成引用根节点220。
[0035]在从232处所示的特里结构到236处所示的特里结构的最终转变234中,枚举服务108沿着从叶节点210 (例如,第四处理的叶节点P4)的搜索路径前进。遇到非叶节点218,其为在上文用于叶节点208的原先的由叶到根的路径中被跳过的节点。非叶节点218仍然引用第一叶节点204,该叶节点204引用在特里结构中处于非叶节点218下方的、它的父节点216。这可能看起来是有问题的,因为搜索路径应当在特里结构中更高地遍历。然而,这可以通过检测叶节点204的父节点216具有比当前非叶节点218更长的长度来简单处理。枚举服务然后继续沿着从节点216经由节点206的搜索路径前进,直到遇到具有比当前非叶节点218更短长度的节点,其在这种情况下为根节点220,并且该更短长度指示先辈节点而不是后代节点。于是,叶节点206的父节点引用字段被更新成引用非叶节点218,并且叶节点208的父节点引用字段被更新成引用根节点220。沿着用于每一叶节点的搜索路径前进和准确地遍历特里结构的算法的动态特性以非常小的处理代价提供了枚举的匹配。
[0036]示例性方法300被参照图3按照压缩匹配枚举的一个或多个实施例描述。通常,本文所描述的任何服务、功能、方法、程序过程、部件和模块可以使用软件、固件、硬件(例如,固定逻辑电路)、人工处理或它们的任何组合来实施。软件实现代表当由计算机处理器执行时完成规定的任务的程序代码。示例性方法可以在计算机可执行指令的一般上下文中被描述,计算机可执行指令可包括软件、应用、例程、程序、对象、部件、数据结构、程序过程、模块、功能等等。程序代码可存储在对于计算机处理器来说是本地的和/或远程的一个或多个计算机可读存储介质设备中。所述方法也可在分布式计算环境中由多个计算机设备实践。另外,本文所描述的特征是与平台无关的,并且可在具有各种各样处理器的各种各样计算平台上实施。
[0037]图3图解压缩匹配枚举的(多个)示例性方法300。描述方法框的顺序并不打算被解释为限制,并且任何数量的所描述方法框可以以任何顺序被组合来实施某种方法或替换的方法。
[0038]在方框302,生成代表存储在存储缓冲器中的数据序列的后缀数组。例如,在计算设备102 (图1)处的枚举服务108生成代表存储在存储缓冲器104中的存储的数据序列106的后缀数组110。后缀数组是在存储缓冲器中的缓冲位置的数组,并且缓冲位置由在相应缓冲位置处开始数据序列的数据串按字母顺序排序。
[0039]在方框304,后缀数组被转换成特里结构,由于特里结构在后缀数组的原地生成,所以其在存储缓冲器中盖写后缀数组。例如,枚举服务108将后缀数组110转换成特里结构112,并且由于特里结构在后缀数组的原地生成,所以其在存储缓冲器中盖写后缀数组。后缀数组通过从后缀数组的连续后缀步进地更新特里结构而被转换成特里结构。特里结构包括节点,所述节点的每一个代表后缀数组的一个或多个后缀,并且每一连续后缀或者被与特里结构中的现有节点群聚,或者被添加为特里结构中的新节点。当后缀数组的后缀具有如特里结构中的现有节点的数据序列的共同匹配长度时,该后缀可被与该现有节点群聚。另外,特里结构的生成是基于:特里结构包括一个或多个非叶节点,所述非叶节点的每一个具有至少两个直接子节点;用于后代节点的数据序列的共同匹配长度是最大的;以及在特里结构中的节点的总数被最小化。
[0040]在方框306,从每一叶节点到根节点来搜索特里结构,以及在方框308,数据序列匹配如从特里结构确定的那样被枚举。例如,枚举服务108从每一叶节点204 (图2)开始搜索特里结构112,并且沿着对根节点220的父节点引用的路径前进来枚举从特里结构112确定的数据序列匹配114。
[0041]在方框310,最新近遍历的节点的节点字段被用当前位置更新,以指派该最新近遍历的节点用于将来的数据序列匹配。例如,枚举服务108用当前位置更新最新近遍历的节点的节点字段,以指派该最新近遍历的节点用于将来的数据序列匹配。最新近遍历的节点的节点字段包括对父节点的引用、用于后代节点的数据序列的共同匹配长度(例如,以包括节点的直接子节点)以及最新近遍历的后代节点的缓冲位置。
[0042]图4示出示例性设备400的各种部件,示例性设备400可被实施为参照之前的图1-3所描述的任何设备、或者由设备实施的服务。在实施例中,该设备可被实施为固定或移动设备的任何一种或其组合,其具有以下任一形式:消费者设备、计算机设备、便携式设备、用户设备、通信设备、电话设备、导航设备、电视设备、电器设备、游戏设备、媒体回放设备和/或电子设备。该设备还可与操作设备的用户(即,人)和/或实体相关联,这样使得设备描述了包括用户、软件、固件、硬件和/或设备的组合在内的逻辑设备。
[0043]设备400包括通信设备402,其使得能进行设备数据404的有线和/或无线通信,设备数据404诸如是接收到的数据、正在被接收的数据、被安排用于广播的数据、数据的数据分组等等。设备数据或其它设备内容可包括设备的配置设置、被存储在设备上的媒体内容和/或与设备的用户相关联的信息。被存储在设备上的媒体内容可包括任何类型的音频、视频和/或图像数据。该设备包括一个或多个数据输入406,经由其可接收任何类型的数据、媒体内容和/或输入,诸如用户可选择的输入和从任何内容和/或数据源接收的任何其它类型的音频、视频和/或图像数据。
[0044]设备400还包括通信接口 408,诸如串行、并行、网络或无线接口的任何一个或多个。通信接口提供在设备和通信网络之间的连接和/或通信链路,其它电子、计算和通信设备通过其与该设备传送数据。
[0045]设备400包括一个或多个处理器410 (例如,任何微处理器、控制器等等),其处理各种计算机可执行指令来控制设备的操作。替换地或附加地,该设备可用软件、硬件、固件或固定的逻辑电路的任何一项或组合来实施,固定的逻辑电路是结合总的以412标识的处理与控制电路而被实施的。尽管未示出,但设备可包括系统总线或数据传送系统,其耦合设备内的各种部件。系统总线可包括不同的总线结构的任何一项或组合,所述不同的总线结构诸如存储器总线或存储器控制器、外围总线、通用串行总线、和/或利用各种各样总线体系结构中的任何总线体系结构的处理器或本地总线。
[0046]设备400还包括使得能进行数据存储的一个或多个存储设备416(例如,计算机可读存储介质),诸如随机存取存储器(RAM)、非易失性存储器(例如,只读存储器(ROM)、闪存等)和盘存储设备。盘存储设备可被实施为任何类型的磁或光存储设备,诸如硬盘驱动器、可记录和/或可重写的盘等等。该设备还可包括大容量存储介质设备。
[0047]计算机可读介质可以是被计算设备访问的任何可用的介质或媒介。做为例子而不是限制,计算机可读介质可包括存储介质和通信介质。存储介质包括以任何方法或技术实施的易失性和非易失性、可折卸和不可拆卸的介质,用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息。存储介质包括,但不限于,RAM、ROM、EEPR0M、闪存或其它存储技术、CD-ROM、数字多功能盘(DVD)或其它光学存储装置、盒式磁带、磁带、磁盘存储装置或其它磁存储设备、或者可用来存储信息且可被计算机访问的任何其它介质。
[0048]通信介质典型地将计算机可读指令、数据结构、程序模块或其它数据具体化为诸如载波或其它传输机制那样的调制的数据信号。通信介质还包括任何信息传递介质。调制的数据信号使它的特性中的一个或多个以按照将信息编码在信号中的方式被设置或改变。作为例子而不是限制,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、RF、红外和其它无线介质的无线介质。
[0049]存储设备414提供数据存储机制来存储设备数据404、其它类型的信息和/或数据、以及各种设备应用416。例如,操作系统418可以通过存储设备而被保持为软件应用,并且在处理器上被执行。设备应用还可包括设备管理器,诸如任何形式的控制应用、软件应用、信号处理和控制模块、对于特定设备的本机的代码、用于特定设备的硬件抽象层等等。在本例中,设备应用416包括实施本文所描述的压缩匹配枚举的实施例的枚举服务420。
[0050]设备400还包括音频和/或视频处理系统422,其生成用于音频系统424的音频数据和/或生成用于显示系统426的显示数据。音频系统和/或显示系统可包括处理、显示和/或以其它方式再现音频数据、视频数据、显示数据和/或图像数据的任何设备。显示数据和音频信号可经由RF (射频)链路、S-video链路、合成视频链路、分量视频链路、DVI (数字视频接口)、模拟音频连接或其它类似的通信链路而被传送到音频设备和/或显示设备。在实现中,音频系统和/或显示系统是设备外部的部件。替换地,音频系统和/或显示系统是示例性设备的集成部件,诸如集成的触摸屏显示器。
[0051]尽管压缩匹配枚举的实施例是以特定于特征和/或方法的语言被描述的,但是所附权利要求的主题不是必然地局限于所描述的特定的特征或方法。而是,该特定的特征和方法是作为压缩匹配枚举的示例性实现而被公开的。
【权利要求】
1.ー种方法,包括: 生成代表存储在存储缓冲器中的数据序列的后缀数组; 将所述后缀数组转换成特里结构,由于所述特里结构在所述后缀数组的原地生成,所以其盖写存储缓冲器中的所述后缀数组;以及 枚举从所述特里结构确定的数据序列匹配。
2.根据权利要求1所述的方法,其中所述后缀数组为存储缓冲器中的缓冲位置的数组,所述缓冲位置由在相应缓冲位置处开始数据序列的数据串按字母顺序排序。
3.根据权利要求1所述的方法,其中所述后缀数组通过从所述后缀数组的连续后缀步进地更新所述特里结构而被转换成所述特里结构。
4.根据权利要求1所述的方法,其中所述特里结构包括节点,所述节点的每ー个代表所述后缀数组的ー个或多个后缀,并且其中每ー连续后缀或者与所述特里结构中的现有节点群聚,或者被添加为所述特里结构的新节点。
5.根据权利要求4所述的方法,其中当所述后缀数组的后缀具有如所述特里结构的现有节点的数据序列的共同匹配长度时,所述后缀被与该现有节点群聚。
6.根据权利要求1所述的方法,其中所述特里结构包括节点,所述节点的每ー个包括对父节点的引用、用于后代节点的数据序列的共同匹配长度以及最新近遍历的后代节点的缓冲位置。
7.根据权利要求6所述的方法,其中所述后代节点包括节点的直接子节点,并且其中所述特里结构的生成是基于: 所述特里结构包括ー个或多个非叶节点,所述非叶节点的每ー个具有至少两个直接子节点; 用于所述后代节点的数据序列的共同匹配长度是最大的;以及 在所述特里结构中的节点的总数被最小化。
8.根据权利要求1所述的方法,进ー步包括在所述特里结构的生成完成之后,捜索所述特里结构以枚举数据序列匹配。
9.根据权利要求1所述的方法,进ー步包括用当前位置更新最新近遍历的节点的节点字段以指派该最新近遍历的节点用于将来的数据序列匹配。
10.ー种计算设备,包括: 至少存储器和处理器以实施枚举服务,所述枚举服务被配置成: 生成代表存储在存储缓冲器中的数据序列的后缀数组; 将所述后缀数组转换成特里结构,由于所述特里结构在所述后缀数组的原地生成,所以其盖写存储缓冲器中的所述后缀数组,所述特里结构包括节点,所述节点的每ー个代表所述后缀数组的ー个或多个后缀,其中每ー连续后缀或者被与所述特里结构中的现有节点群聚,或者被添加为所述特里结构的新节点;以及 枚举从所述特里结构确定的数据序列匹配。
【文档编号】G06F17/00GK103582880SQ201180071391
【公开日】2014年2月12日 申请日期:2011年10月9日 优先权日:2011年6月3日
【发明者】B.A.米克尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1