进行数据压缩的方法、装置、系统和计算机程序产品与流程

文档序号:11234074阅读:498来源:国知局
进行数据压缩的方法、装置、系统和计算机程序产品与流程

本发明涉及数据库领域,特别涉及一种利用前缀树进行数据压缩的方法、装置、系统和计算机程序产品。



背景技术:

数据检索(dataretrieval)是指通过数据库管理系统(dbms)从数据库中获得数据的处理。不同类型的数据存储形式适用于不同类型的应用,并且一些类型的存储形式则特别适用于执行特定的处理任务。

例如,树形结构是一种普遍采用的非线性数据存储形式,其通过一组相连的结点的形式表示,以便于描述具有分支和层次特性的数据集合。

在树形结构中,经常会用到以下基本术语:

根结点:树中位于顶端的结点;

子结点:沿着离开根结点的方向,直接与前一结点相连的结点;

父结点:与子结点对应的结点;

后代结点:通过重复地由一父结点前往一子结点可达的结点;

祖先结点:通过重复地由一子结点前往其父结点可达的结点;

叶结点/外部结点:没有子结点的结点;

内部结点:具有至少一个子结点的结点;

边:从父结点到子结点的连接;

子树:由树中的一个结点及其全部后代结点组成的树。

以下介绍数据压缩领域的近期发展。

前缀树

前缀树(又称trie树、字典树)是一种类型的树形结构。在前缀树中,一个结点的全部后代结点具有相同的前缀,该前缀即为关联于该结点的字符串(根结点对应于空的字符串)。并且,在前缀树中,结点并不存储与其关联的键,而是通过其在树中所处的位置来定义与其关联的键,每个结点都对应从其父结点链接过来的边。

一个标准的前缀树具有以下基本性质:1)根结点无对应的边(每条边包含一个字符),除根结点外每一个结点都对应一条边(从而包含一个字符);2)一个结点包含的字符在其对应的边上标注,从根结点到某一结点的路径(即,对应的一组边)上经过的字符连接起来,为该结点对应的字符串(即,键);3)每个结点的所有子结点包含的字符都不相同。

图1示出了前缀树的一个实例,该前缀树由abc、abcd、abd、b、bcd、efg、hii这7个字符串构成。图中双圈结点表示该节点具有终止状态(即前缀树中存在与该节点对应的字符串),单圈结点表示该节点不具有终止状态。

前缀树支持以下基本操作。

正向搜索:指在前缀树中搜索一个已知的字符串。从根结点开始,搜索字符串的第一个字符,并根据该字符对应的边转到相应的子树继续进行搜索;在相应的子树上,搜索字符串的第二个字符,并进一步选择相应的子树进行搜索;进行迭代操作,直到在某个结点处,如果所有字符都被找到,则读取附在该结点上的信息,完成搜索,否则表示未搜索到字符串。

反向搜索:指在前缀树中恢复一个位置已知的字符串。从前缀树中的任意结点开始,根据已知的路径指示沿着从子结点到父结点的方向至根结点,从而恢复出一个字符串,然后对该字符串进行反转,就可以得到与从根结点到该子结点的路径匹配的字符串。

插入:首先,根据要插入的字符串通过正向搜索找到需要插入的结点位置。如果与要插入的字符串对应的路径在前缀树中不存在,则在找到的结点位置处创建与该字符串的其余字符对应的新结点;如果路径在前缀树中存在,则将对应的结点设置为具有终止状态(即表示存在对应的字符串)。

删除:首先,根据要删除的字符串找到需要删除的结点位置。如果找到的结点是叶结点,则迭代地删除对应的各叶结点;如果找到的结点是内部结点,则将该结点设置为不具有终止状态(即表示不存在对应的字符串)。

需要说明的是,在传统使用指针方式表达的前缀树中,一般仅保存从父节点指向子结点的指针,因此仅支持正向搜索操作。如果在这种实现方式中还需要支持反向搜索操作,则还需要额外增加从子结点指向父结点的指针,占用更多的存储空间。

