用于基于组合超图形的数据表示和操作的装置和方法与流程

文档序号:11333806阅读:284来源:国知局
用于基于组合超图形的数据表示和操作的装置和方法与流程
对相关申请的交叉引用本申请基于并要求于2014年12月10日提交的临时美国申请no.62/090,190的优先权权益,该临时美国申请的全部内容通过引用被结合于此。本文公开的实施例一般而言涉及用于使用唯一可逆码和基于树的编号系统来编码组合超图形(chymaps)的方法和装置,该基于树的编号系统将项代数(termalgebra)嵌入到chymaps中;并且更具体而言,该装置和方法提供复杂数据结构表示、模式识别、子图的快速统一、以及对项代数的操作是可逆且无损(即,双射)的对编号的算术运算。
背景技术
:本文提供的背景描述是出于一般地呈现本公开的上下文的目的。当前提名的发明人的工作,就该工作在这个背景部分中被描述的程度而言,以及在提交时没有以其它方式被限定为现有技术的本描述的各方面,既不是明确地承认也不是暗示地承认作为针对本公开的现有技术。搜索引擎、关系数据库系统、图表示和大多数结构化数据表示和计算系统都具有将数据存储为整数的属性。这些整数的编码、操作和解码消耗相当多的cpu时间。因此,已经付出相当大的努力来通过对数据的缩减大小或压缩和解压缩方案进行操作来降低与计算相关联的成本。技术实现要素:提供一种方法和装置,用于实现将数据表示为组合超图形(chymaps)、广义组合图形(g-maps)和/或项代数项(term-algebraterm),并将组合超图形、广义组合图形和/或项代数项编码为自然数或基于树的数。该方法和装置还包括在数据表示的同构子图形上执行统一处理。该方法还包括操作,该操作包括:使用快速算法将项代数映射到基于树的数,并使用可逆数值编码和解码将映射结构的图表示为chymaps;以对子图形(子图)到图形(图)同构和利用一般匹配过程的部分匹配进行优化的形式生成chymaps的表示;将对chymaps的操作执行为对相应数值表示的操作;使用三位自定界二进制码执行压缩和解压缩;以及存储和检索代码。附图说明当结合附图考虑时,通过参考以下详细描述提供对本公开的更完整的理解,其中:图1示出根据一种实现的将图或项代数项编码为可以是自然数或基于树的数的戈德尔数并且对图或项代数项的同构子图形执行统一的方法的流程图;图2示出根据一种实现的将图或项代数项编码为可以是自然数或基于树的数的戈德尔数的过程的流程图;图3a示出根据一种实现的图;图3b示出根据一种实现的图的组合图形;图3c示出根据另一种实现的图的组合图形;图3d示出根据一种实现的另一个图;图3e示出根据一种实现的另一个图的组合图形;图4a示出根据一种实现的将无不动点对合(fixedpointfreeinvolution)双射编码为自然数的方法的流程图;图4b示出根据一种实现的将自然数双射解码为无不动点对合的方法的流程图;图5示出根据一种实现的从图(输入图)到项树(termtree)(输出子图形)的变换;图6示出根据一种实现的形成基本构图模式的字典的子图的示例;图7示出根据一种实现的迭代地编码和遍历区域(locales)以对同构子图形(即,子图)执行统一的双步(dualstep)算法的示例;图8示出根据一种实现的评估子图形之间的同构的方法的流程图;图9示出根据一种实现的评估子图形之间的同构的方法的流程图;图10示出根据一种实现的标记组合超图形的箭头(dart)的方法的流程图;图11示出根据一种实现的将项代数项双射编码为自然数或基于树的数的方法的流程图;图12示出根据一种实现的将项代数项双射编码为自然数的示例;图13示出根据一种实现的使用符号序列标记组合超图形的箭头的方法的流程图;图14示出根据一种实现的对项代数项和项树进行编码的方法的流程图;图15示出根据一种实现的从项代数项生成项图的方法的流程图;图16示出根据一种实现的执行项图统一的方法的流程图;以及图17示出根据一种实现的计算设备的框图。具体实施方式在许多领域的尝试中,图可以提供知识和关系的有力的表示。图数据库存储图结构,而不是数据的表。通常,图数据库可应用于需要存储和检索复杂拓扑信息的领域,比如神经网络、语义网络、社交网络、相关故事的网络、场景、路线、路径、道路或地理信息系统(gis)。图数据库中的主要问题之一是基于结构匹配检索成员图。图的结构匹配是已知的np完备(np-complete)问题。在大型图数据库中,因为必须针对数据库中的大量图执行结构匹配,所以结构匹配变得非常困难。因为不存在分解空间并且空间始终在动态变化,所以从动态拓扑图数据库的检索甚至比从预索引的基于属性的图数据库的检索更难。本文描述的方法和装置提供用于基于高速逻辑推理的匹配图结构的功能。使用知识表示模型,信息被表示为图。这些图可以被变换成广义组合图形(g-maps,generalizedcombinatorialmaps)。使用用于图结构的广义组合映射(g-map,generalizedcombinatorialmapping)的表示,算法使用格点(lattice)路径的属性作为g-maps内固有的区域,以基于区域确定图结构的子图是否是同构的。假定可以由近似与超球体的质心相交的角度扫过的面积(从其量化的多面体(permutohedral)复合体的细分得到)的实数表示区域,那么可以低多项式时间或最多log(n)时间取得用于同构测试的候选子图。使用chymap-number对每一个区域进行索引,该算法可以快速识别在给定图结构中同构的区域。组合图形(超图形)可以是图(超图)的拓扑表示,并且由作用于箭头的有限集的置换对定义,其中箭头表示由顶点和入射边组成的耦合,并且置换给出入射到给定顶点(边)的边(顶点)的次序。超图是其中广义边(称为超边)可以连接多于两个节点的图。在本文中,本文关于g-maps描述的方法是通用的,并且也应用于组合超图形。类似地,除非另有明确说明,否则本文关于组合超图形描述的方法是通用的并且也应用于g-maps。可以由用于唯一定义相应的g-maps的数列表(例如,箭头、置换和对合)表示g-maps。此外,这些数列表可以使用戈德尔编号(numbering)由单个数表示(例如,使用康托尔(cantor)编号将数对映射为单个数,这可以被重复执行以将数列表映射到单个数),其中数列表与其戈德尔数之间的变换使用双射(即,可逆变换)来执行。但是,对应于长的数列表的戈德尔数可能非常大,从而为使用常规计算机硬件存储和表示这些数带来挑战。使用基于树的整数表示来克服这个挑战,该基于树的整数表示很好地适应于紧凑地表示非常大量的数。随着使用图和/或子图的戈德尔数的基于树的整数表示来表示图和/或子图,标准数学运算可以被执行。因此,可以使用对相应的戈德尔数的基本算术运算在几个时钟周期内执行计算密集型函数(诸如,比较两个子图),否则这些计算密集型函数将需要大量的计算来遍历和比较节点。因此,本文描述的方法基于表示复杂结构数据的基于树的编号来使用向量化编码,该方法实现比先前最快方案更快几个数量级的性能,该先前最快方案能够处理用于表示对应于知识表示(例如,图)的复杂数据对象的大数。事实上,在大多数情况下,本文描述的方法相对于现有技术方法实现指数级的加速。此外,这些方法实现了存储与图对应的戈德尔数的表示所需的计算机存储的显著减少。因此,本文描述的方法可以通过以下方式显著地提高处理器性能:减少主存储器带宽要求、以编码形式执行大多数计算,同时还使得在存储器的资源消耗的优化中能够利用进一步的压缩/解压缩。本文描述的方法具有例如在化学信息学领域,特别是在定量结构活性关系(qsar)建模领域中的应用,在正在研究的化学物质的图上存在许多可以被计算的拓扑指数。示例包括hosoya指数或wiener指数。这些指数本质上是化学结构底层的图的连接矩阵的函数,并且也是图的原子的性质(诸如,原子的电负性值)。如上所述,在一般情况下图子图同构是np难问题。使用本文描述的方法的新编码,该方法对图的区域进行编码,并且通过将图的子图的相邻邻域折叠成双射整数表示通过连续的编码来连续迭代图,以便在标准计算硬件上处理逐渐变大和更复杂的图。该过程性能是线性的,对于直接索引查找具有log(n)数量级的最佳情况计算性能,其中n对应于关于节点和边的数量的图的大小。最坏情况性能与图问题空间的理论极限相同(即,在最坏的情况下,该问题变得np难)。本文描述的方法使用简化步骤和近似步骤来基于标准的统一匹配生成…但是以高速返回候选者。本文描述的方法包括将g-maps、项代数和复杂计算结构表示为整数代码的一系列编码并且然后直接对整数代码执行计算,以便执行快速计算,该计算如果直接对由整数代码表示的对象执行将需要显著更多的时间。根据本文描述的方法,在g-maps、项代数的表示中使用了各种整数代码,并且为了表示复杂数据结构和整数代码上的对应操作使用了各种整数代码。整数代码为用于模式识别的复杂数据结构上的计算提供系统和方法。例如,编码对于向任意字母分配任意权重的任何字母上的单词或项代数起作用。整数代码可以被用作散列,以对部分图形进行索引以及恢复部分图形的结构。此外,每组整数代码可以用于以无损的方式重构起源(originating)图。因此,对整数代码的计算表示对g-maps的计算。本文描述的方法的贡献包括但不限于:1)在逻辑编程中实现g-maps;2)为g-maps的箭头产生戈德尔代数,使得开放和封闭(轨道)被定义;3)使用g-maps来表示任何任意的网络或图,使得图的最小结构单元由箭头上的代数定义(例如,假定箭头通过对合方式关于箭头的相邻箭头描述节点,使得循环确定闭合结构,那么有可能不考虑图大小、类型和形式通过追溯箭头的对合来从g-map表示重构图,作为部分子图形);4)作为箭头的对合的函数,从上述单元/部分子图形中重构任何目标图,其中图是组合图形的模拟;以及5)通过将输入转变成其模拟g-map来从输入图生成查询,使得统一机制直接充当构建输入的映射函数。因此,本文描述的方法提供知识表示模型,该模型将概念图建模为一组子图形(即,g-maps)和最小结构的数量,该一组子图形本质上是g-maps的箭头上的一组对合或函数,该最小结构由对合(诸如,围绕节点的轨道(例如,三角形))定义、由箭头表示。这种知识表示模型通过以下事实被启用:一旦根据节点的箭头和轨道描述节点,那么就有可能通过追溯子图形的连通性(connectivity)来重构单形而不管交互图形大小、类型和形式。如本文所讨论的,子图形/图形的这种表示也极大地促进了以功能分段的方式探索子图形/图形,以通过应用结构约束来找到同构模式。图的最小结构单元可以由箭头上的代数定义,并且可以由项m来表示。如本文所述,这种根据轨道和对合的箭头的基于m的表示使得能够分别索引每一个m,同时使得能够访问每一个m的所有结构信息,使得可以像巨型拼图中的块一样使用m。因此,概念图可以被视为节点描述的二分组,并且节点描述之间的关系可以从整个图中本地化和解耦。因此,每一个节点被定义为较大图的子结构,类似于巨大的复杂拼图中的一块。现在参考附图,其中贯穿若干视图,相同的标号表示相同或对应的部分,图1示出编码图或项代数并且将子图形作为项树进行比较以执行统一的方法100的流程图。在方法100的过程110中,图或项代数通过以下被编码为戈德尔数:使用无不动点对合来表示图或项代数并且然后将无不动点对合编码为是戈德尔数的自然数。此外,可以使用三位自定界二进制码将是戈德尔数的自然数进一步编码为基于树的数。取决于自然数的大小,将戈德尔数表示为基于树的数可以改善戈德尔数的存储器存储大小,同时仍然提供直接对戈德尔数的基于树的数表示执行的数学运算而不必变换回到自然数以执行数学运算。从图或项代数到戈德尔数的所有变换都是双射的,这意味着它们是无损的和可逆的。此外,与常规对合对比,通过连同使用无不动点对合使用这种编码方法得到许多优点。方法100提供没有信息丢失的紧凑的双射编码。得到的整数在计算机的存储器中作为位串而不是常规的数据结构被更空间高效地表示。此外,上述表示需要更少的存储器,因为它们可以被更快地存储并且可以改善连续位串段的高速缓存行为,从而相对于散布在非连续存储器区域中的基于指针的数据结构产生提高的性能。在方法100的过程120中,图/项代数的编码用于执行被表示为项树的图/项代数的子图形之间的快速比较,以便执行统一处理。在方法100的步骤130中,可以对整数代码直接执行各种数学运算。在表示戈德尔数的自然数或基于树的数中执行的数学运算等同于直接对图/项代数的数学运算。在方法100的步骤140中,通过使用基于树的数表示整数代码来压缩整数代码。在某些实现中,可以在计算机存储器中使用三位自定界二进制代码表示基于树的数。可选地,可以在过程110之后和在过程120之前执行使用基于树的数表示整数代码。可替代地,可以在过程120之后和在步骤130之前执行使用基于树的数表示戈德尔数。在方法100的步骤150中,过程110、过程120、步骤130和步骤140的各种结果可以被存储,并且以后被检索用于进一步处理和比较。方法100有利地提供将项代数映射到基于树的数并且使用唯一的可逆数值编码和解码方法将这些结构的图表示为g-maps的快速方法。此外,方法100有利地以对子图形(子图)到图形(图)同构和部分匹配优化的形式提供g-maps的表示。此外,方法100有利地提供用于通用匹配(也称为统一)的过程。下面描述方法100的过程和步骤的细节。本文讨论了过程110的两种实现。图2示出是过程110的第一种实现的过程110'的流程图。过程110'将图可逆地变换为戈德尔数。在数学逻辑中,戈德尔编号是向每一个符号和一些形式语言的格式正确的公式赋予唯一自然数(称为其戈德尔数)的函数。如本文所使用的,用于图的戈德尔数是表示表示图的g-map的所有箭头、对合、置换等的单个数。过程110中的第一过程(即,过程210)以图开始并生成图的g-map表示。例如,图3d示出图,并且图3e示出与图3d所示的图对应的g-map。该图可以从任何图数据(包括,地理图形、社交网络、分子等)获得。根据将图分解成图的箭头及箭头相关联的相对层次子图形来表示g-map。最低级别的图形由对应于节点邻接的a0对合组成。接下来是a1对合,这个下一最高级别对应于边邻接,并且向上的下一级别对应于面邻接、然后是体积邻接等,如在表1中总结的。下面提供关于图和g-maps之间的关系的细节。表1:表示组合超图形例如,图可以表示拓扑,诸如连接各个城市的道路的地图。连接城市的道路可以由边表示,边被定义为两个箭头(也称为半边),其中每一个箭头起源于对应于城市的相应节点(顶点)。例如,箭头可以包括指向包含城市名称的字符串的指针。例如对应于分子中的原子之间的化学键的另一个图可以具有与连接城市的道路的地图相同的拓扑。但是,在分子的示例中,箭头将包括指向对应于原子类型而不是对应于城市名称的对象的指针。因此,图和g-map表示拓扑,但也可以用于表示各种对象。事实上,由箭头指向的对象可能是另一个g-map。除了指向对象的指针之外,箭头可以包括区分指向明显不可区分对象的箭头(例如,指向有机分子中相同但分开的碳原子的两个箭头)的唯一标签。在过程110的过程220中,g-map用于生成g-map的无不动点对合表示。如下所述,任何g-map列出表示g-map的箭头、置换和对合的整数。例如,二维组合图形(或2-map)是三元组m=(d,σ,α),其中d是箭头的有限集,是d上的置换,并且α是d上没有不动点的对合。例如,图3e所示的g-map的箭头由集合{1,-1,2,-2,3,-3,4,-4,5,-5,6,-6}给出,置换可以由(1,-1)(2,-2)(3,-3)(4,-4)(5,-5)(6,-6)(7,-7)给出并且对合可以由(1,2)(3,4,-1)(5,-4)(7,-2)(6,-3,-7)(-5,-6)给出。在过程110的过程230中,数组合用于使用单个数来表示数对。例如,康托尔配对函数可以用于举例说明如何使用单个数可逆地表示数对。对表示g-map的数列表中的对重复执行数组合,g-map表示可以被整合成单个自然数。g-map的这个单个数表示是g-map的戈德尔数。将数对重复组合成长数列表上的单个数可以导致戈德尔数的自然数表示非常大—太大以至于无法使用计算机中常规的数表示存储。当发生这种情况时,可以使用基于树的数而不是自然数来表示戈德尔数。接下来,描述广义组合图形的命名法。组合图形是具有细分对象的组合对象建模拓扑结构。组合图形可以用于表示更高维度的可定向细分对象。在几何建模中组合图形被用作图像表示和处理中的高效数据结构。这种模型涉及单纯复形(simplicialcomplex)和组合拓扑。此外,组合图形可以是表示非可定向对象(比如,莫比乌斯带和克莱因(klein)瓶)的广义图形。组合图形是边界表示模型;组合图形通过其边界表示对象。若干应用需要数据结构来表示对象的细分。例如,2d对象可以被分解为顶点(0-单元格(cell))、边(1-单元格)和面(2-单元格)。更一般地,n-维对象由维度0到n的单元格组成。此外,也可以通过描述细分的所有单元格加上这些单元格之间的所有入射和邻接关系来表示这些单元格之间的相邻关系。当所有表示的单元格都是单形时,可以使用单纯复形。但是,为了表示任何类型的单元格,使用单元格拓扑模型,诸如组合图形或广义图形。图3a示出平面图的示例。图3b和3c示出分别使用顶点标注和面标注的图3a的图的组合表示的示例。二维组合图形(或2-图形)是三元组m=(d,σ,α),其中d是箭头的有限集,是d上的置换,并且α是d上没有不动点的对合。2-图形对应于平面图,其中每条边被细分成两个箭头(有时也称为半边)。对于每一个箭头,置换σ通过以正方向绕顶点旋转来给出下一个箭头;对于每一个箭头,其它置换α给出相同边的另一个箭头。对合α允许检索边(阿尔法,法语中的arête),并且σ允许检索顶点(西格玛,法语中的sommet)。操作可以被定义成对于每一个箭头提供相同面的下一个箭头(phi,法语中face)。因此,如图5b和5c所示,取决于置换是σ还是存在两种方法表示组合图形。这两个表示彼此对偶:顶点和面被交换。通常,n-维组合图形(或n-map)是(n+1)元组m=(d,β1,…βn),其中d是箭头的有限集,β1是d上的置换,β2,...,βn是d上的对合,如果i+2≤j(i,j∈{1,,...,n}),那么是对合。n-维组合图形表示闭合可定向n-维空间的细分。箭头是定义一对一映射仅需的抽象元素。这个定义的最后一行确定了保证所表示对象的拓扑有效性的约束:组合图形表示准流形细分。可以通过固定n=2并且将σ重新命名为β1和将α重新命名为β2来获得2-维组合图形的初始定义。从图数据(诸如,分子结构、城市的地理信息系统(gis)图形或社交网络)开始,可以构建g-map,其中每一个节点使用唯一整数进行标记。g-map具有围绕给定顶点的边的方向的显式编码,并且边可以由称为箭头的两个半边组成,每一个箭头在其所附连到的顶点处具有该箭头的原点。如由半边的箭头所定义的两个半边确定相同边的事实被记录在称为对合的置换函数中。因此,边中的第一箭头的后继是第二箭头,并且第二箭头的后继是第一箭头。有向边具有四个箭头:两个指定边,以及两个指定边的相对朝向或方向。完全有向网络的朝向可以简单地使用关于表示箭头的整数的符号的方向的约定来实现。即使当箭头不共同入射在其半边处(即,不形成图的边)但是可能源自节点时,那么它们被称为在节点处1-邻接,并且被定义为围绕节点,这是定义围绕节点的箭头的布置的循环置换。该置换操作通常被称为α1-对合,并且由置换定义的箭头的布置被称为区域。当两个箭头相对于彼此处于两个不同位置,并且是0-维对象的箭头的半边相邻时,两个0-维入射产生1-维线。这种对合通常被称为α0-对合。最简单的对合是乘以负1(-1),使得应用两次导致原始数。箭头的连续序列的每一个轨道相关联到一个节点,并且编码当围绕这个节点逆时针旋转时遇到的箭头序列。对于本领域技术人员来说,对于广义组合图形,面邻接和体积或超体积邻接置换被公知地定义和理解。在liu,y.p.的enumerativetheoryofmaps,kluwer,boston(1999)(其全部内容通过引用被结合于此)中和在kropatsch,w.g.,1995年12月,buildingirregularpyramidsbydualgraphcontraction.iee-proc.vision,imageandsignalprocessing,卷142(no.6),第366-374页(其全部内容通过引用被结合于此)中提供用于操纵g-map的方法的附加细节和实现。基于以上定义,通过使用无不动点对合表示来实现过程220。当g-mapm可以由三元组(d,s,q)和边集合e表示,使得m=(d,s,q,e)时,这一过程被实现,其中d对应于通过将每条边分解成两个箭头而获得的箭头(或半边)集合,s是从箭头到箭头的置换,该置换的循环对应于在围绕每一个节点逆时针旋转时遇到的箭头序列。从箭头到边的映射是无不动点对合,该对合的循环对应于相关联到相同边的两个箭头。无不动点的使用意味着所有对都连接不同的端。通过由定义一条边的两个箭头表示每一个分支(对合的循环)来执行通过这种图形对拓扑的编码。围绕分支点的分支的朝向由置换的循环显式编码。注意的是,置换s显式地编码围绕每一个节点的边的朝向。此外,q是无不动点对合,它的循环对应于相关联到相同边的两个箭头。通常,e(是嵌入(embedding))是将箭头映射到整数、字符或向量的有限集的部分函数(partialfunction)。通过由定义一个边的两个箭头表示每一个分支(q的循环)来执行通过这种图形对图的编码。围绕分支点的分支的朝向由置换s的循环显式编码。为了将特征附连到编码图的组合图形,可以定义一组节点和边标签(v和e),其中每一个节点和边标签分别相关联到图形的单个循环s和q。图4a示出用于无不动点对合作为整数代码的过程230的实现的示例。图4b示出通过从整数代码变换回无不动点对合来反转过程230的过程230(反转)的实现。本文使用prolog(计算机编程语言)的逻辑来描述过程230,以清楚地指示步骤410、412、414、416和418的输入和输出之间的关系。如图4a和4b所示,某些步骤被嵌套在其它步骤内部。因此,从外面步骤开始并且进行到内部嵌套步骤,这些步骤被逐渐细化。关系定义被指定为prolog子句的头部(位于符号“:-”之前),并且对关系的结合的关系细化被提供在符号“:-”之后。多个子句(也称为“规则”)用于指定谓词所应用的不同情况。无不动点对合将从0到2n-1的数的组分组成两个一组的对,使得第一个数严格小于第二个数。示例是[0-4,1-3,2-5]。还假设数对被规范地表示为按照数对的第一个元素以递增顺序排序。步骤410描述从无不动点对合到自然数代码的双射。步骤410将表示为列表is的无不动点对合表示为唯一整数代码。在确定对合is的长度l之后,步骤410生成从0到2*l的连续整数ns,对该连续整数的变换描述如下:假定从0到2*l的连续数ns,其中l是对合is的长度,我们调用involutions_codes以将对合代码ks相关联到is中的每一个对,然后我们反转得到的列表并使用bij_encode为其构建双射编码。在prolog谓词“inv2code”中,表示为列表“is”的无不动点对合被编码为唯一的整数,该整数由变量“code”引用。在计算对合“is”的长度l之后,谓词“inv2code”生成从0到2*l的连续整数ns,对该连续整数应用由3-参数谓词“inv2code”描述的变换。这些函数可以通过以下给出的prolog代码的描述来执行。此外,假定从0到2*l的连续数ns的列表(其中l是对合“is”的长度),步骤410计算用于对合“is”的整数代码。为了执行这个计算,步骤410调用步骤412中的谓词“involution_codes”,以将对合代码ks相关联到“is”中的每一个对,然后步骤410反转得到的列表并且通过使用步骤414中的“bij_encode”来构建双射编码。可以实现这一点的prolog代码的示例通过以下给出:步骤412在0和2n-1之间的数集合上生成对合作为n对的集合。这些数各自对应于由2个箭头组成的边。步骤412还在存储器中存储用于选择箭头的代码k和ks。步骤412可以由以下prolog谓词来执行:这个谓词“involution_codes”使用prolog内置运算符“nth0”来提取列表xs的tt第k个元素y,并返回其余元素ys。通过使用类似于因子(factoradics)的记号来执行步骤414。假定存在1*3*5*…(2n-1)无不动点对合,那么可以使用(多少有些)类似于因子数的记号来编码无不动点对合。但是,不是实际上使用因子,而是用使用利用双射基-k(base-k)编码的类似记号。双射记数法可以是任何数值系统,其中每一个非负整数可以使用有限数字(digit)串以恰好一种方式表示。双射记数法名称来源于非负整数集合和使用有限符号集合的有限串集合之间的这种双射(一一对应)。双射基-k记数法是双射位置记号。双射基-k记数法可以使用来自集合{1,2,…,k}(其中k≧1)的数字串来编码每一个正整数;数在串中的位置将该数字的值定义为k的幂的倍数。这种标注可以被称为k-adic。通过以下来确保步骤414的双射编码:在每一个步骤中将基递增2,以与在计数对合的乘积1*3*5..*(2n-1)中的增量2匹配,这个函数由谓词“bij_encode_step,”执行,谓词“bij_encode_step,”由谓词“bij_encode_step”调用,并且这两个谓词在下面讨论。在每一个步骤中,双射基增加2,并且整数代码通过如下面提供的prolog代码所示的步骤418的谓词“put_bdigit”的操作来扩展:作为由过程230和230反转产生的结果的示例,下面是整数代码以及从0到10和从83到100的整数代码的对应的无不动点对合。这些结果使用本文所述的prolog代码获得,并且证明prolog是正确和可操作的。注意的是,从-到(from-to)对是从<到(from<to)的,因为箭头被看作是对称的,并且因此另一个方向是隐含的。0=0+[]1=1+[(0-1)]2=2+[(0-1),(2-3)]33+[(0-2),(1-3)]4=4+[(0-3),(1-2)]5=5+[(0-1),(2-3),(4-5)]6=6+[(0-1),(2-4),(3-5)]7=7+[(0-1),(2-5),(3-4)]8=8+[(0-2),(1-3),(4-5)]9=9+[(0-2),(1-4),3-5)]10=10+[(0-2),(1-5),(3-4)]83=83+[(0-5),(1-3),(2-4),(6-7)]84=84+[(0-5),(1-3),(2-6),(4-7)]85=85+[(0-5),(1-3),(2-7),(4-6)]86=86+[(0-5),(1-4),(2-3),(6-7)]87=87+[(0-5),(1-4),(2-6),(3-7)]88=88+[(0-5),(1-4),(2-7),(3-6)]89=89+[(0-5),(1-6),(2-3),(4-7)]90=90+[(0-5),(1-6),(2-4),(3-7)]91=91+[(0-5),(1-6),(2-7),(3-4)]92=92+[(0-5),(1-7),(2-3),(4-6)]93=93+[(0-5),(1-7),(2-4),(3-6)]94=94+[(0-5),(1-7),(2-6),(3-4)]95=95+[(0-6),(1-2),(3-4),(5-7)]96=96+[(0-6),(1-2),(3-5),(4-7)]97=97+[(0-6),(1-2),(3-7),(4-5)]98=98+[(0-6),(1-3),(2-4),(5-7)]99=99+[(0-6),(1-3),(2-5),(4-7)]100=100+[(0-6),(1-3),(2-7),(4-5)]过程230的反转可以由过程230(反转)执行,该过程230(反转)可以使用下面给出的prolog谓词来执行:除了上述确定整数代码为表示图或g-map的戈德尔数的方法之外,康托尔配对也可以用作将数列表(诸如,对合、置换和箭头列表)整合到单个戈德尔数的数组合的示例。例如,将两个数x和y双射映射成单个数的配对函数p(x,y)可以由以下给出:p(x,y)=2x(2y+1)-1并且还可以被缩减成更简单的双射,这是一个单解(onesolution)diophantine方程:q(x,y)=2x(2y+1)可以通过从数列表到单个数的数对的数组合将多重集合和集合递归地变换成单个数。此外,由于配对函数是双射的,因此可以执行反转过程以使用成对差(pairwisedifference)来获得数列表。如果数列表长,那么从执行配对函数产生的单个数会由于指数幂的塔(tower)而非常大。在一些情况下,从数列表中得到的戈德尔数将太大而不能使用常规计算硬件存储或处理。在这些情况下,将戈德尔数表示为基于树的数可以是有利的。树数(treenumber)提供这些数据类型的简洁表示。列表、集合和多重集合作为树数的这些编码/解码是大小成比例的,使得它们的表示大小在恒定因子内。因此,本文描述的方法的编码可以是双射的(由于配对函数的双射性质)和大小成比例的(由于使用基于树的数),这在常规上是难以实现的组合。实现双射和大小成比例这两个方面之后,本文描述的方法能很好地探索和挖掘具有非常丰富的组合信息的数据结构。对应于使用常规主流方法变换为戈德尔数的非常丰富的组合树结构的组合图(即,存在非常大量的给定大小的树)趋向于呈指数性激增,因为长符号的编码会在树的叶子处放置相对大的数,当向上传播时,其将非常快地增加。下面详细讨论用于戈德尔数的大小成比例表示的基于树的数。此外,下面将关于生成戈德尔数并对项代数项执行子图形匹配来讨论配对函数。这里,提到了项代数项可以是嵌套函数,诸如“f(x,g(a,0,x),[1,2]),”,其中函数f的参数是x,g(a,0,x)和[1,2]。此外,f的参数中的一个g(a,0,x)本身是函数,其具有参数a,0和x。像以上讨论的g-maps一样,这个函数可以使用项树来表示,其中主函数是根,分支是参数,并且对应于函数的分支(诸如,g(a,0,x))具有从分支的端处的节点指向的分支。因此,与上述方法类似的方法可以应用于这些项代数项。例如,如在p.tarau,“compactserializationofprologterms(withcatalanskeletons,cantortuplingandgodelnumberings)”,theoryandpracticeoflogicprogramming,卷13,no.4-5,第847-861页,(2013)(通过引用被完整地结合于此)中所讨论的,函数“f(x,g(a,0,x),[1,2]),”可以被双射编码为自然数678547916890513735116076,使得编码的操作和解码操作分别生成结果:encodeterm(f(x,g(a,0,x),[1,2]),n),n=678547916890513735116076,decodeterm(678547916890513735116076,t).t=f(a,g(a,0,a),[1,2])将g-map编码为戈德尔数之后,过程230完成,并且过程110也完成。方法100从过程110进行到过程120。过程120执行包括比较g-map的候选子图形以确定同构的统一过程。而可以使用基于a*算法的方法、使用贪心算法的近似方法、或内核函数来逼近同构问题,本文所述的方法使用以下的组合:(i)基于连续较高阶(点到点、点到边、边到边、边到面、面到体积等)的相邻邻接关系分解成一组模式;(ii)基于新颖递归树的编号被应用到这种模式作为局部图形并且它们组合成表示图形的全局图形;以及(iii)对应于由区域的模式索引的区域之间的子同构的候选选择:是总图形的最大区域是图同构,而较小区域是子同构。因此,方法100是达意的、有效的、正定的并且适用于任何图。方法100的过程120对通常图遍历(walk)内核认为相同的子结构进行区分。图上的子图形内核是节点上的子图形内核的总和。因此,除非当且仅当特征空间由与子图同态的图构成,计算完整的图内核、子图内核和路径内核是难以处理的。因此,在过程120中使用模式集字典。使用常规方法,即使对于相对小的子图,大多数图内核仍然需要显著的计算开销并且在标准笔记本电脑上需要几天:方法100快多个数量级。过程120可以通过以下来执行:定义内核,以通过确定称为对应于g-map的子g-maps的子图形的项树并使用子图形的各自的戈德尔数快速比较子图形来将g-map分解成基本组成模式。图5示出从子g-map(即,输入图)到生成项树(即,输出子图形)的变换的示例。g-maps之间的内核基于它们分解成由有限大小的项树表示的子图形,并且每一个树使用子g-map进行编码。因此,基于将每一个g-map分解成大量子图形(即,表示g-map的各种子g-map的项树),在g-maps之间定义内核。子图形成基本组成模式的字典。图6示出基本组成模式的字典的示例。使用深度优先搜索策略从每一个节点提取模式,其中节点的价(valence)对应于模式的价。因此,每一个g-map通过以下来表示:分解成对其指定内核算法的由有限大小的项树(即,子图形)表示的子图形。g-map中的每一个k-维复合体都具有区域。因此边可以具有诸如边邻接面的区域。或者面可以具有诸如面邻接超体积的区域。这里描述的方法使用迭代编码和遍历区域的双步算法。当区域结构上统一时,那么图同构于匹配区域(即,子图)的级别。图7示出迭代编码和遍历区域的双步算法的示例。g-map中的每一个k-单元格具有区域,区域先前被定义为基于对合操作的围绕单元格的箭头的布置。例如,将对应于图中的节点的g-map中的0-单元格将具有边作为区域,该边是由相邻节点形成的所有边。基于g-map中的每一个单元格处的拓扑索引,这些区域中的每一个被分配索引。可以使用将保留包含区域的每一个单元格的唯一结构和内容的编码算法(诸如,lehmer码)来计算索引。lehmer码用于对置换进行编码。通常,对于统一的过程,过程120开始于这样的假设:g-map在图中可用的最高公共维度上是同构的。如果在所比较的图中的k-维复形的区域处的索引相等,那么区域的子图在结构上是等同的。如果过程120在维度k没有找到区域的结构匹配,那么考虑维度k-1的所有区域,以此类推,直到考虑了维度0的区域。现在描述过程120的细节。可以通过将项代数映射到唯一树数来将通常表示数据、信息或知识的一些特征或表示的项代数项嵌入到编码构架(skeleton)的组合图形中。为了实现表示项代数的树数的嵌入,我们定义一组节点和边标签(v和e),其中每一个节点和边标签相关联到单个循环置换,该单个循环置换的循环对应于当围绕每一个节点逆时针旋转时遇到的箭头序列,以及关联到显式地编码围绕每一个节点的边朝向的置换:这产生也表示为树数的数值代码。如在前面所明确的,广义组合图形(g-maps)是拓扑和组合的数据结构,其基于编码称为箭头的基元(primitive)元素之间的相对邻接关系的置换的概念。本文描述的方法使用两种类型的箭头:半边箭头(half-edgedart)和空箭头(emptydart)。空箭头可以用于定义部分组合图形或部分结构,其中算法取决于对象的入射对是未缝合以将循环转变为树,还是反之添加箭头以将树转变为循环。出于本发明的本实施例的算法的目的,空箭头也可以填充“空白”以完成结构。在箭头之间,存在由维度定义的邻接关系,其中空箭头没有定义的维度(即,不是零而是未定义,并且每当在需要时空箭头被特别地标记,这种情况通常非常少)。单个半边箭头具有维度零。可以与对象分开和明确地提及k-维单元格的维数,其中对象具有箭头可能是其一部分的维度n。因此,k=dim(c)表示单元格c的维度,并且n表示对象的维度。此外,0-单元格是顶点,1-单元格是边,2-单元格是多边形,3-单元格是多面体,等等。表1提供图元素和g-map元素以及他们的对应的对合之间的对应关系的列表。箭头或者被缝合在一起,或者在分离时没有被缝合,并且在邻接面的情况下,“共享的”边被分离使得每一个面具有其自己的定义该面的箭头的集合。由置换操作定义将箭头缝合在一起,并且置换算子从箭头构建组合图形。如本文所述的箭头具有另外两个性质。首先,箭头使用整数进行唯一标记。其次,箭头是指向通常是某种类型内容(例如,社交网络中的人的名字、或蛋白质结构中的原子的名称)的其它数据的指针。作为指针,箭头可以嵌入各种类型的数据。单箭头隐含地定义节点,并且箭头的嵌入定义了包含在节点中的数据,该数据可以包括其它组合对象或图形。因此,图形的拓扑结构与可以用作将几何或形状的特征连接到底层拓扑或构架的嵌入不同。120中的统一过程包括评估查询图和输入图之间的子图形同构。图8示出用于执行子图同构评估的过程800。使用上述方法,可以使用戈德尔数并使用基于树的编号对g-map进行编码。此外,可以使用我们可以在其上指定开放和闭合(轨道)作为箭头上的无不动点对合的箭头来将项代数项嵌入顶点或边的节点处。例如,就箭头而言,三角形是最小的闭合结构,而边是最小的开放结构。假定箭头通过对合的方式关于箭头的相邻箭头描述节点,使得循环确定闭合结构,那么有可能通过追溯箭头的对合来从组合图形重构图,而不管作为部分子图形的图大小、类型和形式;给定的箭头及其相关联的子结构(子图形和边)具有严格的次序(即,朝向)。因此,可以从有序的箭头组装唯一的有向图,并且该唯一的有向图始终是预期的(子)图。因此,为了找到子图形同构,方法800的步骤810将查询图转变成g-map。接下来,方法800的步骤820从对应于查询图的g-map中提取对合,作为基元子图形的结合(即,大小“k”的分解将子图形表示为子树或循环或子图形)。在方法800的步骤830中,使用weisfeiler-lehman测试评估输入图和查询图的子图形之间的同构。如果weisfeiler-lehman测试表明子图形是同构的,那么返回真(true)值。否则返回假(false)值。比较输入图和查询图两者的各种子图形不是仅执行一次,而且使用迭代编码和遍历区域的双步算法重复多次。可以通过将输入图编译成基元子图形来定义基本组成模式的数据库。查询子图形可以使用箭头的变量,使得子图形是查询图式(schema)。通过基于使用weisfeiler-lehman测试的箭头的子子映射将子图形图式(schemata)与来自数据库的查询g-map统一来进行搜索。为了帮助搜索,可以使用图9所示的方法900来组装搜索索引。基于将匹配子图形编码到图的身份来建立搜索索引,并且索引子图形的集合用于处理其它查询,而无需weisfeiler-lehman测试所要求的统一步骤。在方法900的步骤910中,通过将边切割成箭头来分解输入图;在方法900的步骤920中,对于每一个顶点到边邻接,将这些标记为ea节点并且将到这些的箭头指定为原始图的新的子图形。在方法900的步骤930中,对于每一个三角形轨道,将这些指定为面到顶点到面邻接、将这些标记为fa节点、并且将到这些的箭头指定为原始图的新的子图形。在方法900的步骤940中,从图绘制的图形中的每一个k-单元格具有视作与另一个子图形相关的子图形。例如,边是子图形。此外,匹配面是子图形。此外,面可以具有子图形(诸如,超体积)作为面的子图形(即,面边邻接超体积)。在方法900的步骤950中,应用双步算法来迭代地编码和遍历子图形,并且继续直到匹配失败。在方法900的步骤910中,如果子图形结构上统一,那么上至匹配子图形(即,子图)的级别,图都是同构的。方法900提供搜索索引,输入图的子图形要与查询图对于该搜索索引进行比较。方法800补充方法900,因为方法800提供关于如何将输入图与查询图的子图形进行比较的指令,但是不包括关于要比较哪些子图形的指令。因此,方法800和900一起工作以执行过程120的功能。此外,本文描述的方法可以与表示网络流的图一起使用。网络流(即,具有包含有向流的边的图)由四个箭头的对表示,并且图由一对箭头表示。令x为有限集,并且k为由1、a、b和c表示的四个元素的克莱因组,其中c=ab。对于xex,集合kx={x,ax,bx,cx}被称为四角形单元格(quadricell)。图形的基本元素被称为箭头,并且每一个有向边由具有不同侧面和方向的四个箭头组成。对于无向图,一对表示边的箭头就足够。可以使用其中x是箭头的有限集的三元组(x,p,k)来表示表示网络流的组合图形m。因此,单个“边”图形由四个箭头表示。图的顶点由关于该顶点的箭头的循环置换描述:因此,图形的循环置换描述是由图形中所有顶点的箭头的有向遍历组成的序列。通常,一般存在可以被书写以描述给定图形的许多都不同的循环置换。因此,图形是由置换构成的组合结构,并且这些置换在本发明中由方法1000进行编码。在方法1000的步骤1010中,使用作为标签的唯一整数来枚举所有箭头。在方法1000的步骤1020中,根据公式a2=b2=c2=1和c=ab=ba对箭头整数值的循环置换中的每一个进行编码,其中h是v上的置换,使得p的每一个轨道由ip0的如(x,px,...,pix)和(ax,ap_1x,...,ap_ix)的共轭对组成,并且由{p,a,b}生成的组在v上是传递的。如上所述,可以使用方法100编码项代数项。因此,代替步骤110将图数据编码为整数代码,使用戈德尔数编码是项代数的项(以下称为项代数项)的函数。此外,子图形(即,项树)之间的比较是参数与函数的参数的参数之间的比较。例如,函数f(x,g(a,0,x),[1,2])是项代数项,并且如果f(x,g(a,0,x),[1,2])被表示为项树,那么g(a,0,x)将对应于将是f(x,g(a,0,x),[1,2])的子图形的项树。此外,x是f(x,g(a,0,x),[1,2])的参数,并且x也是f(x,g(a,0,x),[1,2])的参数的参数。因此,从f(x,g(a,0,x),[1,2])的项树导出的项图将是循环的。图11示出当使用项代数而不是图数据时对应于方法100的过程110的过程110"。过程110的步骤1105正在生成项树的规范表示。图12示出函数(例如,f(a,g(b,x),h(x,10)))可以被分为两个部分。第一部分是表示参数的结构的括号结构(即,构架)。第二部分是内容。在步骤1110中,使用双射基-k对内容进行编码。如图12所示,串可以被表示为双射基-k中的数,其中k是字母表的大小。因此,如图12所示,通过在ascii码上执行数组合(例如,使用上述康托尔配对函数),可以使用单词和作为ascii码的其字母表的列表之间的双射来导出数n。在步骤120中,ascii码串的双射编码被整合为单个数。在步骤1130中,由括号表示的catalan构架被转换成如图12底部所示的项树。在步骤1140中,执行catalaon构架的双射编码。例如,这种双射编码可以是为catalan架构项计算的无不动点对合。执行catalan架构项树的双射编码,生成表示catalan架构项树的单个数。在步骤1150中,执行例如无不动点对合的数对的数值组合,以生成表示catalan架构的拓扑的单个自然数。在步骤1160中,通过使用配对函数(诸如,上述cantor配对函数),通过将表示内容(也称为符号序列)的自然数与表示catalon架构的拓扑的自然数组合,生成单个自然数。在步骤1170中,将来自步骤1160的单个自然数表示为基于树的数。表示内容(内容也可以被称为符号序列)与表示catalon架构的拓扑的自然数组合。过程110"的函数可以由执行伪代码的操作符encodeterm执行:encodeterm:输入项树,输出代码将项转换为二进制括号语言,ps,作为拓扑和符号表,xs将ps转换为catalan代码,ns将xs转换为goedel代码,g使用配对函数将ns转换为n5配对n和g以输出代码为了确定项代数项之间的同构,项代数项的拓扑可以在项树中表示,并且项树的节点可以包括指向对应内容的指针,类似于包括指向对象的指针的g-map的箭头。此外,可以为项代数项的项树生成与g-map类似的项图。因此,数据可以嵌入到图形中,并且表示项代数项。每一个函子(functor)都被顶点取代,并且参数被关于顶点的箭头取代。嵌套项意味着一些箭头共享顶点。对于每一个唯一的原子集,执行唯一的整数的标记。项图是在运行时从已经被表示为组合图形的标准项代数项树动态编译的组合数据结构。项代数项树被转换为唯一整数图形,其中每一个元素被编码为自然数,并且每一个自然数表示项树的分支。项树(整数结构)与项代数项不同,但是是等效的重写并且被动态减少并预编译成项图。项图被表示为数的连通图形,这些数形成箭头向它们所起源于的原始符号项的嵌入。用于标记和表示图形的规范协议用于克服可以用于描述图形的循环置换的多样性。当箭头被嵌入有符号s(例如,内容)时,共享相同边的其它箭头也可以被嵌入并通过使用s进行描述。给定图形的广度优先遍历将把所访问的箭头的符号添加到根据访问顺序存储在队列中的符号序列中。用于确定箭头标签的方法在图13中使用伪代码示出。这种表示使得将被存储为与其它符号序列集合统一的项和多个项的符号序列变得等同于图形统一。因此基于图形的组合属性的符号序列的数并且自然数呈指数增长,并且因此简单的统一是不可行的。因此,子图形序列集合中的符号序列可以有利地被组织为项图。接下来,提供项树的性质和关系的定义。假定图形m和表示为子图形的组合数(combinadicnumber)d(m)的对应序列集,表示为tt(m)的项树m是组合数的有根树,使得:1)这个树中的每一个节点与表示记为sv的符号序列(结构看起来像刷或丛状图)的组合数相关联;2)让tt(m)中的每一个边从父引导到孩子;3)从根到节点的每条路径,例如v,与从根到节点的符号序列的自然数编码相关联;4)对于这个树中的任何节点v,与v的孩子相关联的数彼此不同;5)对于d(m)中的任何组合数,在这个树中存在节点v,使得s=sv;6)对于这个树中的任何节点v,如果sv是常规序列,那么在d(m)中存在自然数s,使得s=sv;7)如果由与两个符号序列相关联的自然数表示的两个符号序列是相等的,那么两条路径是等效的;8)对于使得子树tu和tv相等的tt(m)中的任何两个节点u和v,从tt(m)中去除tu并且添加从u的置换到v的一条边;9)给定图形m和项树tt(m)以及项图tg(m),对于tt(m)中的任何路径p,在tg(m)中存在路径q,使得q等于p;10)项图的根是没有进入边的节点,并且图形的任何符号序列的第一个符号是“1”,这与和项图的根相关联的符号相同。基于以上项树的定义和描述,可以使用如图14和15所示的方法1400和1500分别写出项图表示。方法1400创建项树,并且方法1500创建项图。方法1400和1500两者都使用伪代码表示。在预处理中,执行为每一个模型图形构建对应的符号树。给定具有n条边的图形,最多存在o(2n)个连通的子图形以及存在表示子图形序列集合中的符号序列的o(n2n)个数。因此,在最坏的情况下,符号图的存储复杂度为o(n2(2n))个数。在平均情况下,对于其中数据中存在模式的结构化数据,组合复杂度要低得多。使用基于树的编号以及用于在树大小或位大小方面选择代码的规则,编号将是简洁的。图16所示的方法1600执行项图之间的统一过程。项图可以由图形表示。由方法1600执行的项图子图形统一操作检查是否存在与项图模式图形g的项子图统一(例如,同构)的模型图形m的项子图。如果g的根与m的项图中的第一项匹配,并且然后子项图同构算法匹配根的孩子中的第二项并且迭代地继续。实现了双循环,其中每一个迭代匹配操作迭代地沿项图下移。因此,方法1600以多项式时间工作,并且其计算复杂度为o(kn),其中n是模式图形中箭头的数量,并且k是模型图形的项图中的节点的最大度(degree)。如果k是有界的,那么方法1600的计算复杂度是线性的,并且在最坏的情况下为o(mn),其中m是模型图形中的箭头的数量。现在讨论基于树的编号。基于树的数被归纳地定义为项集合,使得:当且仅当x=e或x是以下谓词之一时,树数x是基于树的编号数据类型t的元素:v(t,ts)或w(t,ts),其中ts代表t的元素的有限序列(列表)。数据类型由具有以下规则的集合表示:(a)项e是空叶,并且对应于零;(b)定义函数o(x)=2x+1(c)定义函数i(x)=2x+2(d)将任何数定义为函数o和i应用到e的求值到数n的唯一序列(e)如下定义vw-树:(i)定义项v(t,ts)计数o应用的数量t+1(如从0开始计数),跟随着在ts中i和o应用的类似计数的交替。(ii)定义项w(t,ts)计数i应用的数量t+1,跟随着在ts中o和i应用的类似计数的交替。(f)使用项重写逻辑通过可逆谓词s(pred,succ)如下定义后继和前任,其中succ是pred的后继:s(e,v(e,[])).s(v(e,[]),w(e,[])).s(v(e,[x|xs]),w(sx,xs))→s(x,sx).s(v(t,xs),w(e,[p|xs]))→s(p,t).s(w(t,[]),v(st,[]))→s(t,st).s(w(z,[e]),v(z,[e])).s(w(z,[e,y|ys]),v(z,[sy|ys]))→s(y,sy).s(w(z,[x|xs]),v(z,[e,sx|xs]))→s(sx,x).(g)恒等式是:on(k)=2n(k+1)-1in(k)=2n.(k+2)-2on(0)=2n-1in(0)=2(n+1)-2ok(x)+ok(y)=ik(x+y)ok(x)+ik(y)=ik(x)+ok(y)=ik.(x+y+1)-1ik(x)+ik(y)=ik.(x+y+2)-2(h)从树到自然数的双射:表2示例:对于函数n(t,n),其中t是项,n是数,因此,n=42。关于o和i的运算符的示例:0=e;1=o(e);2=i(e);3=o(o(e));4=i(o(e));5=o(i(e))作为树的示例:0=e,1=v(e,[]),2=w(e,[]),3=v(v(e,[]),[]),4=w(e,[e]),5=v(e,[e])给定n=20,因此,对应的树项是:w(e,[e,e,e])。因此,对应的树项是:v(v(v(v(v(e,[]),[]),[]),[]),[])。(i)项树:以下函数t(x)定义相关联到数的树表示:如果x=0,那么t(x)=e如果x>0并且x是奇数,那么如果x>0并且x是偶数,那么(j)关于o和i的树变换:o(e,v(e,[])).o(w(x,xs),v(e,[x|xs])).o(v(x,xs),v(sx,xs)):-s(x,sx).i(e,w(e,[])).i(v(x,xs),w(e,[x|xs])).i(w(x,xs),w(sx,xs)):-s(x,sx).(k)两个数a和b的乘法:on(a)om(b)=o(n+m).(ab+a+b)-on(a)-om(b)(l)减法如果x>y那么ok(x)-ok(y)=ok.(x-y-1)+1如果x>y+1那么ok(x)-ik(y)=ok.(x-y-2)+2如果x≥y那么ik(x)-ok(y)=ok.(x-y)如果x>y那么ik(x)-ik(y)=ok.(x-y-1)+1可以通过结构归纳证明保有peano公理,并且{t,e,s}是peano代数。因此,这些定义也可以递归地应用于计数器(i和o),直到达到空序列。因此,可以在基于树的编号上执行所有的算术运算。此外,当它们被扩展到大的非平衡二叉树时,本文描述的基于树的编号相反可以有利地处理指数塔的线性组合,诸如2x-1。o和i的n次迭代的恒等式:如果k>0,那么1+on(k-1)=2nk;如果k>1,那么2+in(k-2)=2nk并且,on(k)=2n(k+1)-1其中on(0)=2n-1;in(k)=2n(k+2)-2其中,in(0)=2n+1-2,并且此外,对于k,on(k)+2n=in(k)+1;in(k)=on(k)+on(0);on(k+1)=in(k)+1如本发明前面所定义的,给定o(x)=2x+1并且i(x)=2x+2,那么设置s(x)=x+1并且s′(x)=x-1,其中我们设置:on(k)=s(in(s′(k)));in(k)=s′(on(s(k)))以下将后继和前任关联到o和i的迭代应用:s(on(k))=i(os′(n)(k));s(in(k))=on(s(k))s′(on(k))=in(s′(k));s′(in(k))=o(is′(n)(k))本文描述的基于树的数将计算的可追溯性提高到由其操作数的表示大小限制,而不是由受本地处理器限制的位大小限制。基于树的数用于简洁地表示稀疏或密集列表、集合和多集。这提供数据类型的双射大小成比例的戈德尔编号。存储和检索以及经网络数据的传输将通过两个参数进行压缩和选择:或者通过树大小或者通过位大小:如果位大小明显大于树大小,那么基于树的数将用于编码数据结构的数的表示,否则,将使用普通的位串。在基于树的数的情况下,如下使用自定界的3位代码:表3二进制代码表示000e001v010w011(100)101[110]111,代码是自定界的,因为括号可以被计数,因为始终存在左括号和右括号对。可以使用某种形式的计算机处理器或处理电路系统来实现本发明的上述每一个算法和过程以及特征中的每一个,例如,使用特别编程的处理电路系统。电路系统可以被特别设计或编程以实现上述功能和特征,这些功能和特征提高了电路系统的处理,并且允许数据以不可能由人或甚至缺乏本实施例的特征的通用计算机的方式处理。如本领域普通技术人员将认识到的,计算机处理器可以被实现为离散的逻辑门,如专用集成电路(asic)、现场可编程门阵列(fpga)或其它复杂可编程逻辑器件(cpld)。fpga或cpld实现可以以vhdl、verilog或任何其它硬件描述语言进行编码,并且代码可以直接存储在fpga或cpld内的或者作为单独的电子存储器的电子存储器中。此外,电子存储器可以是非易失性的,诸如rom、eprom、eeprom或flash存储器。电子存储器也可以是易失性的,诸如静态ram或动态ram,并且可以提供处理器(诸如,微控制器或微处理器)来管理电子存储器以及fpga或cpld与电子存储器之间的交互。可替代的,计算机处理器可以执行包括执行本文描述的功能的一组计算机可读指令的计算机程序,该程序被存储在上述非瞬态电子存储器和/或硬盘驱动器cd、dvd、闪存驱动器或任何其它已知的存储介质中的任何一种中。此外,计算机可读指令可以作为结合处理器(诸如,来自美国intel的xenon处理器或来自美国amd的opteron处理器)和操作系统(诸如,microsoftvista、unix、solaris、linux、apple、mac-osx以及本领域技术人员已知的其它操作系统)执行的实用应用、后台守护程序、或操作系统的组件或其组合提供。此外,可以使用基于计算机的系统1701来实现本发明。可以由一个或多个处理电路来实现上述实施例的功能中的每一个功能。处理电路包括被编程的处理器(例如,图17中的处理器1703),因为处理器包括电路系统。处理电路还包括诸如专用集成电路(asic)和被布置成执行所述功能的常规电路部件的设备。上述讨论的各种特征可以由计算设备(诸如,计算机系统(或可编程逻辑))来实现。图17图示了这种计算机系统1701。图17的计算机系统1701可以是特定的专用机器。在一种实施例中,当处理器1703被编程为计算向量缩并时,计算机系统1701是特定的专用机器。计算机系统1701包括耦合到总线1702以控制用于存储信息和指令的一个或多个存储设备的盘控制器1706,该一个或多个存储设备诸如磁硬盘1707和可移除介质驱动器1708(例如,软盘驱动器、只读紧凑型盘驱动器、读/写紧凑型盘驱动器、紧凑型盘自动点唱机(jukebox)、带驱动器和可移除磁光驱动器)。可以使用适当的设备接口(例如,小型计算机系统接口(scsi)、集成设备电子器件(ide)、增强型ide(e-ide)、直接存储器访问(dma)或超-dma)将存储设备添加到计算机系统801。计算机系统1701还可以包括专用逻辑器件(例如,专用集成电路(asic))或可配置逻辑器件(例如,简单可编程逻辑器件(spld)、复杂可编程逻辑器件(cpld)和现场可编程门阵列(fpga))。计算机系统1701还可以包括耦合到总线1702以控制用于向计算机用户显示信息的显示器1710的显示控制器1709。计算机系统包括输入设备(诸如,键盘1711和定点设备1712),用于与计算机用户交互并向处理器1703提供信息。定点设备1712例如可以是鼠标、轨迹球、用于触摸屏传感器的手指、或用于向处理器1703传达方向信息和命令选择以及用于控制在显示器1710上的光标移动的定点杆。处理器1703执行包含在存储器(诸如,主存储器1704)中的一条或多条指令的一个或多个序列。这些指令可以从另一个计算机可读介质(诸如,硬盘1707或可移除介质驱动器1708)读入到主存储器1704中。也可以利用多处理布置中的一个或多个处理器执行包含在主存储器1704中的指令序列。在替代实施例中,可以使用硬连线电路系统代替软件指令或硬连线电路系统可以与软件指令组合使用。因此,实施例不限于硬件电路系统和软件的任何特定组合。如上所述,计算机系统1701包括至少一个计算机可读介质或存储器,所述至少一个计算机可读介质或存储器用于保存根据本公开的任何教导编程的指令和用于包含本文所述的数据结构、表、记录或其它数据。计算机可读介质的示例是紧凑型盘、硬盘、软盘、带、磁光盘、prom(eprom、eeprom、闪存eprom)、dram、sram、sdram或任何其它磁介质、紧凑型盘(例如,cd-rom)或任何其它光学介质、穿孔卡、纸带或具有孔模式的其它物理介质。存储在计算机可读介质中的任何一个上或其组合上,本公开包括用于控制计算机系统1701、用于驱动用于实现本发明的一个或多个设备、以及用于使得计算机系统1701能够与人类用户交互的软件。这样的软件可以包括但不限于设备驱动程序、操作系统和应用软件。这样的计算机可读介质还包括用于执行在实现本发明的任何部分中执行的处理的全部或部分(如果处理是分布式)的本公开的计算机程序产品。本实施例的计算机代码设备可以是任何可解释或可执行的代码机制,包括但不限于脚本、可解释程序、动态链接库(dll)、java类和完整的可执行程序。此外,为了更好的性能、可靠性和/或成本,本实施例的处理的部分可以是分布式的。本文所使用的术语“计算机可读介质”是指参与向处理器1703提供指令用于执行的任何非瞬态介质。计算机可读介质可以采取许多形式,包括但不限于,非易失性介质或易失性介质。非易失性介质包括例如光盘、磁盘和磁光盘,诸如硬盘1707或可移除介质驱动器1708。易失性介质包括动态存储器,诸如主存储器1704。相反,传输介质包括同轴电缆、铜线和光纤,包括构成总线1702的电线。传输介质也可以采取声波或光波(诸如,在无线电波和红外数据通信期间所生成的那些波)的形式。将一条或多条指令的一个或多个序列携带出到处理器1703中用于执行可以涉及各种形式的计算机可读介质。例如,指令最初可以被携带在远程计算机的磁盘上。远程计算机可以将用于实现本公开的全部或部分的指令加载到动态存储器中,并使用调制解调器通过电话线发送指令。计算机系统1701本地的调制解调器可以接收电话线上的数据并将数据放置在总线1702上。总线1702将数据携带到主存储器1704,处理器1703从中检索并执行指令。由主存储器1704接收到的指令可以可选地在由处理器1703执行之前或之后存储在存储设备1707或1708上。计算机系统1701还包括耦合到总线1702的通信接口1713。通信接口1713提供耦合到网络链路1714的双向数据通信,该网络链路1714连接到例如局域网(lan)1715或者连接到另一个通信网络1716,诸如互联网。例如,通信接口1713可以是附接到任何分组交换lan的网络接口卡。作为另一个示例,通信接口1713可以是综合业务数字网(isdn)卡。也可以实现无线链路。在任何这样的实现中,通信接口1713发送和接收携带表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。网络链路1714通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路1714可以通过本地网络1715(例如,lan)或通过由服务提供商操作的装备来提供与另一个计算机的连接,该服务提供商通过通信网络1716提供通信服务。本地网络1714和通信网络1716使用例如携带数字数据流的电信号、电磁信号或光信号以及相关联的物理层(例如,cat5电缆、同轴电缆、光纤等)。可以在基带信号或基于载波的信号中实现通过各种网络的信号以及在网络链路1714上并且通过通信接口1713的信号,所述信号携带去往和来自计算机系统1701的数字数据。基带信号将数字数据作为描述数字数据位流的未调制电脉冲运送,其中术语“位”要被广义地解释为表示符号,其中每一个符号运送至少一个或多个信息位。数字数据还可以用于调制载波,诸如在传导介质上传播或者通过传播介质作为电磁波传输的幅度键控信号、相位键控信号和/或频移键控信号。因此,数字数据可以通过“有线”通信信道作为未调制的基带数据发送和/或通过调制载波在与基带不同的预定频带内发送。计算机系统1701可以通过(一个或多个)网络1715和1716、网络链路1714和通信接口1713传输和接收包括程序代码的数据。此外,网络链路1714可以通过lan1715向移动设备1717(诸如,个人数字助理(pda)、膝上型计算机或蜂窝电话)提供连接。本实施例具有许多应用,包括但不限于搜索和识别数据中的模式。虽然已经描述某些实现,但是这些实现仅仅是作为示例给出,并且不旨在限制本公开的教导。实际上,可以用各种其它形式体现本文描述的新颖方法、装置和系统;此外,在不脱离本公开的精神的情况下,可以对本文描述的方法、装置和系统的形式做出各种省略、替换和改变。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1