构造后缀数组的方法、终端设备及计算机可读存储介质
文献发布时间:2023-06-19 10:54:12
技术领域
本申请属于数据处理技术领域,尤其涉及一种构造后缀数组的方法、终端设备及计算机可读存储介质。
背景技术
后缀数组是通过对字符串的所有后缀进行排序后得到的一种用于表示排序后的各个后缀在字符串中的起始位置的数据结构,其常被应用于海量数据的全文索引和模式匹配等领域中。后缀数组的高效构造是使用后缀数组进行全文索引或模式匹配等的前提。现有技术已有多种构造后缀数组的方式,例如串行、并行及外存等构造方式,每种构造方式可以包括多种不同的后缀数组构造算法。
然而,每种后缀数组构造算法通常只能在特定的条件下表现出最优的性能,在其他条件下性能会变得相对较差甚至不适用,即每种后缀数组构造算法都有一定的局限性,现有技术无法根据使用场景自动选择出性能最优的后缀数组构造算法来构造后缀数组,导致后缀数组的构造效率较低。
发明内容
有鉴于此,本申请实施例提供了一种构造后缀数组的方法、终端设备及计算机可读存储介质,以解决现有技术无法根据使用场景自动选择出性能最优的后缀数组构造算法来构造后缀数组,导致后缀数组的构造效率较低的技术问题。
第一方面,本申请实施例提供一种构造后缀数组的方法,包括:
获取目标字符串的信息以及当前终端设备的信息;
确定与所述目标字符串的信息以及所述当前终端设备的信息相匹配的目标后缀数组构造方式;
获取所述目标后缀数组构造方式对应的样本集;所述样本集中的每条样本数据均由一个样本字符串对应的样本后缀数组构造条件以及适用于所述样本后缀数组构造条件的性能最优的后缀数组构造算法组成,所述样本后缀数组构造条件包括所述样本字符串的信息以及构造所述样本字符串的后缀数组时所使用的样本终端设备的信息;
从所述样本集中确定与所述目标字符串的信息以及所述当前终端设备的信息对应的性能最优的目标后缀数组构造算法;
采用所述目标后缀数组构造算法构造所述目标字符串的后缀数组。
可选的,所述目标字符串的信息包括所述目标字符串的字符串大小和重复度;
相应地,所述获取目标字符串的信息,包括:
获取所述目标字符串的字符串大小;
对所述目标字符串依次进行字符串分割操作和字符串采样操作,得到所述目标字符串的多个采样字符串;
采用预设的字符串相似度算法计算每两个所述采样字符串之间的第一相似度值,并基于所述第一相似度值确定所述目标字符串的重复度。
可选的,所述当前终端设备的信息包括所述当前终端设备的内核数目和内存容量;
相应地,所述确定与所述目标字符串的信息以及所述当前终端设备的信息相匹配的目标后缀数组构造方式,包括:
若所述目标字符串的字符串大小大于所述当前终端设备的内存容量,则将外存后缀数组构造方式确定为所述目标后缀数组构造方式;
若所述目标字符串的字符串大小小于或等于所述当前终端设备的内存容量,且所述当前终端设备的内核数目等于1,则将串行后缀数组构造方式确定为所述目标后缀数组构造方式;
若所述目标字符串的字符串大小小于或等于所述当前终端设备的内存容量,且所述当前终端设备的内核数目大于1,则将并行后缀数组构造方式确定为所述目标后缀数组构造方式。
可选的,所述从所述样本集中确定与所述目标字符串的信息以及所述当前终端设备的信息对应的性能最优的目标后缀数组构造算法,包括:
将所述目标字符串的信息以及所述当前终端设备的信息作为所述目标字符串对应的目标后缀数组构造条件;
从所述样本集中确定与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件;
基于与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件所适用的性能最优的后缀数组构造算法,确定所述目标后缀数组构造算法。
可选的,所述从所述样本集中确定与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件,包括:
计算所述目标后缀数组构造条件与所述样本集中的各个样本后缀数组构造条件之间的第二相似度值;
将满足预设条件的所述第二相似度值对应的样本后缀数组构造条件确定为与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件。
可选的,所述基于与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件所适用的性能最优的后缀数组构造算法,确定所述目标后缀数组构造算法,包括:
将与所述目标后缀数组构造条件相匹配的各个样本后缀数组构造条件所适用的性能最优的后缀数组构造算法中,占比最高的后缀数组构造算法确定为所述目标后缀数组构造算法。
可选的,所述构造后缀数组的方法还包括:
将所述目标后缀数组构造条件与所述目标后缀数组构造算法组成一条新的样本数据,并将所述新的样本数据添加至所述样本集中。
第二方面,本申请实施例提供一种终端设备,包括:
第一获取单元,用于获取目标字符串的信息以及当前终端设备的信息;
第一确定单元,用于确定与所述目标字符串的信息以及所述当前终端设备的信息相匹配的目标后缀数组构造方式;
第二获取单元,用于获取所述目标后缀数组构造方式对应的样本集;所述样本集中的每条样本数据均由一个样本字符串对应的样本后缀数组构造条件以及适用于所述样本后缀数组构造条件的性能最优的后缀数组构造算法组成,所述样本后缀数组构造条件包括所述样本字符串的信息以及构造所述样本字符串的后缀数组时所使用的样本终端设备的信息;
第二确定单元,用于从所述样本集中确定与所述目标字符串的信息以及所述当前终端设备的信息对应的性能最优的目标后缀数组构造算法;
后缀数组构造单元,用于采用所述目标后缀数组构造算法构造所述目标字符串的后缀数组。
第三方面,本申请实施例提供一种终端设备,所述终端设备包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面或第一方面的任意可选方式所述的构造后缀数组的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面或第一方面的任意可选方式所述的构造后缀数组的方法。
第五方面,本申请实施例提供一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面或第一方面的任意可选方式所述的构造后缀数组的方法。
实施本申请实施例提供的一种构造后缀数组的方法、终端设备、计算机可读存储介质及计算机程序产品具有以下有益效果:
本申请实施例提供的构造后缀数组的方法,通过获取目标字符串的信息以及当前终端设备的信息;先确定出与目标字符串的信息以及当前终端设备的信息相匹配的目标后缀数组构造方式;再获取目标后缀数组构造方式对应的样本集;由于样本集中的每条样本数据均由一个样本字符串对应的样本后缀数组构造条件以及适用于该样本后缀数组构造条件的性能最优的后缀数组构造算法组成,样本后缀数组构造条件包括样本字符串的信息以及构造该样本字符串的后缀数组时所使用的样本终端设备的信息;因此,可以根据目标字符串的信息以及当前终端设备的信息从目标后缀数组构造方式对应的样本集中确定出与目标字符串的信息以及当前终端设备的信息对应的性能最优的目标后缀数组构造算法,即本申请实施例可以根据目标字符串的信息以及当前终端设备的信息自动选择出与其相匹配的性能最优的目标后缀数组构造算法来构造目标字符串的后缀数组,从而提高了后缀数组的构造效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种构造后缀数组的方法的示意性流程图;
图2为本申请实施例提供的一种构造后缀数组的方法中S11的具体实现流程图;
图3为本申请实施例提供的一种构造后缀数组的方法中S14的具体实现流程图;
图4为本申请另一实施例提供的一种构造后缀数组的方法的示意性流程图;
图5为本申请实施例提供的一种终端设备的结构示意图;
图6为本申请另一实施例提供的一种终端设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
还应当理解,在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
为了便于理解,以下先对与本申请实施例相关的一些概念进行说明。
字符串:一个长度为n的字符串S是指由n个字符按一定规则排列形成的一维字符数组,可以表示为S=S[1]S[2]…S[n]。在具体应用中,字符串S通常以字典序最小的字符$结尾,即S[n]通常为字符$,例如,字符串S=banana$。
字符串的子串:可以表示为S[i,j]=S[i]…S[j],其中,1≤i≤j≤n,即S[i]到S[j]之间(包括S[i]和S[j])的所有字符组成的字符串S[i,j]为字符串S的子串。
字符串的后缀:可以表示为S[i,n]=S[i]…S[n],其中,1≤i≤n,一般记作suffix(i)。例如,字符串S=banana$的后缀可以如表1所示。
表1
字符串的后缀数组(suffix array,SA):是将字符串S的所有后缀按照字典序从小到大的顺序排列,并将所有后缀在字符串S中的起始位置按排列后的次序保存在一个整数数组里获得的数据结构。例如,将字符串S=banana$的所有后缀按照字典序从小到大的顺序排列后可以得到如表2所示的后缀。
表2
那么,字符串S=banana$的后缀数组SA[i]=[7 6 4 2 1 5 3],即SA[1]=7,SA[2]=6,SA[3]=4,SA[4]=2,SA[5]=1,SA[6]=5,SA[7]=3。
通常,对字符串的所有后缀进行排序以获得该字符串的后缀数组的过程即为构造该字符串的后缀数组的过程。现有技术提供了多种后缀数组构造方式,包括:串行后缀数组构造方式、并行后缀数组构造方式及外存后缀数组构造方式等。其中,串行后缀数组构造方式指终端设备在其内存中采用串行的方式构造后缀数组;并行后缀数组构造方式指终端设备在其内存中采用并行的方式构造后缀数组;外存后缀数组构造方式指终端设备在其外存中构造后缀数组。
上述每种后缀数组构造方式均包括多种不同的后缀数组构造算法。
例如,串行后缀数组构造方式包括:后缀数组诱导排序(suffix array inducesort,SA-IS)算法、libdivsufsort算法及后缀数组构造算法K(suffix arrayconstruction algorithm K,saca-k)等。其中,libdivsufsort算法指的是该后缀数组构造算法被封装为一个库,这个库的名称叫做libdivsufsort。
并行后缀数组构造方式包括:并行后缀数组诱导排序(parallel suffix arrayinduced sorting,psacak)算法、并行后缀数组构造算法K(parallel suffix array scanK,psaca-k)及并行的libdivsufsort算法(pdss)等。其中,K表示k个整数。
外存后缀数组构造方式包括:外部后缀数组诱导排序(external suffix arrayinduced sorting,esais)算法、n后缀数组诱导排序(n suffix array induced sorting,nsais)算法及并行后缀数组扫描(parallel suffix array scan,psascan)算法等。
通常,每种后缀数组构造算法只能在特定的条件下表现出最优的性能,在其他条件下性能会变得相对较差甚至不适用,即每种后缀数组构造算法都有一定的局限性,因此本申请实施例提供了一种构造后缀数组的方法,该方法可以根据待构造后缀数组的目标字符串对应的目标后缀数组构造条件,自动选择出与该后缀数组构造条件相匹配的性能最优的后缀数组构造算法来构造该目标字符串的后缀数组,从而提高了后缀数组的构造效率。
请参阅图1,图1为本申请实施例提供的一种构造后缀数组的方法的示意性流程图。本申请实施例中,该构造后缀数组的方法的执行主体为终端设备。在具体应用中,该终端设备可以是单核(即内核数目等于1)终端设备,也可以是多核(即内核数据大于1)终端设备。作为示例而非限定,该终端设备可以为手机、平板电脑或台式电脑等设备。
如图1所示,该构造后缀数组的方法可以包括S11~S15,详述如下:
S11:获取目标字符串的信息以及当前终端设备的信息。
本申请实施例中,目标字符串可以是任一需要构造后缀数组的字符串。当前终端设备指当前执行该构造后缀数组的方法的终端设备。
在一种可能的实现方式中,目标字符串的信息包括但不限于:目标字符串的字符串大小、目标字符串的字符集大小以及目标字符串的重复度。其中,目标字符串的字符串大小用于描述目标字符串所占的存储容量;目标字符串的字符集大小用于描述目标字符串中出现的字符的种类数,通常,字符集大小的最大取值为255。
终端设备的信息包括但不限于:终端设备的内核数目、终端设备的内存容量以及终端设备的外存容量。
在本申请的一个实施例中,终端设备的信息可以预先存储在终端设备本地的存储器中。基于此,终端设备可以从其本地的存储器中获取其上述信息。
在本申请的一个实施例中,终端设备获取目标字符串的信息的步骤具体可以通过如图2所示的S111~S114实现,详述如下:
S111:获取所述目标字符串的字符串大小。
本申请实施例中,终端设备可以调用python中的库函数直接获得目标字符串的字符串大小。
S112:对所述目标字符串依次进行字符串分割操作和字符串采样操作,得到所述目标字符串的多个采样字符串。
本实施例中,终端设备先对目标字符串进行字符串分割操作,将目标字符串分割为n份,每一份即为目标字符串的一个子串。其中,n为大于1的整数。
在一种可能的实现方式中,终端设备可以采用等分分割的方式将目标字符串分割为n份,这样,分割得到的每个子串的字符串大小相等。在另一种可能的实现方式中,终端设备可以采用不等分分割的方式将目标字符串分割为n份,这样,分割得到的不同子串的字符串大小可能相同,也可能不同。
终端设备得到目标字符串的n个子串后,可以对该n个子串进行字符串采样操作,即从该n个子串中采样m个子串,该m个子串中的每个子串即为目标字符串的一个采样字符串。其中,1≤m≤n,m为整数。
在一种可能的实现方式中,终端设备可以采用等间隔采样的方式从n个子串中采样m个子串,这样,采样得到的每相邻两个采样字符串之间所间隔的子串的个数相等。在另一种可能的实现方式中,终端设备可以采用不等间隔采样的方式从n个子串中采样m个子串,这样,采样得到的每相邻两个采样字符串之间所间隔的子串的个数可能相等,也可能不相等。
示例性的,假如目标字符串的字符串大小为10G,终端设备采用等分分割的方式将该目标字符串分割为100个子串,那么每个子串的字符串大小为0.1G。假如终端设备采用等间隔采样的方式从该100个子串中采样5个子串分别作为目标字符串的采样字符串,那么采样得到的5个采样字符串包括第1个子串、第20个子串、第40个子串、第80个子串及第100个子串。
S113:遍历所述采样字符串,确定所有所述采样字符串的字符集大小,将所有所述采样字符串的字符集大小确定为所述目标字符串的字符集大小。
本申请实施例中,为了提高后缀数组的构造效率,终端设备可以将目标字符串的采样字符串的字符集大小确定为目标字符串的字符集大小。
具体地,终端设备在得到目标字符串的采样字符串后,遍历目标字符串的采样字符串,确定所有采样字符串的字符集大小,并将所有采样字符串的字符集大小确定为目标字符串的字符集大小。
示例性的,假如目标字符串S=ahahahahahahahahshshshshbbbb,该目标字符串的采样字符串包括三个,分别为:aha、ahs、shb,由于这三个采样字符串包括的字符集的种类数为4,因此,这三个采样字符串的字符集大小为4,那么终端设备确定目标字符串的字符集大小为4。
S114:采用预设的字符串相似度算法计算每两个所述采样字符串之间的第一相似度值,并基于所述第一相似度值确定所述目标字符串的重复度。
本实施例中,终端设备得到目标字符串的多个采样字符串后,可以采用预设的字符串相似度算法计算每两个采样字符串之间的第一相似度值,得到多个第一相似度值,并基于该多个第一相似度值确定目标字符串的重复度。
在具体应用中,预设的字符串相似度算法包括但不限于:余弦相似度算法、矩阵相似度算法及字符串编辑距离算法。
以预设的字符串相似度算法为字符串编辑距离算法为例,字符串编辑距离算法通过计算两个字符串之间的编辑距离,并根据该编辑距离确定两个字符串之间的第一相似度值。其中,编辑距离指将两个字符串中的一个字符串转换为另一个字符串所需的最少编辑操作次数,编辑操作包括但不限于字符替换操作、字符添加操作以及字符删除操作。例如,第一字符串abc和第二字符串abed之间的编辑距离为2。字符串编辑距离算法通常采用公式1-d/maxlen来计算两个字符串之间的第一相似度值;其中,d为两个字符串之间的编辑距离,maxlen为两个字符串的长度的最大值。
例如,第一字符串abc的长度为3,第二字符串abed的长度为4,那么这两个字符串的长度的最大值为4,因此,采用字符串编辑距离算法计算得到的第一字符串abc与第二字符串abed的相似度为1-2/4=0.5。
在一种可能的实现方式中,终端设备计算出每两个采样字符串之间的第一相似度值后,可以将计算出的多个第一相似度值的均值确定为目标字符串的重复度。
需要说明的是,终端设备可以同时执行S112和S113;或者终端设备可以先执行S112再执行S113;或者终端设备可以先执行S113再执行S112,此处不对S112和S113的被执行次序进行限定。
S12:确定与所述目标字符串的信息以及所述当前终端设备的信息相匹配的目标后缀数组构造方式。
本申请实施例中,终端设备在构造目标字符串的后缀数组时,可以将目标字符串的信息以及当前终端设备的信息作为该目标字符串对应的目标后缀数组构造条件。
需要说明的是,不同的后缀数组构造条件所适用的后缀数组构造方式通常不同。本申请实施例中,终端设备中预先存储有每种后缀数组构造条件所适用的后缀数组构造方式。
作为示例而非限定,当后缀数组构造条件中的字符串的字符串大小大于终端设备的内存容量时,说明该终端设备的内存容量无法支撑该终端设备在其内存中完成对该字符串的后缀数组的构造,因此该后缀数组构造条件所适用的后缀数组构造方式通常为外存后缀数组构造方式。当后缀数组构造条件中的字符串的字符串大小小于或等于终端设备的内存容量,且终端设备的内核数目等于1时,说明该终端设备的内存容量可以支撑该终端设备在其内存中完成对该字符串的后缀数组的构造,但由于该终端设备为单核终端设备,其并行处理数据的能力较弱,因此该后缀数组构造条件所适用的后缀数组构造方式通常为串行后缀数组构造方式。当后缀数组构造条件中的字符串的字符串大小小于或等于终端设备的内存容量,且终端设备的内核数目大于1时,说明该终端设备的内存容量可以支撑该终端设备在其内存中完成对该字符串的后缀数组的构造,且由于该终端设备为多核终端设备,其并行处理数据的能力较强,因此该后缀数组构造条件所适用的后缀数组构造方式通常为并行后缀数组构造方式。
基于此,在本申请的一个实施例中,S12具体可以包括以下步骤:
若所述目标字符串的字符串大小大于所述当前终端设备的内存容量,则将外存后缀数组构造方式确定为所述目标后缀数组构造方式;
若所述目标字符串的字符串大小小于或等于所述当前终端设备的内存容量,且所述当前终端设备的内核数目等于1,则将串行后缀数组构造方式确定为所述目标后缀数组构造方式;
若所述目标字符串的字符串大小小于或等于所述当前终端设备的内存容量,且所述当前终端设备的内核数目大于1,则将并行后缀数组构造方式确定为所述目标后缀数组构造方式。
S13:获取所述目标后缀数组构造方式对应的样本集。
本申请实施例中,每种后缀数组构造方式均配置有对应的样本集。
其中,样本集包括多条样本数据,每条样本数据均由一个样本字符串对应的样本后缀数组构造条件以及适用于该样本后缀数组构造条件的性能最优的后缀数组构造算法组成。示例性的,性能最优的后缀数组构造算法可以指在该样本后缀数组构造条件下构造后缀数组时用时最短的后缀数组构造算法。
在具体应用中,样本后缀数组构造条件可以包括样本字符串的信息以及构造该样本字符串时所使用的样本终端设备的信息。其中,样本字符串的信息包括但不限于样本字符串的字符串大小、字符集大小及重复度。样本终端设备的信息包括但不限于样本终端设备的内核数目、内存容量及外存容量。
示例性的,以并行后缀数组构造方式为例,并行后缀数组构造方式对应的样本集可以如表3所示。
表3
本申请实施例中,终端设备确定了与目标字符串相匹配的目标后缀数组构造方式后,获取该目标后缀数组构造方式对应的样本集。
S14:从所述样本集中确定与所述目标字符串的信息以及所述当前终端设备的信息对应的性能最优的目标后缀数组构造算法。
在本申请的一个实施例中,S14具体可以通过如图3所示的S141~S143实现,详述如下:
S141:将所述目标字符串的信息以及所述当前终端设备的信息作为所述目标字符串对应的目标后缀数组构造条件。
S142:从所述样本集中确定与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件。
本实施例中,与目标后缀数组构造条件相匹配的样本后缀数组构造条件可以指,与目标后缀数组构造条件之间的第二相似度值满足预设条件的样本后缀数组构造条件。其中,预设条件可以根据实际需求设置,此处不做限制。
作为示例而非限定,预设条件可以为第二相似度值大于预设相似度值阈值,即与目标后缀数组构造条件相匹配的样本后缀数组构造条件指,与目标后缀数组构造条件之间的第二相似度值大于预设相似度值阈值的样本后缀数组构造条件。其中,预设相似度值阈值可以根据实际需求设置,此处不做限制。
在一种可能的实现方式中,目标后缀数组构造条件与样本后缀数组构造条件之间的第二相似度值可以通过目标后缀数组构造条件与样本后缀数组构造条件之间的欧氏距离或欧氏距离的平方表示。
基于此,S142具体可以包括以下步骤:
计算所述目标后缀数组构造条件与所述样本集中的各个样本后缀数组构造条件之间的第二相似度值;
将满足预设条件的所述第二相似度值对应的样本后缀数组构造条件确定为与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件。
本实施例中,当通过欧氏距离或欧氏距离的平方表示第二相似度值时,终端设备可以计算目标后缀数组构造条件与样本集中的各个样本后缀数组构造条件之间的欧氏距离或欧氏距离的平方,并将目标后缀数组构造条件与各个样本后缀数组构造条件之间的欧氏距离或欧氏距离的平方分别确定为目标后缀数组构造条件与各个样本后缀数组构造条件之间的第二相似度值。
在具体应用中,终端设备确定出的与目标后缀数组构造条件相匹配的样本后缀数组构造条件可以为一个,也可以为多个。
示例性的,假如目标后缀数组构造条件如表4所示。
表4
示例性的,假如终端设备计算出的目标后缀数组构造条件与表3中的各个样本后缀数组构造条件之间的欧氏距离的平方(即第二相似度值)以及每个样本后缀数组构造条件所适用的性能最优的后缀数组构造算法如表5所示。
表5
假如预设相似度值阈值为1,则大于预设相似度值阈值的第二相似度值对应的样本后缀数组构造条件包括样本字符串1对应的样本后缀数组构造条件、样本字符串3对应的样本后缀数组构造条件以及样本字符串4对应的样本后缀数组构造条件。
S143:基于与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件所适用的性能最优的后缀数组构造算法,确定所述目标后缀数组构造算法。
在本申请的一个实施例中,当与目标后缀数组构造条件相匹配的样本后缀数组构造条件为一个时,终端设备可以直接将该一个样本后缀数组构造条件所适用的性能最优的后缀数组构造算法确定为目标后缀数组构造算法。
在本申请的另一个实施例中,当与目标后缀数组构造条件相匹配的样本后缀数组构造条件为多个时,终端设备可以将该多个样本后缀数组构造条件所适用的性能最优的后缀数组构造算法中占比最高的后缀数组构造算法确定为目标后缀数组构造算法。
示例性的,结合表5,假如与目标后缀数组构造条件相匹配的样本后缀数组构造条件为样本字符串1对应的样本后缀数组构造条件、样本字符串3对应的样本后缀数组构造条件以及样本字符串4对应的样本后缀数组构造条件,该3个样本后缀数组构造条件所适用的性能最优的后缀数组构造算法分别为算法2、算法2及算法3,其中,算法2的占比最高,因此终端设备将算法2确定为目标后缀数组构造算法。
S15:采用所述目标后缀数组构造算法构造所述目标字符串的后缀数组。
本申请实施例中,终端设备中配置有每种后缀数组构造算法对应的后缀数组构造组件。终端设备在确定出目标后缀数组构造算法后,可以调用该目标后缀数组构造算法对应的后缀数组构造组件来构造目标字符串的后缀数组。
以上可以看出,本申请实施例通过获取目标字符串的信息以及当前终端设备的信息;先确定出与目标字符串的信息以及当前终端设备的信息相匹配的目标后缀数组构造方式;再获取目标后缀数组构造方式对应的样本集;由于样本集中的每条样本数据均由一个样本字符串对应的样本后缀数组构造条件以及适用于该样本后缀数组构造条件的性能最优的后缀数组构造算法组成,样本后缀数组构造条件包括样本字符串的信息以及构造该样本字符串的后缀数组时所使用的样本终端设备的信息;因此,可以根据目标字符串的信息以及当前终端设备的信息从目标后缀数组构造方式对应的样本集中确定出与目标字符串的信息以及当前终端设备的信息对应的性能最优的目标后缀数组构造算法,即本申请实施例可以根据目标字符串的信息以及当前终端设备的信息自动选择出与其相匹配的性能最优的目标后缀数组构造算法来构造目标字符串的后缀数组,从而提高了后缀数组的构造效率。
请参阅图4,图4为本申请另一实施例提供的一种构造后缀数组的方法的示意性流程图,如图4所示,相对于图1至图3对应的实施例,本实施例中的构造后缀数组的方法在S14之后,还可以包括S16,详述如下:
S16:将所述目标后缀数组构造条件与所述目标后缀数组构造算法组成一条新的样本数据,并将所述新的样本数据添加至所述样本集中。
本实施例中,为了提高样本集的样本量以及样本丰富度,进而进一步提高后缀数组的构造效率,终端设备在确定出目标后缀数组构造算法后,可以将目标字符串对应的目标后缀数组构造条件与目标后缀数组构造算法组成一条新的样本数据,并将该新的样本数据添加至目标后缀数组构造方式对应的样本集中。如此,终端设备后续再通过该样本集确定目标后缀数组构造算法时,由于样本集的样本量以及样本丰富度的提高,因此可以提高确定出的目标后缀数组构造算法准确度,进而提高基于该目标后缀数组构造算法构造后缀数组时的效率。
需要说明的是,终端设备可以同时执行S15和S16;终端设备也可以先执行S15再执行S16;终端设备也可以先执行S16再执行S15,此处不对S15和S16的被执行次序进行限定。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
基于上述实施例所提供的构造后缀数组的方法,本发明实施例进一步给出实现上述方法实施例的终端设备的实施例。
请参阅图5,图5为本申请实施例提供的一种终端设备的结构示意图。本申请实施例中,终端设备包括的各单元用于执行图1或图4以及图1或图4对应的实施例中的各步骤。具体请参阅图1或图4以及图1或图4对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。如图5所示,终端设备50包括:第一获取单元51、第一确定单元52、第二获取单元53、第二确定单元54及后缀数组构造单元55。其中:
第一获取单元51用于获取目标字符串的信息以及当前终端设备的信息。
第一确定单元52用于确定与所述目标字符串的信息以及所述当前终端设备的信息相匹配的目标后缀数组构造方式。
第二获取单元53用于获取所述目标后缀数组构造方式对应的样本集;所述样本集中的每条样本数据均由一个样本字符串对应的样本后缀数组构造条件以及适用于所述样本后缀数组构造条件的性能最优的后缀数组构造算法组成,所述样本后缀数组构造条件包括所述样本字符串的信息以及构造所述样本字符串的后缀数组时所使用的样本终端设备的信息。
第二确定单元54用于从所述样本集中确定与所述目标字符串的信息以及所述当前终端设备的信息对应的性能最优的目标后缀数组构造算法。
后缀数组构造单元55用于采用所述目标后缀数组构造算法构造所述目标字符串的后缀数组。
可选的,所述目标字符串的信息包括所述目标字符串的字符串大小和重复度;相应地,第一获取单元51包括字符串大小获取单元、字符串处理单元及重复度确定单元。其中:
字符串大小获取单元用于获取所述目标字符串的字符串大小。
字符串处理单元用于对所述目标字符串依次进行字符串分割操作和字符串采样操作,得到所述目标字符串的多个采样字符串。
重复度确定单元用于采用预设的字符串相似度算法计算每两个所述采样字符串之间的第一相似度值,并基于所述第一相似度值确定所述目标字符串的重复度。
可选的,所述当前终端设备的信息包括所述当前终端设备的内核数目和内存容量;相应地,第一确定单元52具体用于:
若所述目标字符串的字符串大小大于所述当前终端设备的内存容量,则将外存后缀数组构造方式确定为所述目标后缀数组构造方式;
若所述目标字符串的字符串大小小于或等于所述当前终端设备的内存容量,且所述当前终端设备的内核数目等于1,则将串行后缀数组构造方式确定为所述目标后缀数组构造方式;
若所述目标字符串的字符串大小小于或等于所述当前终端设备的内存容量,且所述当前终端设备的内核数目大于1,则将并行后缀数组构造方式确定为所述目标后缀数组构造方式。
可选的,第二确定单元54包括:目标构造条件确定单元、样本构造条件确定单元及目标算法确定单元。其中:
目标构造条件确定单元用于将所述目标字符串的信息以及所述当前终端设备的信息作为所述目标字符串对应的目标后缀数组构造条件;
样本构造条件确定单元用于从所述样本集中确定与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件;
目标算法确定单元用于基于与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件所适用的性能最优的后缀数组构造算法,确定所述目标后缀数组构造算法。
可选的,样本构造条件确定单元具体用于:
计算所述目标后缀数组构造条件与所述样本集中的各个样本后缀数组构造条件之间的第二相似度值;
将满足预设条件的所述第二相似度值对应的样本后缀数组构造条件确定为与所述目标后缀数组构造条件相匹配的样本后缀数组构造条件。
可选的,目标算法确定单元具体用于:
将与所述目标后缀数组构造条件相匹配的各个样本后缀数组构造条件所适用的性能最优的后缀数组构造算法中,占比最高的后缀数组构造算法确定为所述目标后缀数组构造算法。
可选的,终端设备50还包括样本集处理单元。
样本集处理单元用于将所述目标后缀数组构造条件与所述目标后缀数组构造算法组成一条新的样本数据,并将所述新的样本数据添加至所述样本集中。
需要说明的是,上述模块之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参照方法实施例部分,此处不再赘述。
图6为本申请另一实施例提供的一种终端设备的结构示意图。如图6所示,该实施例提供的终端设备6包括:处理器60、存储器61以及存储在所述存储器61中并可在所述处理器60上运行的计算机程序62,例如构造后缀数组的方法对应的程序。处理器60执行所述计算机程序62时实现上述各个构造后缀数组的方法实施例中的步骤,例如图1所示的S11~S15。或者,所述处理器60执行所述计算机程序62时实现上述各终端设备实施例中各模块/单元的功能,例如图5所示单元51~55的功能。
示例性的,所述计算机程序62可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器61中,并由处理器60执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序62在所述终端设备6中的执行过程。例如,所述计算机程序62可以被分割成车载终端控制单元、第一车位确定单元、第二车位确定单元及车位占用状态确定单元,各单元具体功能请参阅图2对应地实施例中的相关描述,此处不赘述。
所述终端设备可包括但不仅限于,处理器60、存储器61。本领域技术人员可以理解,图6仅仅是终端设备6的示例,并不构成对终端设备6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器60可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器61可以是所述终端设备6的内部存储单元,例如终端设备6的硬盘或内存。所述存储器61也可以是所述终端设备6的外部存储设备,例如所述终端设备6上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器61还可以既包括所述终端设备6的内部存储单元也包括外部存储设备。所述存储器61用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器61还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机可读存储介质。计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时可实现上述构造后缀数组的方法。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行时实现可实现上述构造后缀数组的方法。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述终端设备的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参照其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
- 构造后缀数组的方法、终端设备及计算机可读存储介质
- 应用程序主题设定方法、终端设备控制方法及装置、终端设备及计算机可读存储介质