前缀树可以用于代替哈希表等其他类型的数据存储方式,并且可以高效地实现对字典类数据的存储和利用。前缀树利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较。然而,如果存在大量字符串且这些字符串基本没有公共前缀,则相应的前缀树将非常消耗存储空间。

压缩前缀树

为了提高前缀树的空间利用率,可以对前缀树进行压缩。一种可行的压缩方式是对前缀树中的边进行压缩,即对前缀树中的满足预定要求的结点进行合并。这种形式的前缀树可以称为patricia(practicalalgorithmtoretrieveinformationcodedinalphanumeric)型前缀树。

patricia型前缀树对结点空间进行了优化。具体而言,在这种类型的前缀树中,如果一个结点是另一个结点唯一的子结点,则可以将这两个结点合并为一个结点。因此,在经结点合并后,patricia型前缀树中的一些边是使用多个字符构成的字符串来标注的。

图2示出了patricia型前缀树的一个实例,该前缀树由romane、romanus、romulus、rubens、ruber、rubicon、rubicundus等7个字符串构成。可以看到在该前缀树中,根据上述合并条件对边进行了压缩,例如,在经过合并后,叶结点5与其父结点1之间的压缩边用字符串“ulus”来标注。需要说明的是,在一些实现方式中,可以对合并条件进行额外的限定,例如,只有当合并后的结点对应的边上的字符数目达到预定值时才进行合并。

patricia型前缀树适用于字符串集合中的字符串具有较长的相同前缀的情况。例如,patricia型前缀树特别适用于在ip路由领域中对ip地址进行管理。

succinct型数据压缩

succinct是近年来提出的一种无损数据压缩方法。通过数据压缩,使用接近信息论下边界的存储空间量,同时仍然可以实现高效的查询操作。区别于传统的无损数据压缩算法,succinct型数据压缩在不实现解压的前提下仍然具有可以随时使用这些数据的能力。

可以从空间复杂度的角度来定义succinct型数据压缩:假设根据信息论,为了存储某一数据所需要的最少比特数为z,那么succinct型数据压缩占用的存储空间为z+o(z)个比特,其中,o(z)表示空间复杂度。继续这个例子,则使用或z+lgz个比特来存储数据的方法都属于succinct型数据压缩方法。

succinct型的可索引(indexable)字典(也被称为rank/select字典)是多种succinct型表达方式的基础。在这种字典中,存储了空间u=[0...n)={0,1,...,n-1}的子集s,s一般被表示为比特数组b[0...n),其中,当且仅当i∈s时,b[i]=1。

上述succinct型可索引化字典支持rank和select两种操作:

rank操作的表达式为rankq(x)=|{k∈[0...x]:b[k]=q}|;

select操作的表达式为selectq(x)=min{k∈[0...n):rankq(k)=x};

其中,q∈{0,1}。

rankq(x)操作的返回值为0至x元素中值为q的元素的个数;

selectq(x)操作的返回值为第x个值为q的元素的位置。

如上文所述,succinct型的可索引化字典是多种succinct型表达方式的基础,这些表达方式包括二叉树、k叉树、多重集合、后缀树/后缀数组等。以一个具有n个结点的二叉树为例,可以采用2n+o(n)个比特来表示succinct型的二叉树。

louds型前缀树

louds(level-orderunarydegreesequence)型前缀树是一种使用succinct方式表达的前缀树。在louds型前缀树中,不使用指针来表示结点的位置,而是使用比特数组串来对结点进行编码,从而实现树形结构的高效率表达。

可以通过以下方式来构建louds比特数组串。从根结点出发,以宽度优先的方式遍历一个前缀树(即,先遍历位于同一层各个结点,然后再前进到下一层的结点)。当发现一个结点具有d个子结点时,使用d个1和和一个0来表示该结点。相应地,叶结点可以一个0来表示。此外,还将一个前缀10添加到louds比特数组串中,该前缀用于表示指向根结点的虚拟超结点。由此可见,louds型前缀树使用2n+1个比特来表述树形结构。图3示出了根据上述规则构建的louds型前缀树的一个实例。

此外,louds型前缀树还使用n个比特的数组(即succinct型数据压缩中的数组b)来存储各个结点是否具有终止状态(即对应的字符串是否存在)。由此可见,可以使用louds表达方式来实现包括patricia型前缀树在内的任一前缀树的树形结构,并且louds表达方式实现的前缀树满足succinct型数据压缩的存储空间要求,即z+o(z)。进一步地,对于一个不包含压缩边的前缀树而言,还可以采用n个字节(使用其中的n-1个字节)的数组来存储各个边上的转移字符。

louds型前缀树通过succinct型数据压缩中的rank和select操作支持查找任意结点的父结点(getparent)和子结点(getnthchild)。相应地,通过查找子结点的操作可以实现正向搜索功能,并且通过查找父结点的操作可以实现反向搜索的功能。

通过以上描述,本领域技术人员能够理解,可以采用结点合并的方式对前缀树进行压缩,并且可以采用louds表示方法来表达前缀树的树形结构,以实现高效率的正向搜索和反向搜索功能。

然而,在经过结点合并的前缀树中依然有可能存在冗余。继续图2中的例子,可以发现,0号结点到6号结点的压缩边上的字符串“ub”、1号结点到5号结点的压缩边上的字符串“ulus”、2号结点到4号结点的压缩边上的字符串“us”、10号结点到12号结点的压缩边上的字符串“undus”之间具有相同的前缀“u”,类似地,其中的字符串“om”与“on”之间具有相同的前缀“o”。因此,如果能够进一步消除压缩前缀树中的冗余,则可以进一步节约压缩前缀树的存储空间。



技术实现要素:

本发明所要解决的技术问题在于:如何进一步消除压缩前缀树的数据冗余,以提高压缩前缀树的存储空间利用率。为了解决上述技术问题,本发明提供的具体技术方案如下。

根据本发明的一种对数据进行压缩的方法包括以下步骤:为第一字符串集合创建第一前缀树,其中所述第一字符串集合包括多个原始字符串,其中前缀树由父-子结点关系连接的多个结点构成,前缀树的每条边表示包含至少一个字符的字符串,该字符串对应于从该条边的父结点到子结点的状态转移;把所述第一前缀树中的边所对应的、长度至少为2的字符串作为第一字符串子集;当所述第一字符串子集中的任一字符串满足预定条件时,将该字符串分割为二个或多个字符串片段,所述字符串片段与所述第一字符串子集中未被分割的字符串一起形成分割字符串集合;使用所述第一前缀树和所述分割字符串集合来保存所述第一字符串集合,以利用原始字符串之间的冗余而实现数据压缩。本发明还提供了对数据进行压缩的装置、系统和计算机程序产品。

附图说明

图1示出了示例性的标准前缀树。

图2示出了示例性的压缩前缀树。

图3示出了示例性的louds型前缀树。

图4示出了示例性的嵌套结构中的一个内层压缩前缀树。

图5示出了示例性的嵌套结构中的另一个内层压缩前缀树。

图6示出了由检索词和url列表组成的示例性字符串集合。

图7示出了与所述字符串集合对应的压缩前缀树。

图8示出了与所述字符串集合对应的一个内层压缩前缀树。

图9示出了根据本发明的数据压缩方法的流程图。

图10示出了对压缩字符串集合进行分割后的结果。

图11示出了与分割后的压缩字符串集合对应的一个第二层压缩前缀树。

图12示出了对压缩字符串集合进行翻转后的结果。

图13示出了与翻转后的压缩字符串集合对应的一个第三层压缩前缀树。

图14示出了示例性的最内层字符串数组。

图15示出了使用所述最内层字符串数组来表示多个字符串的示例。

图16示出了根据本发明的一个数据压缩系统的框图。

具体实施方式

以下结合附图通过实施例的形式来描述本发明的具体实施方式,以便于本领域技术人员理解本发明的目的、技术方案和优点。本领域技术人员可以理解,以实施例的形式描述的具体实施方式仅仅是示例性的,而在不具备这些具体内容的情况下也能够实现本专利的发明构思。

如上文所述,在经过结点合并的patricia型前缀树中依然有可能存在冗余,针对这一问题可以进一步通过嵌套(nest)的方式对前缀树进行优化。

在进行嵌套操作时,先根据一个初始的字符串集合strset1创建一个patricia型前缀树(压缩前缀树1),并将该压缩前缀树中压缩边上的字符串收集起来,构成另一个字符串集合strset2。然后,基于字符串集合strset2创建另一个内层的patricia型前缀树(压缩前缀树2),并将压缩前缀树1中所收集的边对应的结点关联到压缩前缀树2中的相应结点。通过以上方式可以获得具有一层嵌套关系的patricia型前缀树。

图4示出了基于图2所示的patricia型前缀树(压缩前缀树1)进行嵌套操作后生成的一个内层patricia型前缀树(压缩前缀树2)。具体而言,在创建压缩前缀树2时,先提取前缀树1中具有两个或更多个字符的边上对应的字符串om、ub、ulus、an、ic、us、ns、on、undus并生成字符串集合strset2。然后可以基于字符串strset2以递归的方式生成压缩前缀树2。在压缩前缀树1所提取字符串对应的结点处可以保存指向压缩前缀树2中对应结点(例如,叶结点)的指针(例如,一个整数id),以用于从前缀树2中进行反向搜索(即,从叶结点往根结点的方向前进),得到相应的字符串。在一些实施例中,如果压缩前缀树2中依然存在较长的边,则可以通过上述方式继续执行嵌套操作,以生成更内层的压缩前缀树。

另外,在一些类型的数据中,字符可能具有较多的相同后缀(例如,汉语拼音tang、zhang、wang等等)。针对这种情况,可以先将各个字符串翻转,然后基于由翻转后的字符串组成字符串集合来生成内层的压缩前缀树。继续上面的例子,作为一种实现方式,在生成压缩前缀树2之前可以先将所提取的各个字符串翻转得到由mo、bu、sulu、na、ci、su、sn、no、sudnu组成的字符串集合strset2’,然后基于strset2’来生成压缩前缀树2’。图5示出了所生成的压缩前缀树2’,可以发现与压缩前缀树2相比,压缩前缀树2’中具有更多的相同前缀,从而可以进一步提高存储空间的利用率。本领域技术人员能够理解,上述的例子仅是示例性的,在实际情况中,由于字符串的数量更多,字符串翻转操作的作用将更为明显。

虽然与未经嵌套处理的patricia型前缀树相比,通过嵌套操作可以提高前缀树的空间利用率,但是在一些类型的应用中,如果一个压缩边上对应的字符串过长,那么仅仅通过嵌套操作可能依然无法有效提高patricia型前缀树的存储空间利用率。

举例而言,在统一资源定位符(url,即网址)搜索的应用中,可以采用搜索词加url列表的方式来存储数据,形如“搜索词\turl1url2url3…”,其中,\t表示一个tab字符,多个url之间则用空格分隔。图6中的表格示出了这种类型应用中数据的一个实例,其中包括由三个数据条目组成的字符串集合,每个条目构成一个长字符串,包括与一个人名搜索词对应的拼音串以及对应的多个url搜索结果。由于三个长字符串具有共同的前缀“xusong”,因此可以在创建前缀树时对应进行合并。

图7示出了基于上述三个数据条目创建的patricia型前缀树(压缩前缀树1)。如图7所示,三个字符串具有共同的前缀“xusong”,并且其中的两个字符串还具有共同的前缀“qin”。进一步地,图8示出了对压缩前缀树1执行嵌套操作后得到的内层patricia型前缀树(压缩前缀树2)。可以发现,由于在压缩前缀树2中三个长字符串不再具有相同的前缀,此时嵌套操作并未有效提高前缀树的空间利用率,同时由于需要额外的空间存储多个前缀树中结点之间的链接关系,因此可能会降低前缀树的空间利用率。

针对上述问题,可以先对字符串集合中的一些字符串进行分割,然后基于分割后的字符串来创建压缩前缀树。

图9示出了根据本发明的一个实施例的字符串集合压缩方法的流程图,其中包括步骤s901-s904。

步骤s901:为第一字符串集合创建第一前缀树,该第一字符串集合包括多个原始字符串。在一个实施例中,所述第一前缀树是patricia型前缀树,该前缀树由父-子结点关系连接的多个结点构成,并且前缀树的每条边表示包含至少一个字符的字符串,该字符串对应于从该条边的父结点到子结点的状态转移。

在另一个实施例中,在创建前缀树时,只有合并后结点对应的边包含的字符达到预定数目时,才将其作为一个字符串并将对应的结点合并,否则不对结点进行合并,此时对应的边仅包含一个字符。该预定数目可以根据具体实现方式灵活设定。本领技术人员不难理解,预定数目至少为2,并且优选地,可以将其设定为3或更大的值。

步骤s902:把所述第一前缀树中的边所对应的、长度至少为2的字符串作为第一字符串子集。

在所创建的前缀树中,经合并的结点对应的边上的字符串的长度至少为2,将这些字符串收集起来以生成一个字符串子集。如上文所述,可以先对这些字符串进行翻转,然后在基于翻转的字符串生成字符串子集。

步骤s903:当所述第一字符串子集中的任一字符串满足预定条件时,将该字符串分割为二个或多个字符串片段,并且所述字符串片段与所述第一字符串子集中未被分割的字符串一起形成一个分割字符串集合。

在一个实施例中,如果字符串子集中的一个字符串的长度达到预定值,则可以对其进行分割操作,以得到多个对应的字符串片段。在一个实施例中,可以把字符串中所包含的预定符号作为分割标记符来进行分割操作,举例而言,预定符号可以是一个或多个空格、tab符号、分号以及其他符号。在另一个实施例中,可以将字符串与预定字符串库进行匹配以寻找所述字符串中的匹配片段,从而可以将字符串分割为尽量长的与预定字符串库匹配的片段。本领域技术人员可以理解,上述字符串分割方式仅是示例性的,可以根据需要或者根据长字符串的特性采用不同的方式来进行分割。

步骤s904:使用所述第一前缀树和所述分割字符串集合来保存所述第一字符串集合,以利用原始字符串之间的冗余而实现数据压缩。

在一个实施例中,可以将所述分割字符串集合保存为字符串数组并结合所述第一前缀树来保存所述第一字符串集合。

在另一个实施例中,可以将所述分割字符串集合作为第二个字符串集合,通过类似于步骤s901和s902中的操作来创建第二前缀树和第二字符串子集,以保存所述分割字符串集合,从而在整体上基于由第一前缀树和第二前缀树组成的嵌套结构以及第二字符串子集来保存所述第一字符串集合。

在另一个实施例中,可以迭代地执行步骤s901-s904中的操作,以创建具有多个前缀树的多层嵌套结构,从而在整体上基于该嵌套结构以及对应的内层字符串集合来保存所述第一字符串集合。

以下继续结合图6中的示例性字符串集合进行描述。在这个例子中,通过上述步骤s901和s902得到的外层压缩前缀树1依然如图7所示。然后通过上述步骤s903对压缩前缀树1中的长字符串进行分割。这里,由于字符串中包含有作为分隔符的tab字符和空格,因此可以以这些分隔符作为分割标记,对长字符串进行分割。所得到的分割字符串集合如图10中的表格所示,其中,切分后的字符串“g”因为是单个字符串,所以不包括在分割字符串集合中。然后,在一个实施例中,通过上述步骤s904,基于分割字符串集合来创建第二层前缀树,如图11所示。从图11中可以发现,与不进行分割操作相比,通过对压缩边上的字符串进行分割,可以在分割后的字符串之间产生更多的相同前缀,因此在进行前缀树嵌套操作时,更有效地去除了字符串之间的冗余,进一步改善了空间利用效率。

另外,为了能够恢复分割前的子字符串,可以将前缀树中的对应结点进行关联,例如,可以在压缩前缀树1中的各个相应的结点处保存指向压缩前缀树2中对应的结点的指针,其中,压缩前缀树2中的结点关联于对应的字符串子集或分割字符串集合中的字符串。

接着上面这个例子,在得到压缩前缀树2后,如果压缩边上的字符串之间依然存在冗余,则可以继续通过以上各个步骤对该压缩前缀树执行嵌套操作,以得到压缩前缀树3。在这个例子中,由于url经常具有相同的后缀,因此可以先对压缩边上的子字符串进行翻转操作,使后缀变为前缀,然后再生成字符串的子集。翻转后得到的字符串子集如图12中的表格所示,通过翻转操作字符串之间具有了更多的相同前缀,并因此可以实现进一步地压缩。所生成的压缩前缀树3如图13所示。

本领域技术人员可以理解,以上结合由搜索词和url列表组成的字符串进行的描述仅仅是示例性的,本发明中提出的上述技术方案还可以应用于其他场景并保存具有不同特征的数据。举例而言,本发明还可以用于对即时通讯工具中的聊天记录进行高效保存,或者对新闻、书评、维基百科等网页文本内容进行高效保存。

另外,本领域技术人员还可以理解,根据本发明所创建的各个前缀树(例如,patricia型前缀树)均可以采用louds表达方式实现为louds型前缀树,从而通过其所支持的rank和select操作高效地实现对字符串的正向搜索和反向搜索。

在为原始字符串集合创建前缀树之后,所面临的另一个问题如何对最终得到的字符串子集进行高效保存。在本发明提出的技术方案中,可以利用集合中各个字符串之间的冗余来创建一个字符串数组,然后通过一个偏移量(offset)和一个长度值(length)在所创建的字符串数组中表示对应的字符串。

图14和图15示出了采用所提出的方法来保存一个具有20个字符串的集合的实例。具体地,图14示出了所创建的字符串数组,其长度为23个字节并且数组中的每个字符均顺序地具有对应的偏移量0-22。进一步地,图15中的表格示出了如何使用所创建的数组来表示集合中的20个字符串:每个字符串对应的偏移量标识了该字符串在字符串数组的起始位置,然后根据对应的长度值在数组中读取对应数目个字符,就可以获得对应的字符串。

通过这种方式可以显著提高字符串集合的存储效率。如果采用传统存储方式,对于每个字符串,均需要与该字符串中的字符数相等的字节数来存储这个字符串(例如,需要8个字节来存储computer),此外还需要一个额外的字节来存储这个字符串的长度。因此,在图15所示的例子中,传统存储方式一共需要169(149+20)个字节来保存这个字符串集合。对比而言,通过本发明所提出的方法,即使针对每个字符串使用二个字节来分别表示偏移量和长度,那么也仅仅需要63(23+20+20)个字节就可以保存这个字符串集合。另外,如果采用比特方式对偏移量和长度进行编码,则可以进一步节省用于表达每个字符串的存储空间。

类似地,在上文结合搜索词和url列表描述的例子中,可以通过所提出的方式来存储图13所示的内层前缀树中由各个压缩边对应的字符串组成的集合。

图16示出了根据本发明的一个实施例的数据压缩系统的框图。在一个实施例中,所述数据压缩系统包括:前缀树创建单元(201),其为第一字符串集合创建第一前缀树,其中所述第一字符串集合包括多个原始字符串,其中前缀树由父-子结点关系连接的多个结点构成,前缀树的每条边表示包含至少一个字符的字符串,该字符串对应于从该条边的父结点到子结点的状态转移,其中把所述第一前缀树中的边所对应的、长度至少为2的字符串作为第一字符串子集;判定/分割单元(202),当所述第一字符串子集中的任一字符串满足预定条件时,其将该字符串分割为二个或多个字符串片段,所述字符串片段与所述第一字符串子集中未被分割的字符串一起形成分割字符串集合;分割字符串保存单元(203),其保存所述分割字符串集合;前缀树保存单元(204),其保存所述第一前缀树。

进一步地,所述判定/分割单元(202)可以把所述第一字符串子集中的字符串所包含的预定符号作为分割标记符,基于分割标记符将所述字符串分割为二个或更多个分割字符串。

进一步地,所述判定/分割单元(202)可以把所述第一字符串子集中的字符串与预定字符串库进行匹配以寻找所述字符串中的匹配片段,并且将所述字符串分割为尽量长的与所述匹配片段相同的字符串片段。

在另一个实施例中,所述分割字符串保存单元(203)将所述分割字符串集合作为第二字符串集合提供给所述前缀树创建单元(201),以创建第二前缀树和第二字符串子集;所述分割字符串保存单元(203)保存所述第二字符串子集;所述前缀树保存单元(204)保存所述第二前缀树。

进一步地,所述前缀树保存单元(204)可以将所述第一前缀树的相应结点关联到所述第二前缀树的对应结点。

进一步地,所述数据压缩系统还包括:字符串数组保存单元(205),其把所述第二字符串子集保存为字符串数组,其中在所述字符串数组中,所述第二字符串子集中的各个字符串通过对应的偏移量和长度来表示。

在另一个实施例中,所述数据压缩系统还包括:原始数据提供单元(100),其将与所述第一字符串集合关联的原始数据提供给所述前缀树创建单元(201)。

在另一个实施例中,所述数据压缩系统还包括:压缩数据提供单元(300),其基于来自所述分割字符串保存单元(203)、前缀树保存单元(204)、字符串数组保存单元(205)的数据来提供压缩数据。

关于图16所示装置的其他实施例,可以参考图9所示的方法实施例,在此不再赘述。

需要说明的是,图16所示的结构框图仅仅为了示例的目的而示出的,并非是对本发明的限制。在一些情况下,可以根据需要添加或者减少其中的一些模块。并且请注意,本发明可以有效地实现于包括服务器、pc、移动计算设备在内的各种电子设备中,这些电子设备的具体结构框图在本说明书中不再赘述,本领域技术人员应该可以清楚地了解对应的实现方式。

本领域技术人员应当理解,结合本发明公开的各个实施例所描述的各种示例性的方法步骤和系统模块、单元、部件等均可以实现成电子硬件、计算机软件或二者的组合。为了清楚地表示硬件和软件的可交换性,上文中各种示例性的步骤和单元均围绕其功能进行了总体描述。至于这种功能是实现成硬件还是实现成软件,则取决于特定的应用和对整个系统所施加的设计约束条件。本领域技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应被解释为偏离了本发明的发明构思。

本发明说明书中使用的“示例/示例性”表示用作例子、例证或说明。除非明确表明,否则说明书中被描述为“示例性”的任何技术方案不应被解释为比其它技术方案更优选或更具优势。

本发明提供了对所公开的技术内容的详细描述,以使本领域技术人员能够实现或使用本发明。对于本领域技术人员而言,对这些技术内容的很多修改和变形都是显而易见的,并且本发明所定义的总体原理也可以在不脱离本发明的精神或范围的基础上适用于其它实施例。因此,本发明并不限于上文所示的具体实施方式,而是应与符合本发明公开的发明构思的最广范围相一致。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1