一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

字符处理方法、装置、计算机设备及存储介质与流程

2022-02-20 13:27:36 来源:中国专利 TAG:


1.本技术实施例涉及计算机技术领域,特别涉及一种字符处理方法、装置、计算机设备及存储介质。


背景技术:

2.ac(aho-corasick,艾豪-克拉斯克)自动机是一种用于表示字符串集合并提供字符串匹配功能的算法,字符串集合中包括一个或多个字符串,每个字符串中包括一个或多个字符,ac自动机包括字典树,字典树包括不同层级的节点,每个节点存储字符串集合中的一个字符。
3.相关技术中,通常会在数组中存储字符,若字符串集合中包括n种字符,那就需要为每个节点创建包含n个内存空间的数组,将该数组中的n个内存空间均作为该节点的子节点,以便在该节点的子节点中存储字符。因此,会消耗大量内存空间,造成内存空间的浪费。


技术实现要素:

4.本技术实施例提供了一种字符处理方法、装置、计算机设备及存储介质,可以节省存储字符的内存空间。所述技术方案如下:
5.一方面,提供了一种字符处理方法,所述方法包括:
6.接收携带目标字符串的存储指令,所述目标字符串包括按顺序排列的多个目标字符;
7.按照所述多个目标字符的排列顺序遍历所述多个目标字符,对于当前遍历的目标字符,执行如下步骤:
8.确定字典树中的第一节点;所述目标字符是所述目标字符串中的第一个字符的情况下,所述第一节点为所述字典树中的根节点,或者,所述目标字符不是所述目标字符串中的第一个字符的情况下,所述第一节点为所述目标字符的上一个字符所在的节点;
9.所述第一节点存在子节点,则创建链表,作为所述子节点的兄弟节点;
10.在所述链表中存储所述目标字符。
11.可选地,所述第一节点存在子节点,则创建链表,作为所述子节点的兄弟节点,包括:
12.所述第一节点存在子节点,所述子节点不存在兄弟节点,且所述子节点中的字符与所述目标字符不相同,则创建链表,作为所述子节点的兄弟节点。
13.可选地,所述第一节点存在子节点,则创建链表,作为所述子节点的兄弟节点,包括:
14.所述第一节点存在子节点,所述子节点存在兄弟节点,所述子节点中的字符和所述兄弟节点中的字符均与所述目标字符不相同,则创建链表,作为所述子节点的兄弟节点。
15.另一方面,提供了一种字符处理装置,所述装置包括:
16.存储指令接收模块,用于接收携带目标字符串的存储指令,所述目标字符串包括
按顺序排列的多个目标字符;
17.遍历模块,用于按照所述多个目标字符的排列顺序遍历所述多个目标字符;
18.节点确定模块,用于对于当前遍历的目标字符,确定字典树中的第一节点;所述目标字符是所述目标字符串中的第一个字符的情况下,所述第一节点为所述字典树中的根节点,或者,所述目标字符不是所述目标字符串中的第一个字符的情况下,所述第一节点为所述目标字符的上一个字符所在的节点;
19.链表创建模块,用于所述第一节点存在子节点,则创建链表,作为所述子节点的兄弟节点;
20.字符存储模块,用于在所述链表中存储所述目标字符。
21.可选地,所述装置还包括:
22.数组创建模块,用于所述第一节点不存在子节点,则在所述第一节点中创建指向任一内存空间的儿子指针,所述儿子指针用于指示所述内存空间作为所述第一节点的子节点;
23.所述字符存储模块,还用于在所述内存空间中存储所述目标字符。
24.可选地,所述链表创建模块,包括:
25.第一链表创建单元,用于所述第一节点存在子节点,所述子节点不存在兄弟节点,且所述子节点中的字符与所述目标字符不相同,则创建链表,作为所述子节点的兄弟节点。
26.可选地,所述链表创建模块,包括:
27.第二链表创建单元,用于所述第一节点存在子节点,所述子节点存在兄弟节点,所述子节点中的字符和所述兄弟节点中的字符均与所述目标字符不相同,则创建链表,作为所述子节点的兄弟节点。
28.可选地,所述链表创建模块,包括:
29.第三链表创建单元,用于所述第一节点存在子节点且所述子节点不存在兄弟节点,则创建链表作为第二节点;
30.第一指针创建单元,用于在所述子节点中创建指向所述第二节点的兄弟指针,所述兄弟指针用于指示所述第二节点为所述子节点的兄弟节点。
31.可选地,所述链表创建模块,包括:
32.第四链表创建单元,用于所述第一节点存在子节点且所述子节点存在兄弟节点,则创建链表作为第二节点;
33.第二指针创建单元,用于在所述子节点的最后一个兄弟节点中创建指向所述第二节点的兄弟指针,所述兄弟指针用于指示所述第二节点为所述最后一个兄弟节点的兄弟节点。
34.可选地,所述目标字符串中的多个目标字符属于字符集合,所述字符集合中包括按顺序排列的多个字符,所述链表创建模块,包括:
35.第五链表创建单元,用于所述第一节点存在子节点且所述子节点存在至少一个兄弟节点,则创建链表作为第二节点;
36.第三指针创建单元,用于根据所述至少一个兄弟节点中存储的字符和所述目标字符在所述字符集合中的顺序,对所述至少一个兄弟节点和所述第二节点进行排序,并按照节点顺序创建兄弟指针。
37.可选地,所述装置还包括:
38.所述节点确定模块,还用于确定所述目标字符串中的最后一个字符所在的第三节点;
39.所述链表创建模块,还用于创建链表作为所述第三节点的叶节点;
40.业务数据存储模块,用于在所述叶节点中存储所述目标字符串对应的业务数据。
41.可选地,所述装置还包括:
42.失败指针创建模块,用于遍历所述多个目标字符完成,则创建所述字典树中的多个节点的失败指针,所述节点的失败指针指向所述节点中存储的字符匹配失败时跳转到的节点。
43.可选地,所述装置还包括:
44.标记添加模块,用于对于当前遍历的目标字符,为存储所述目标字符的节点添加不可访问标记,所述不可访问标记用于表示节点处于不可访问状态;
45.标记删除模块,用于将添加的多个不可访问标记删除。
46.可选地,所述装置还包括:
47.删除指令接收模块,用于接收携带第一字符串的删除指令,所述第一字符串包括多个第一字符;
48.所述节点确定模块,还用于确定所述字典树中所述多个第一字符所在的多个节点;
49.节点删除模块,用于按照所述多个节点从下向上的顺序,删除所述多个节点中满足删除条件的节点,所述删除条件为节点不存在子节点和叶节点。
50.可选地,所述装置还包括:
51.叶节点删除模块,用于按照所述多个节点从下向上的顺序,确定所述多个节点的第一个节点存在子节点,则将所述第一个节点的叶节点删除。
52.可选地,所述节点删除模块,包括:
53.节点删除单元,用于所述多个节点中的第四节点满足所述删除条件,且所述第四节点中存在指向第五节点的兄弟指针,则以所述第五节点中的内容替换所述第四节点中的内容,删除所述第五节点。
54.可选地,所述节点删除单元,还用于:
55.所述第五节点中存在指向第六节点的兄弟指针,则以所述第五节点中的兄弟指针替换所述第四节点中的兄弟指针。
56.另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现如上述方面所述的字符处理方法。
57.另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如上述方面所述的字符处理方法。
58.另一方面,提供了一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取所述计算机指令,处理器执行所述计算机指令,使得所
述计算机设备实现如上述方面所述的字符处理方法。
59.本技术实施例提供的方法、装置、计算机设备及存储介质,在将目标字符串存储于字典树的过程中,由于字典树中的节点中已经存在子节点,则无需再创建该节点的子节点,而是创建链表作为子节点的兄弟节点,使得能够通过链表来存储目标字符串中的目标字符。与相关技术中提前将数组中连续的多个内存空间均作为同一节点的子节点相比,本技术实施例中在已经存在子节点的情况下,创建链表作为兄弟节点来为字符提供存储空间,由于链表为分散的内存空间而不是连续的内存空间,因此无需提前创建多个链表,只需在需要存储字符时创建链表即可,实现了随时使用随时创建,避免了占用大量的内存空间。
附图说明
60.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术实施例的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
61.图1是本技术实施例提供的一种字符处理方法的流程图。
62.图2是本技术实施例提供的另一种字符处理方法的流程图。
63.图3是本技术实施例提供的一种字典树中的元素的示意图。
64.图4是本技术实施例提供的一种字典树的结构示意图。
65.图5是本技术实施例提供的另一种字典树的结构示意图。
66.图6是本技术实施例提供的另一种字典树的结构示意图。
67.图7是本技术实施例提供的另一种字典树的结构示意图。
68.图8是相关技术提供的一种字典树的结构示意图。
69.图9是相关技术提供的一种ac自动机的结构示意图。
70.图10是本技术实施例提供的一种ac自动机的结构示意图。
71.图11是本技术实施例提供的一种节点的分配和回收的示意图。
72.图12是本技术实施例提供的一种字符处理装置的结构示意图。
73.图13是本技术实施例提供的另一种字符处理装置的结构示意图。
74.图14是本技术实施例提供的一种终端的结构示意图。
75.图15是本技术实施例提供的一种服务器的结构示意图。
具体实施方式
76.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
77.可以理解,本技术所使用的术语“第一”、“第二”等可在本文中用于描述各种概念,但除非特别说明,这些概念不受这些术语限制。这些术语仅用于将一个概念与另一个概念区分。举例来说,在不脱离本技术的范围的情况下,可以将第一节点称为第二节点,且类似地,可将第二节点称为第一节点。
78.其中,至少一个是指一个或者一个以上,例如,至少一个节点可以是一个节点、两个节点、三个节点等任一大于等于一的整数个节点。多个是指两个或者两个以上,例如,多
个目标字符可以是两个目标字符、三个目标字符等任一大于等于二的整数个目标字符。每个是指至少一个中的每一个,例如,每个目标字符是指多个目标字符中的每一个目标字符,若多个目标字符为3个目标字符,则每个目标字符是指3个目标字符中的每一个目标字符。
79.本技术实施例提供了一种字符处理方法,执行主体为计算机设备。在一种可能实现方式中,该计算机设备可以为终端,终端可以是手机、计算机、平板电脑、智能电视、笔记本电脑、台式计算机、智能音箱、智能手表等多种类型的设备。或者,该计算机设备可以为服务器。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(content delivery network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。
80.本技术实施例提供的字符处理方法,可应用于构建ac自动机的场景下。
81.例如,确定多个字符串,根据本技术实施例提供的字符处理方法,分别创建节点来存储该多个字符串中的字符,该多个节点构成字典树,从而创建该多个字符串对应的字典树,为多个节点创建失败指针,该字典树和失败指针构成ac自动机。后续即可利用该ac自动机实现字符串匹配等功能。
82.图1是本技术实施例提供的一种字符处理方法的流程图。本技术实施例的执行主体为计算机设备,参见图1,该方法包括:
83.101、接收携带目标字符串的存储指令。
84.ac自动机是一种用于表示字符串集合并提供字符串匹配功能的算法,字符串集合中包括一个或多个字符串,每个字符串中包括一个或多个字符,不同字符串中可以包括相同的字符,也可以包括不同的字符。ac自动机包括字典树,字典树包括不同层级的节点,每个节点存储字符串集合中的一个字符。例如,字典树中第一层级的节点为字符串中的第一个字符所在的节点,字典树中第二层级的节点为字符串中的第二个字符所在的节点,字典树中第三层级的节点为字符串中的第三个字符所在的节点,以此类推,多个字符串中的字符所在的多个节点构成具有树形结构的字典树。
85.若需要将某一目标字符串存储于字典树中,可以触发对该目标字符串的存储指令,由计算机设备接收携带该目标字符串的存储指令,该存储指令用于指示计算机设备将目标字符串存储于字典树中。
86.该目标字符串包括按顺序排列的多个目标字符。则计算机设备按照多个目标字符的排列顺序遍历多个目标字符,对于当前遍历的目标字符,执行下述步骤102-104中的步骤。
87.102、确定字典树中的第一节点。
88.字典树中包括至少一个节点,计算机设备在至少一个节点中确定第一节点。其中,确定第一字符的过程包括如下两种情况:
89.在目标字符是目标字符串中的第一个字符的情况下,该第一节点为字典树中的根节点。其中,按照从上向下的顺序,根节点是字典树中的第一个节点,该根节点不存在父节点,且根节点不用于存储字符。一个字典树有且只有一个根节点。则计算机设备在字典树中确定根节点,将根节点确定为第一节点。
90.在目标字符不是目标字符串中的第一个字符的情况下,第一节点为目标字符的上
一个字符所在的节点。由于计算机设备按照目标字符串中的多个目标字符的排列顺序依次存储该多个目标字符,当前遍历的目标字符的上一个字符已经存储于字典树的节点中。则计算机设备确定该目标字符的上一个字符,在字典树中确定该上一个字符所在的节点,将该节点确定为第一节点。
91.103、第一节点存在子节点,则创建链表,作为子节点的兄弟节点。
92.计算机设备确定字典树中的第一节点之后,判断该第一节点是否存在子节点,若第一节点存在子节点,则在计算机设备中创建链表,将该链表作为该子节点的兄弟节点,该链表也成为字典树中的一部分。其中,第一节点的子节点是指第一节点的下一个层级的节点,子节点的兄弟节点是指与该子节点的层级相同的节点。
93.104、在链表中存储目标字符。
94.当计算机设备创建好链表之后,在该链表中存储该目标字符。由于该链表为第一节点的子节点的兄弟节点,也即是在第一节点的子节点的兄弟节点中存储目标字符。计算机设备对于目标字符串中的每一个目标字符,均执行上述步骤102-104,即可将目标字符串中的多个目标字符均存储于字典树中。
95.本技术实施例提供的方法,在将目标字符串存储于字典树的过程中,由于字典树中的节点中已经存在子节点,则无需再创建该节点的子节点,而是创建链表作为子节点的兄弟节点,使得能够通过链表来存储目标字符串中的目标字符。与相关技术中提前将数组中连续的多个内存空间均作为同一节点的子节点相比,本技术实施例中在已经存在子节点的情况下,创建链表作为兄弟节点来为字符提供存储空间,由于链表为分散的内存空间而不是连续的内存空间,因此无需提前创建多个链表,只需在需要存储字符时创建链表即可,实现了随时使用随时创建,避免了占用大量的内存空间。
96.图2是本技术实施例提供的另一种字符处理方法的流程图。本技术实施例的执行主体为计算机设备,参见图2,该方法包括:
97.201、计算机设备接收携带目标字符串的存储指令。
98.计算机设备接收携带目标字符串的存储指令,其中该存储指令用于指示计算机设备将目标字符串存储于字典树中。该存储指令可以为该计算机设备的用户在该计算机设备上通过操作所触发的存储指令,或者该存储指令也可以为其他设备发送给该计算机设备的存储指令。其中,该目标字符串包括按顺序排列的多个目标字符。可选地,该目标字符串可以包括英文单词或者中文短语等,例如目标字符串为“abcd”、“adfe”、“she”或者“her”等。
99.当计算机设备接收到该存储指令,则按照多个目标字符的排列顺序遍历多个目标字符,对于当前遍历的目标字符,执行下述步骤202-204。
100.202、计算机设备确定字典树中的第一节点。
101.字典树中包括至少一个节点,计算机设备在至少一个节点中确定第一节点。其中,确定第一字符的过程包括如下两种情况:
102.在目标字符是目标字符串中的第一个字符的情况下,该第一节点为字典树中的根节点。其中,按照从上向下的顺序,根节点是字典树中的第一个节点,该根节点不存在父节点,且根节点不用于存储字符。一个字典树有且只有一个根节点。则计算机设备在字典树中确定根节点,将根节点确定为第一节点。
103.在目标字符不是目标字符串中的第一个字符的情况下,第一节点为目标字符的上
一个字符所在的节点。由于计算机设备按照目标字符串中的多个目标字符的排列顺序遍历多个目标字符,因此当前遍历的目标字符的上一个字符已经存储于字典树的节点中。则计算机设备在目标字符串中确定该目标字符的上一个字符,在字典树中确定该上一个字符所在的节点,将该节点确定为第一节点。
104.203、第一节点存在子节点,则计算机设备创建链表,作为子节点的兄弟节点。
105.计算机设备在字典树中确定第一节点,则判断该第一节点是否存在子节点,若确定第一节点已存在子节点,则计算机设备创建链表,作为该子节点的兄弟节点。其中,第一节点的子节点为第一节点的下一层级的节点,子节点的兄弟节点与该子节点属于同一层级,因此,该子节点的兄弟节点也为第一节点的下一层级的节点。
106.在一种可能实现方式中,步骤203包括:第一节点存在子节点,该子节点不存在兄弟节点,且子节点中的字符与目标字符不相同,则计算机设备创建链表,作为子节点的兄弟节点。
107.计算机设备确定第一节点存在子节点之后,判断该子节点是否存在兄弟节点,若确定该子节点不存在兄弟节点,则计算机设备确定该子节点中存储的字符,并判断该子节点中的字符与该目标字符是否相同。若确定子节点中的字符与目标字符不相同,说明在字典树的当前层级的节点中未存储与目标字符相同的字符,则需要在当前层级创建新的节点来存储该目标字符,则计算机设备创建链表,作为该子节点的兄弟节点,后续可将该目标字符存储于该兄弟节点中。若计算机设备确定子节点中的字符与目标字符相同,说明在字典树的当前层级的节点中已经存储与目标字符相同的字符,且可以认为该目标字符已存储于该子节点中。则无需在当前层级中创建新的节点来存储该目标字符,也就无需执行创建链表作为该子节点的兄弟节点的步骤。
108.在另一种可能实现方式中,步骤203包括:第一节点存在子节点,该子节点存在兄弟节点,子节点中的字符和兄弟节点中的字符均与目标字符不相同,则计算机设备创建链表,作为子节点的兄弟节点。
109.计算机设备确定第一节点存在子节点之后,判断该子节点是否存在兄弟节点,若确定子节点存在兄弟节点,则计算机设备确定子节点中存储的字符以及兄弟节点中存储的字符,并判断子节点中的字符以及兄弟节点中的字符与该目标字符是否相同。若计算机设备确定子节点中的字符和兄弟节点中的字符均与目标字符不相同,说明在字典树的当前层级的节点中未存储与目标字符相同的字符,则需要在当前层级创建新的节点来存储该目标字符,则计算机设备创建链表,作为该子节点的兄弟节点,后续可将该目标字符存储于该兄弟节点中。若计算机设备确定子节点中的字符和兄弟节点中的字符中,存在与目标字符相同的字符,说明在字典树的当前层级的节点中已经存储与目标字符相同的字符,则可以认为该目标字符已存储于与该目标字符相同的字符所在的节点中。则无需在当前层级中创建新的节点来存储该目标字符,也就无需执行创建链表作为该子节点的兄弟节点的步骤。
110.在另一种可能实现方式中,步骤203包括:第一节点存在子节点且该子节点不存在兄弟节点,则计算机设备创建链表作为第二节点,在该子节点中创建指向第二节点的兄弟指针,该兄弟指针用于指示第二节点为子节点的兄弟节点。
111.计算机设备确定第一节点存在子节点之后,判断该子节点是否存在兄弟节点,若确定该子节点不存在兄弟节点,则计算机设备创建链表作为第二节点,并在第一节点的子
节点中创建指向该第二节点的兄弟指针,从而创建了该子节点的兄弟节点。
112.在另一种可能实现方式中,步骤203包括:第一节点存在子节点且该子节点存在兄弟节点,则计算机设备创建链表作为第二节点,在子节点的最后一个兄弟节点中创建指向第二节点的兄弟指针,兄弟指针用于指示第二节点为最后一个兄弟节点的兄弟节点。
113.计算机设备确定第一节点存在子节点之后,判断该子节点是否存在兄弟节点,若确定该子节点存在兄弟节点,则计算机设备创建链表作为第二节点,并在子节点的兄弟节点中确定最后一个兄弟节点,在该最后一个兄弟节点中创建指向该第二节点的兄弟指针,从而创建了最后一个兄弟节点的兄弟节点。
114.其中,字典树中同一层级的多个节点之间通过兄弟指针连接,且通过兄弟指针连接的多个节点之间互为兄弟节点。每一个节点可以存在一个其他节点指向该节点的兄弟指针,或者存在一个该节点指向其他节点的兄弟指针,或者存在其他节点指向该节点的兄弟指针和该节点指向其他节点的兄弟指针。
115.在另一种可能实现方式中,为字典树设置字符集合,该字符集合中包括按顺序排列的多个字符,这些字符是可能要存储在字典树中的字符。目标字符串中的多个目标字符属于字符集合。相应地,步骤203包括:第一节点存在子节点且该子节点存在至少一个兄弟节点,则计算机设备创建链表作为第二节点,根据至少一个兄弟节点中存储的字符和目标字符在字符集合中的顺序,对至少一个兄弟节点和第二节点进行排序,并按照节点顺序创建兄弟指针。
116.字符集合中的多个字符互不相同,目标字符串中的多个目标字符均属于字符集合中的多个字符。当计算机设备确定第一节点存在子节点且子节点存在兄弟节点时,则创建链表作为第二节点,由于该第二节点后续用于存储目标字符,至少一个兄弟节点中存储有对应的字符,为了使第二节点存储目标字符之后,至少一个兄弟节点中存储的字符和第二节点中存储的字符是按照在字符集合中的顺序排列的,则需要使该至少一个兄弟节点和第二节点的排列顺序与字符集合中字符的排列顺序相匹配。因此,计算机设备根据至少一个兄弟节点中的字符和该目标字符在字符集合中的排列顺序,将该第二节点与至少一个兄弟节点进行排列,并按照多个节点的排列顺序,创建节点之间的兄弟指针。因此,后续进行字符匹配时,仅需按照字符集合中多个字符的排列顺序,访问到该字符之前的字符所在的节点即可,无需访问该字符之后的字符所在的节点,可以提高字符匹配的速度。
117.例如,目标字符串为英文单词,则字符集合中的多个字符可以为26个按字母顺序排列的英文字母“a、b、c
……
z”。假设第一节点的子节点为节点1,节点1存在兄弟节点:节点2和节点3,第二节点为节点4,其中节点1中存储字符a,节点2中存储字符d,节点3中存储字符f,当前的目标字符为字符b,该节点4用于存储字符b。则计算机设备按照字符a、字符d、字符f和字符b在26个英文字母中的排列顺序,将节点1、节点2、节点3和节点4进行排列,得到排序后的节点1、节点4、节点2和节点3,并按照四个节点的排列顺序,创建四个节点之间的兄弟指针,使得字符b存储于字符a之后,字符a、字符d、字符f和字符b的排列顺序与26个英文字母的排列顺序相匹配。
118.可选地,在字符集合中,子节点中的字符以及兄弟节点中的字符均排在目标字符之前。计算机设备在兄弟节点中确定最后一个兄弟节点,该最后一个兄弟节点中的字符即为排在目标字符之前的且与目标字符相邻的字符。则计算机设备创建链表作为第二节点之
后,即可将该第二节点排列在最后一个兄弟节点之后,则计算机设备在该最后一个兄弟节点中创建指向该第二节点的兄弟指针。
119.可选地,在字符集合中,子节点中的字符以及兄弟节点中的字符均排在目标字符之后。则子节点中的字符即为排在目标字符之后且与目标字符相邻的字符,因此该子节点应该排在第二节点之后,使得第二节点为第一节点的子节点,而第一节点原先的子节点应为第二节点的兄弟节点。计算机设备在创建第二节点中创建指向该子节点的兄弟指针,并将第一节点中指向子节点的儿子指针替换为指向第二节点的儿子指针,该儿子指针用于指示第二节点作为第一节点的儿子指针,后续计算机设备在第二节点中存储目标字符。
120.例如,目标字符串为英文单词,第一节点为节点1,第一节点的子节点为节点2,节点2存在兄弟节点:节点3,第二节点为节点4。其中节点1中存储字符b,节点2中存储字符d,节点3中存储字符f,当前的目标字符为字符a,节点4用于存储字符a。因此按照26个英文字母中的排列顺序,节点2中的字符d以及节点3的字符f均排在目标字符a之后。则计算机设备在节点4中创建指向该节点2的兄弟指针,将节点1中指向节点2的儿子指针替换为指向节点4的儿子指针。
121.可选地,在字符集合中,子节点中的字符以及兄弟节点中的字符包括排在目标字符之前的字符,也包括排在目标字符之后的字符。则在子节点中的字符以及兄弟节点中的字符中,确定排在目标字符之前的且与目标字符相邻的字符所在的第七节点,以及排在目标字符之后且与目标字符相邻的字符所在的第八节点,且该第七节点和第八节点之间存在由第七节点指向第八节点的兄弟指针。计算机设备创建链表作为第二节点,并在第二节点中创建指向第八节点的兄弟指针,然后在第七节点中创建指向第二节点的兄弟指针。后续将目标字符存储于该第二节点并将第七节点指向第八节点的兄弟指针删除。
122.在另一种可能实现方式中,对于当前遍历的目标字符,计算机设备为存储目标字符的节点添加不可访问标记。其中,不可访问标记用于表示节点处于不可访问状态。使得添加不可访问标记的节点处于不可访问状态,从而避免在未将目标字符串中的多个目标字符均存储于字典树之前,在进行字符串匹配时访问到该节点,导致字符串的匹配发生错乱。
123.204、计算机设备在链表中存储目标字符。
124.当计算机设备创建好链表之后,将当前遍历的目标字符存储于该链表中。在已经存在子节点的情况下,创建链表作为兄弟节点,由于链表为分散的内存空间而不是连续的内存空间,能够实现随时使用随时创建,而无需创建额外的链表,避免了存储目标字符串时占用大量的内存空间。
125.在另一种可能实现方式中,计算机设备确定目标字符串中的最后一个字符所在的第三节点,创建链表作为第三节点的叶节点,在叶节点中存储目标字符串对应的业务数据。其中,业务数据包括字符串的类型、作用等。其中,一个字符串中的多个字符所在的多个节点中,有且仅有一个节点存在叶节点,且存在叶节点的节点中存储的字符为该字符串中的最后一个字符。并且,若字典树中的某一个节点存在存储业务数据的叶节点,则表示该节点中存储的字符为某一字符串中的最后一个字符。
126.可选地,当计算机遍历多个目标字符完成后,确定目标字符串中的最后一个字符,并在字典树中确定该最后一个字符所在的第三节点。则计算机设备创建链表作为第三节点的叶节点,获取该目标字符串的业务数据,将该目标字符串的业务数据存储于该链表中。
127.可选地,计算机设备确定当前遍历的目标字符为目标字符串中的最后一个字符时,则计算机设备当前创建的第二节点即为目标字符串中的最后一个字符所在的第三节点。则计算机设备创建链表作为第三节点的叶节点,获取该目标字符串的业务数据,将该目标字符串的业务数据存储于该叶节点中。
128.需要说明的是,本技术实施例仅说明了第一节点存在子节点时,创建链表作为子节点的兄弟节点,并在该链表中存储目标字符的过程。在另一实施例中,计算机设备确定第一节点不存在子节点,则在第一节点中创建指向任一内存空间的儿子指针,在该内存空间中存储目标字符,其中,该儿子指针用于指示该内存空间作为第一节点的子节点;可选地,该内存空间为可用于存储一个字符所占用的内存空间,因此无需创建包含多个内存空间的数组,因此可以避免占用大量内存空间,节约了内存资源。
129.205、计算机设备遍历多个目标字符完成,则创建字典树中的多个节点的失败指针。
130.当计算机设备遍历多个目标字符完成之后,则创建该字典树中的多个节点的失败指针,其中,任一节点的失败指针指向该节点中存储的字符匹配失败时跳转到的节点,以便进行下一步的匹配。
131.可选地,字典树中包括未存储字符的根节点,计算机设备创建字典树中的除根节点之外的其他节点的失败指针。
132.可选地,该目标字符串为创建字典树的过程中存储的字符串,则计算机设备在遍历多个目标字符完成,且将该字典树中的其他字符串均存储于字典树中时,完成该字典树的创建,则计算机设备为字典树中的多个节点创建失败指针。
133.可选地,该目标字符串为创建字典树之后新添加至字典树中的字符串,因此该字典树的多个节点已经存在失败指针。则计算机设备在遍历多个目标字符完成之后,重新创建该字典树中的多个节点的失败指针。
134.在一种可能实现的方式中,在遍历目标字符的过程中,对于当前遍历的目标字符,计算机设备为存储目标字符的节点添加不可访问标记。则计算机设备遍历多个目标字符完成,创建字典树中的多个节点的失败指针,从而完成了对目标字符串的存储以及对字典树的更新,则计算机设备将在存储目标字符的节点中添加的多个不可访问标记删除,使得删除不可访问标记的节点退出不可访问状态,此时为目标字符串新添加的节点处于可以访问的状态,可正常访问多个节点中存储的目标字符,进行字符匹配等。
135.字典树中包括不同层级的多个节点,当前层级的节点为上一层级的节点的子节点,相同层级的节点之间互为兄弟节点。每个层级包含至少一个节点,每个层级的节点存储字符串中对应位置上的字符,且每个层级的节点存储的字符之间互不相同。因此,若字典树对应的字符串集合中包括n种字符,则字典树中的一个层级中最多包含n个节点,也即是某一节点最多包含n个子节点,n个子节点分别存储n种字符。相关技术中,计算机设备创建数组作为节点,由于数组包括连续的多个内存空间,因此对于字典树中的每个节点,计算机设备均创建包含n个内存空间的数组,作为该节点的n个子节点,从而存储n个字符。由于每个节点最多包含n个子节点,因此字典树中存在子节点的数量少于n的节点,但是对于该节点,计算机设备仍需创建包含n个内存空间的数组,因此仅会用到该数组中的部分内存空间来存储字符,而其余内存空间并不会用到,造成了内存空间的浪费。
136.在另一种可能实现方式中,目标字符串为在已创建的字典树中新添加的字符串。字符串中包括前缀,以字符串包含n(n为大于1的正整数)个字符为例,字符串的前缀是指字符串的前1个、前2个、前3个
……
前n-1个字符所构成的字符串。例如,对于字符串“abdfe”来说,字符串“a”、“ab”、“abd”以及“abdf”均为该字符串“abdfe”的前缀。则在字典树中添加目标字符串可分为以下三种情况。其中,三种情况下添加字符串的方式以及当前其他字符的匹配情况如表1所示。
137.表1
[0138][0139]
第一种情况,目标字符串为字典树中的第二字符串的前缀。则字典树中的第二字符串中的字符包括目标字符串中的字符,由于第二字符串已存储于字典树中,则认为目标字符串中的多个字符也均已存储于字典树中,无需创建新的节点来存储目标字符串中的字符,因此,计算机设备仅需在字典树中确定目标字符串中的最后一个字符所在的节点,创建链表作为该节点的叶节点,在该叶节点中存储目标字符串的业务数据,即可实现将目标字符串存储于该字典树中。其中,由于在添加目标字符串的过程中,计算机设备仅创建了节点的叶节点,未改变节点的子节点或者兄弟节点等,因此,不会影响对其他字符串进行匹配。
[0140]
图3是本技术实施例提供的一种字典树中的元素的示意图,如图3所示,实线圆形代表现存节点301,虚线圆形代表变动节点302,六边形代表叶节点303,实心箭头代表子指针304,用于连接父节点和子节点,线条箭头代表兄弟指针305,用于连接兄弟节点,虚线箭头代表叶子指针306,用于连接叶节点。参照图3所示的字典树中的元素,根据以下图4对第一种情况进行举例说明。
[0141]
图4是本技术实施例提供的一种字典树的结构示意图,根节点401包括子节点402,节点402中存储字符a,节点402存在兄弟节点403,节点403中存储字符b,且节点403存在叶节点404。节点402还存在子节点405,节点405中存储字符b,且节点405存在子节点406,节点406中存储字符c,且节点406存在叶节点407和叶节点408。则该字典树中包括的字符串为“abc”和“b”。当计算机设备为节点405添加叶节点408时,表示该字典树中新添加了字符串“ab”。
[0142]
第二种情况,目标字符串的前缀包括字典树对应的第三字符串。则字典树中的第三字符串中的字符均属于该目标字符串中的字符,计算机设备在目标字符串中确定第三字符串中的最后一个字符所在的位置,该最后一个字符以及最后一个字符之前的字符均已存储于字典树中,该最后一个字符之后的至少一个字符还未存储于字典树中。则对于目标字
符串中的上述最后一个字符之后的字符,从该最后一个字符所在的节点开始,按照从上向下的顺序,依次创建每个目标字符对应的节点,从而将最后一个字符之后的至少一个字符存储于字典树中。并且,对于当前遍历的目标字符,计算机设备为存储该目标字符的节点添加不可访问标记。计算机设备对于当前遍历的目标字符串中的最后一个目标字符,为存储最后一个目标字符的节点创建叶节点,将该目标字符的业务数据存储于叶节点中。计算机设备为字典树中的多个节点重新创建失败指针,当计算机设备完成失败指针的重建之后,将添加的多个节点的不可访问标记删除。其中,由于添加目标字符串的过程中,计算机设备为新创建的节点添加了不可访问标记,因此计算机设备在进行字符串匹配时,不会访问新添加的节点,因此新添加的节点对其他字符串的匹配不会造成影响,实现了在添加目标字符串的过程中,无需对其他字符串对应的节点进行加锁,限制其他节点的访问权限,因此实现了添加目标字符串的过程仍可以进行字符串的匹配。
[0143]
参照图3所示的字典树中的元素,根据以下图5对第二种情况进行举例说明。图5是本技术实施例提供的另一种字典树的结构示意图,根节点501包括子节点502,节点502中存储字符a,节点502存在兄弟节点503,节点503中存储字符b,且节点503存在叶节点504。节点502还存在子节点505,节点505中存储字符b,且节点505存在子节点506,节点506中存储字符c,且节点506存在叶节点507和叶节点508。则该字典树中包括的字符串为“abc”和“b”。计算机设备为节点506添加子节点509时,为节点509添加子节点510,为节点510添加叶节点511,其中节点509中存储字符e,节点510中存储字符f,则该字典树中新添加了字符串“abcef”。
[0144]
第三种情况,目标字符串的前缀不包括字典树对应的字符串,字典树对应的字符串的前缀也不包括目标字符串,也即是字典树对应的其他字符串中的字符,与目标字符串中的目标字符,没有重叠部分。则计算机设备需要从目标字符串中的第一个目标字符开始,按照目标字符串中多个目标字符的排列顺序,依次遍历多个目标字符,执行上述步骤202-205中的步骤,从而实现按照字典树中从上向下的顺序,依次创建每个目标字符对应的节点,并为每个新创建的节点添加不可访问标记。计算机设备对于当前遍历的目标字符串中的最后一个目标字符,为存储最后一个目标字符的节点创建叶节点,将该目标字符的业务数据存储于叶节点中。计算机设备为字典树中的多个节点重新创建失败指针,当计算机设备完成失败指针的重建之后,将添加的多个节点的不可访问标记删除。其中,由于添加目标字符串的过程中,计算机设备为新创建的节点添加了不可访问标记,因此计算机设备在进行字符串匹配时,不会访问新添加的节点,因此新添加的节点对其他字符串的匹配不会造成影响,实现了在添加目标字符串的过程中,无需对其他字符串对应的节点进行加锁,限制其他节点的访问权限,因此实现了添加目标字符串的过程仍可以进行字符串的匹配。
[0145]
参照图3所示的字典树中的元素,根据以下图6和图7对第三种情况进行举例说明。图6是本技术实施例提供的另一种字典树的结构示意图,根节点601包括子节点602,节点602中存储字符a,节点602存在兄弟节点603,节点603中存储字符b,且节点603存在叶节点604。节点602还存在子节点605,节点605中存储字符b,且节点605存在子节点606,节点606中存储字符c,且节点606存在叶节点607和叶节点608。则该字典树中包括的字符串为“abc”和“b”。计算机设备为节点605添加兄弟节点609时,为节点609添加子节点610,为节点610添加叶节点611,其中节点609中存储字符e,节点610中存储字符f,则该字典树中新添加了字
符串“aef”。
[0146]
图7是本技术实施例提供的另一种字典树的结构示意图,根节点701包括子节点702,节点702中存储字符a,节点702存在兄弟节点703,节点703中存储字符b,且节点703存在叶节点704。节点702还存在子节点705,节点705中存储字符b,且节点705存在子节点706,节点706中存储字符c,且节点706存在叶节点707和叶节点708。则该字典树中包括的字符串为“abc”和“b”。计算机设备为节点703添加兄弟节点709时,为节点709添加子节点710,为节点710添加叶节点711,其中节点709中存储字符e,节点710中存储字符f,则该字典树中新添加了字符串“ef”。
[0147]
图8是相关技术提供的一种字典树的结构示意图,字典树中包括根节点801,根节点包括三个子节点:节点802、节点803和节点804,节点802中存储字符a,节点803中存储字符b,节点804中存储字符d,节点802包括子节点805,节点805中存储字符b,节点805包括子节点806,节点806中存储字符c,节点806包括叶节点807和叶节点808。每个节点的多个子节点均为数组。
[0148]
其中,ac自动机是字典树与失败指针的结合,图9是相关技术提供的一种ac自动机的结构示意图,ac自动机中包括根节点901,根节点包括三个子节点:节点902、节点903和节点904,节点902中存储字符a,节点903中存储字符b,节点904中存储字符d,节点902包括子节点905,节点905中存储字符b,节点905包括子节点906,节点906中存储字符c,节点906包括叶节点907和叶节点908。其中,虚线代表失败指针,节点902的失败指针指向根节点901,节点903的失败指针指向根节点901,节点904的失败指针指向根节点901,节点905的失败指针指向节点903,节点906的失败指针指向根节点901。
[0149]
而本技术实施例中,字典树中的节点存在子节点时计算机设备不再创建该节点的子节点,而是创建子节点的兄弟节点,因此字典树中的每个节点最多存在一个子节点,计算机设备仅需创建一个指向任一内存空间的儿子指针,使得该内存空间作为子节点即可。由于字典树中的节点仅存储一个字符,因此仅需保证该内存空间能够存储一个字符即可,无需额外创建包括多个内存空间的数组,不会造成对内存空间的浪费。其中,字典树中任一子节点的兄弟节点为该计算机设备创建的链表,兄弟节点之间通过兄弟指针连接,每个兄弟节点通过兄弟指针最多与两个其他兄弟节点直接连接。由于链表之间通过指针连接,因此链表之间为分散的内存空间,可以实现随时使用随时创建,而无需创建额外的链表,可以避免对内存空间的浪费。并且,创建链表作为兄弟节点,便于实现节点的插入与删除。
[0150]
图10是本技术实施例提供的一种ac自动机的结构示意图,ac自动机中包括根节点1001,根节点包括子节点1002,节点1002中存储字符a,节点1002包括兄弟节点1003和兄弟节点1004,节点1003中存储字符b,节点1004中存储字符d,节点1002包括子节点1005,节点1005中存储字符b,节点1005包括子节点1006,节点1006中存储字符c,节点1006包括叶节点1007和叶节点1008。其中,每个节点的子节点为数组,每个节点的兄弟节点为链表。其中,虚线代表失败指针,节点1002的失败指针指向根节点1001,节点1003的失败指针指向根节点1001,节点1004的失败指针指向根节点1001,节点1005的失败指针指向节点1003,节点1006的失败指针指向根节点1001。
[0151]
当计算机设备完成字典树的创建以及失败指针的创建,即完成了ac自动机的创建,则计算机设备可根据该ac自动机进行字符串匹配,例如通过ac自动机将查询的文本与
字典树进行字符串匹配,从而确定该文本中是否包括字典树中的字符串。计算机设备在对字符进行匹配时,确定当前匹配成功的节点指向的子节点,将子节点中存储的字符与该字符进行匹配,匹配成功则对字符串中的下一个字符进行匹配,匹配失败则跳转到该子节点指向的兄弟节点进行匹配,匹配成功则对字符串中的下一个字符进行匹配,匹配失败则继续跳转到该兄弟节点指向的下一个兄弟节点进行匹配,以此类推,直至字符串中的多个字符均匹配完成。或者,当最后一个兄弟节点中的字符仍与该字符匹配失败时,则确定该字符串匹配失败。其中,由于在字符串匹配的过程中需要遍历子节点的兄弟节点,则匹配过程的时间复杂度最多为o(n n*n),其中n为查询的文本的长度,n为字典树中不同种类的字符的个数。
[0152]
其中,本技术实施例提供的ac自动机可应用于查询文本中是否含有某一个特定的字符串。或者,还可以应用于查询文本中是否同时存在多个特定的字符串。其中,查询文本中是否同时存在多个特定的字符串的过程如下:
[0153]
(1)创建包含多个字符串的字符串集合,为字符串集合编号,将字符串集合中的多个字符串存储于ac自动机中;
[0154]
(2)在每个字符串对应的叶节点中存储该字符串集合的编号,以及该编号的字符串集合中字符串的总数量;
[0155]
(3)通过该ac自动机,对需要查询的文本进行匹配,匹配结束时确定该文本中所包括的字典树中的字符串,查看命中的字符串所对应的编号,通过命中的编号的数量,判断该文本中是否同时包括该字符串集合中的多个字符串。
[0156]
206、计算机设备接收携带第一字符串的删除指令。
[0157]
计算机设备创建好对应有多个字符串的字典树之后,还可以删除字典树对应的某一字符串。则计算机设备可以接收携带第一字符串的删除指令,该删除指令用于指示计算机设备将字典树中的第一字符串删除,该第一字符串中包括多个第一字符。其中,该删除指令可以为该计算机设备的用户在该计算机设备上通过操作所触发的删除指令,或者该删除指令也可以为其他设备发送给该计算机设备的删除指令。
[0158]
207、计算机设备确定字典树中多个第一字符所在的多个节点。
[0159]
计算机设备接收到携带第一字符串的删除指令之后,确定第一字符串中的多个第一字符,并在字典树中确定该多个第一字符所在的多个节点。其中,多个第一字符所在的多个节点在字典树中应属于不同层级的节点,相邻的第一字符所在的节点在字典树中属于相邻层级的节点。
[0160]
208、计算机设备按照多个节点从下向上的顺序,删除多个节点中满足删除条件的节点。
[0161]
计算机设备按照多个节点从下向上的顺序,也即是按照节点从下位层级到上位层级的顺序,对多个节点进行遍历,对于当前遍历的节点,判断该节点是否满足删除条件,若当前遍历的节点满足删除条件,则将该节点删除,直至遍历完多个节点,或者遍历到不满足删除条件的节点,则停止遍历。
[0162]
其中,删除条件为节点不存在子节点和叶节点。计算机设备判断节点是否存在子节点和叶节点。若节点存在子节点,说明该节点中存储的第一字符不仅是第一字符串中的字符,还是字典树中的其他字符串的字符,则计算机设备无需在字典树中删除该第一字符,
也即是计算机设备不删除该节点。若节点存在叶节点,说明该节点存储的第一字符不仅是第一字符串中的字符,还是字典树中的其他字符串的最后一个字符,则计算机设备无需在字典树中删除该第一字符,也即是计算机设备不删除该节点。因此,当该节点不存在子节点,也不存在叶节点时,说明字典树对应的其他节点中不包括该节点存储的第一字符,若要删除第一字符串,则将该第一字符删除,也即是删除该节点。
[0163]
在一种可能实现方式中,多个节点中的第四节点满足删除条件,且第四节点中存在指向第五节点的兄弟指针,则以第五节点中的内容替换第四节点中的内容,删除第五节点。
[0164]
当计算机设备确定第四节点满足删除条件时,判断是否存在该第四节点指向其他节点的兄弟指针,若计算机设备确定第四节点中存在指向第五节点的兄弟指针,则计算机设备获取第五节点中存储的内容,以第五节点中的内容替换第四节点中的内容,并将该第五节点删除,从而实现删除存储有第一字符的节点,也即是采用兄弟节点覆盖当前节点并删除兄弟节点的方式,实现了删除当前节点中的字符。若计算机设备确定第四节点中不存在指向其他节点的兄弟指针,则直接将第四节点删除。另外,计算机设备完成上述操作之后,重新建立字典树中除根节点之外的其他节点的失败指针。
[0165]
其中,第五节点中的内容包括第五节点中存储的字符,或者,第五节点中的内容包括第五节点中存储的字符以及指针,指针包括儿子指针或者兄弟指针中的至少一项。第四节点中的内容包括第四节点中的存储的第一字符以及指向第五节点的兄弟指针。
[0166]
可选地,第五节点中存在指向第六节点的兄弟指针,则以第五节点中的兄弟指针替换第四节点中的兄弟指针。
[0167]
计算机设备确定第四节点中存在指向第五节点的兄弟指针,则判断该第五节点中是否存在指向其他节点的兄弟指针。若计算机设备确定第五节点中存在指向第六节点的兄弟指针,则计算机设备以第五节点中的字符替换第四节点中的字符,以第五节点中的兄弟指针替换第四节点中的兄弟指针,并删除第五节点。另外,计算机设备完成上述操作之后,重新建立字典树中除根节点之外的其他节点的失败指针。
[0168]
需要说明的是,本技术实施例仅以删除多个节点中满足删除条件的节点,且删除条件为节点不存在子节点和叶节点为例进行说明。但在为字典树对应的字符串中的最后一个字符所在的节点创建叶节点的情况下,该第一字符串中的最后一个第一字符所在的节点一定存在叶节点,因此该最后一个第一字符存在叶节点并不能说明字典树对应的其他字符串中也包括该最后一个第一字符。因此,在另一实施例中,计算机设备按照多个节点从下向上的顺序,确定多个节点的第一个节点,判断该第一个节点是否存在子节点。若计算机设备确定该第一个节点存在子节点,则说明字典树对应的其他字符串中包括第一个节点中存储的第一字符,无需删除该第一字符,因此,计算机设备将该第一个节点中的叶节点删除,从而实现在字典树中删除该第一字符串。若计算机设备确定该第一个节点不存在子节点,则说明字典树对应的其他字符串中不包括第一个节点中存储的第一字符,则删除该第一字符即可,也即是删除该第一个节点,则计算机设备按照自下向上的顺序,判断第一个节点之外的其他节点是否满足删除条件,并删除满足删除条件的节点。
[0169]
在另一种可能实现方式中,字符串包括字符串的前缀,则在字典树中添加目标字符串可分为以下三种情况。其中,三种情况下删除字符串的方式以及当前其他字符的匹配
情况如表2所示。
[0170]
表2
[0171][0172]
第一种情况,第一字符串为字典树对应的第四字符串的前缀。则字典树中的第四字符串中的字符包括该第一字符串中的字符,因此,计算机设备若要将该第一字符串中的第一字符所在的节点删除,相当于也删除第四字符串,则计算机设备无需删除该第一字符串中的第一字符所在的节点。计算机设备确定第一字符串中的最后一个第一字符所在的节点,将该最后一个第一字符所在的节点的叶节点删除即可,从而实现将第一字符串在字典树中删除。其中,由于在删除第一字符串的过程中,计算机设备仅删除了节点的叶节点,未改变节点的子节点或者兄弟节点等,因此,不会影响对其他字符串进行匹配。
[0173]
第二种情况,第一字符串的前缀包括字典树对应的第五字符串。则字典树中的第五字符串中的字符均属于该第一字符串中的字符,若计算机设备将第一字符串中的第一字符全部删除,则相当于将第五字符串也删除了。因此,计算机设备确定第五字符串的最后一个字符在第一字符串中的位置,该最后一个字符以及最后一个字符之前的字符均不需要删除。则对于第一字符串中的第五字符串中的最后一个字符之后的字符,从第一字符串中的最后一个第一字符所在的节点开始,计算机设备按照从下向上的顺序,依次删除最后一个第一字符之前的字符所在的节点,直至到达第五字符串中的最后一个字符所在的节点。并且,若存在当前要删除的节点指向其他节点的兄弟指针,则计算机设备采用兄弟节点覆盖当前节点并删除兄弟节点的方式,实现删除当前节点中的字符。另外,计算机设备完成上述操作之后,重新建立字典树中除根节点之外的其他节点的失败指针。
[0174]
可选地,计算机设备通过判断除第一个节点之外的其他节点是否存在叶节点,来判断第一字符串的前缀是否包括字典树对应的第五字符串。计算机设备确定多个节点中的第一个节点不存在子节点且存在叶节点,且除第一个节点之外的其他节点存在叶节点,则确定第一字符串的前缀包括字典树对应的第五字符串。则计算机设备按照从下向上的顺序,确定除第一个节点之外的其他节点中,第一个存在叶节点的节点,并按照从下向上的顺序,从第一个节点开始,依次删除多个节点,直至到达第一个存在叶节点的节点。
[0175]
其中,计算机在删除第一字符串中的第一字符所在的节点时,可以采用先删除节点中的第一字符的方式,因此在删除节点之前该节点依然存在,且该节点对应的失败指针以及其他指针依然存在,不会影响字典树中其他字符串的匹配过程。并且,由于节点中的字符已删除,该即将删除的第一字符串也不会被匹配到。
[0176]
第三种情况,第一字符串的前缀不包括字典树对应的字符串,字典树对应的字符串的前缀也不包括第一字符串,也即是字典树对应的其他字符串中的字符,与第一字符串中的第一字符,没有重叠部分。则计算机设备可以按照多个节点从下向上的顺序,依次删除多个节点。并且,若存在当前要删除的节点指向其他节点的兄弟指针,则计算机设备采用兄弟节点覆盖当前节点并删除兄弟节点的方式,实现删除当前节点中的字符。另外,计算机设备完成上述操作之后,重新建立字典树中除根节点之外的其他节点的失败指针。
[0177]
可选地,计算机设备通过判断除第一个节点之外的其他节点是否存在叶节点,来判断第一字符串的前缀是否包括字典树对应的其他字符串。则计算机设备确定多个节点中的第一个节点不存在子节点且存在叶节点,且除第一个节点之外的其他节点不存在叶节点,则确定第一字符串的前缀不包括字典树对应的其他字符串,则计算机设备删除该多个节点。
[0178]
需要说明的是,本技术实施例中,在添加字符串时,计算机设备创建节点来存储字符串,在删除字符串时,计算机设备删除字符串中的字符所在的节点。在另一实施例中,计算机设备可以提前创建空闲节点,当需要添加字符串时,计算机设备通过修改字典树中的指针的指向,来对将空闲节点分配为存储字符串中的字符的节点。在删除字符串时,计算机设备将节点中的字符删除,并通过修改字典树中的指针的指向,将删除掉字符的节点回收为空闲节点,后续若需要存储新的字符串,可以直接使用空闲节点。图11是本技术实施例提供的一种节点的分配和回收的示意图,计算机设备创建用于存储字符的空闲节点和用于存储业务数据的空闲叶节点,空闲节点之间通过指针相互连接,空闲叶节点之间通过指针相互连接,其中,空闲节点的头指针1103指向空闲节点,该头指针1103指向的方向为空闲节点的分配方向。空闲叶节点的头指针1104指向空闲叶节点,该头指针1104指向的方向为空闲叶节点的分配方向。当字典树中的某一节点不需要再存储数据时,计算机设备将节点进行回收。其中回收节点的头指针1101指向回收的空闲节点,回收叶节点的头指针1102指向空闲叶节点。当计算机设备需要将空闲节点或者空闲叶节点分配给字典树时,优先将回收得到的空闲节点或者空闲叶节点分配给字典树。
[0179]
需要说明的是,在本技术实施例中,步骤201-205为在字典树中添加字符串的过程,步骤206-208为在字典树中删除字符串的过程。本技术实施例仅以先执行步骤201-205,再执行步骤206-208为例进行说明,而在另一实施例中,还可以先执行步骤206-208,再执行步骤201-205。或者,仅执行步骤201-205,不执行步骤206-208。或者,仅执行步骤206-208,不执行步骤201-205。
[0180]
本技术实施例提供的方法,在将目标字符串存储于字典树的过程中,由于字典树中的节点中已经存在子节点,则无需再创建该节点的子节点,而是创建链表作为子节点的兄弟节点,使得能够通过链表来存储目标字符串中的目标字符。与相关技术中提前将数组中连续的多个内存空间均作为同一节点的子节点相比,本技术实施例中在已经存在子节点的情况下,创建链表作为兄弟节点来为字符提供存储空间,由于链表为分散的内存空间而
不是连续的内存空间,因此无需提前创建多个链表,只需在需要存储字符时创建链表即可,实现了随时使用随时创建,避免了占用大量的内存空间。
[0181]
并且,创建链表作为兄弟节点,由于链表为分散的内存空间,各个链表之间互不影响,便于实现兄弟节点的插入与删除。
[0182]
并且,节点存在子节点时,计算机设备仅需创建一个指向任一内存空间的儿子指针,使得该内存空间作为子节点,由于字典树中的节点仅存储一个字符,因此仅需保证该内存空间能够存储一个字符即可,无需额外创建包括多个内存空间的数组,因此可以避免占用大量内存空间,节约了内存资源。
[0183]
并且,当第一节点存在子节点,子节点存在兄弟节点,若子节点中的字符和兄弟节点中的字符均与目标字符不相同时,则计算机设备创建链表作为子节点的兄弟节点,在链表中存储目标字符。若子节点中的字符和兄弟节点中的存在与目标字符相同的字符时,可以认为该目标字符已存储于字典树中,则计算机设备无需执行创建链表并存储目标字符的步骤,因此在字典树中实现了不同字符串中的相同字符的共享,无需多次存储相同的字符,进一步节约内存空间,且可以加快后续的字符匹配速度。
[0184]
并且,通过创建节点之间的兄弟指针将兄弟节点连接起来,后续进行字符串匹配时,按照兄弟指针的方向访问节点中的字符,从而实现字典树的字符串匹配功能。其中,各兄弟节点之间根据节点中的字符,以及字符集合中多个字符的排列顺序进行排序,因此,后续进行字符匹配时,仅需按照字符集合中多个字符的排列顺序,访问到该字符之前的字符所在的节点即可,无需访问该字符之后的字符所在的节点,因此可以提高字符匹配的速度。
[0185]
并且,在遍历目标字符串的过程中,为存储目标字符的节点添加不可访问标记,使得节点不可访问,因此在进行字符串匹配时,不会匹配到新添加的节点。并且,无需对其他节点进行加锁来限制其他节点的访问权限,即可完成字符串的添加,不影响其他字符串的匹配。当遍历目标字符串完成,创建多个节点的失败指针之后,该目标字符串成功存储于字典树中,则删除添加的不可访问标记,从而使新添加的目标字符串能够被匹配到。
[0186]
并且,在删除第一字符串的过程中,若存在当前要删除的节点指向其他节点的兄弟指针,则计算机设备采用兄弟节点覆盖当前节点并删除兄弟节点的方式,既不会影响其他字符串,也能删除当前节点中的字符,从而删除了第一字符串。
[0187]
相关技术中删除字符串时,将字典树中的其他节点进行加锁,使得其他节点无法被访问,以避免删除字符串的过程中进行字符串匹配会发生错误,但是对节点加锁会引起业务访问超时,并且增加编程的复杂度。而本技术实施例中的方法,由于仅替换掉节点中的内容,因此在删除第一字符串的过程中,该第一字符串不会被匹配到。由于节点以及节点对应的指针依然存在,因此删除第一字符串的过程不会影响字典树中其他字符串的匹配,可以避免删除字符串的过程中进行字符串匹配会发生错误。因此与对每个节点进行加锁后再删除第一字符串中的字符所在的节点相比,本技术实施例无需对节点进行加锁,即可完成字符串的删除。
[0188]
图12是本技术实施例提供的一种字符处理装置的结构示意图。参见图12,该装置包括:
[0189]
存储指令接收模块1201,用于接收携带目标字符串的存储指令,目标字符串包括按顺序排列的多个目标字符;
[0190]
遍历模块1202,用于按照多个目标字符的排列顺序遍历多个目标字符;
[0191]
节点确定模块1203,用于对于当前遍历的目标字符,确定字典树中的第一节点;目标字符是目标字符串中的第一个字符的情况下,第一节点为字典树中的根节点,或者,目标字符不是目标字符串中的第一个字符的情况下,第一节点为目标字符的上一个字符所在的节点;
[0192]
链表创建模块1204,用于第一节点存在子节点,则创建链表,作为子节点的兄弟节点;
[0193]
字符存储模块1205,用于在链表中存储目标字符。
[0194]
本技术实施例提供的装置,在将目标字符串存储于字典树的过程中,由于字典树中的节点中已经存在子节点,则无需再创建该节点的子节点,而是创建链表作为子节点的兄弟节点,使得能够通过链表来存储目标字符串中的目标字符。与相关技术中提前将数组中连续的多个内存空间均作为同一节点的子节点相比,本技术实施例中在已经存在子节点的情况下,创建链表作为兄弟节点来为字符提供存储空间,由于链表为分散的内存空间而不是连续的内存空间,因此无需提前创建多个链表,只需在需要存储字符时创建链表即可,实现了随时使用随时创建,避免了占用大量的内存空间。
[0195]
可选地,参见图13,装置还包括:
[0196]
数组创建模块1206,用于第一节点不存在子节点,则在第一节点中创建指向任一内存空间的儿子指针,儿子指针用于指示内存空间作为第一节点的子节点;
[0197]
字符存储模块1205,还用于在内存空间中存储目标字符。
[0198]
可选地,参见图13,链表创建模块1204,包括:
[0199]
第一链表创建单元1214,用于第一节点存在子节点,子节点不存在兄弟节点,且子节点中的字符与目标字符不相同,则创建链表,作为子节点的兄弟节点。
[0200]
可选地,参见图13,链表创建模块1204,包括:
[0201]
第二链表创建单元1224,用于第一节点存在子节点,子节点存在兄弟节点,子节点中的字符和兄弟节点中的字符均与目标字符不相同,则创建链表,作为子节点的兄弟节点。
[0202]
可选地,参见图13,链表创建模块1204,包括:
[0203]
第三链表创建单元1234,用于第一节点存在子节点且子节点不存在兄弟节点,则创建链表作为第二节点;
[0204]
第一指针创建单元1244,用于在子节点中创建指向第二节点的兄弟指针,兄弟指针用于指示第二节点为子节点的兄弟节点。
[0205]
可选地,参见图13,链表创建模块1204,包括:
[0206]
第四链表创建单元1254,用于第一节点存在子节点且子节点存在兄弟节点,则创建链表作为第二节点;
[0207]
第二指针创建单元1264,用于在子节点的最后一个兄弟节点中创建指向第二节点的兄弟指针,兄弟指针用于指示第二节点为最后一个兄弟节点的兄弟节点。
[0208]
可选地,参见图13,目标字符串中的多个目标字符属于字符集合,字符集合中包括按顺序排列的多个字符,链表创建模块1204,包括:
[0209]
第五链表创建单元1274,用于第一节点存在子节点且子节点存在至少一个兄弟节点,则创建链表作为第二节点;
[0210]
第三指针创建单元1284,用于根据至少一个兄弟节点中存储的字符和目标字符在字符集合中的顺序,对至少一个兄弟节点和第二节点进行排序,并按照节点顺序创建兄弟指针。
[0211]
可选地,参见图13,装置还包括:
[0212]
节点确定模块1203,还用于确定目标字符串中的最后一个字符所在的第三节点;
[0213]
链表创建模块1204,还用于创建链表作为第三节点的叶节点;
[0214]
业务数据存储模块1207,用于在叶节点中存储目标字符串对应的业务数据。
[0215]
可选地,参见图13,装置还包括:
[0216]
失败指针创建模块1208,用于遍历多个目标字符完成,则创建字典树中的多个节点的失败指针,节点的失败指针指向节点中存储的字符匹配失败时跳转到的节点。
[0217]
可选地,参见图13,装置还包括:
[0218]
标记添加模块1209,用于对于当前遍历的目标字符,为存储目标字符的节点添加不可访问标记,不可访问标记用于表示节点处于不可访问状态;
[0219]
标记删除模块12010,用于将添加的多个不可访问标记删除。
[0220]
可选地,参见图13,装置还包括:
[0221]
删除指令接收模块12011,用于接收携带第一字符串的删除指令,第一字符串包括多个第一字符;
[0222]
节点确定模块1203,还用于确定字典树中多个第一字符所在的多个节点;
[0223]
节点删除模块12012,用于按照多个节点从下向上的顺序,删除多个节点中满足删除条件的节点,删除条件为节点不存在子节点和叶节点。
[0224]
可选地,参见图13,装置还包括:
[0225]
叶节点删除模块12013,用于按照多个节点从下向上的顺序,确定多个节点的第一个节点存在子节点,则将第一个节点的叶节点删除。
[0226]
可选地,参见图13,节点删除模块12012,包括:
[0227]
节点删除单元12112,用于多个节点中的第四节点满足删除条件,且第四节点中存在指向第五节点的兄弟指针,则以第五节点中的内容替换第四节点中的内容,删除第五节点。
[0228]
可选地,参见图13,节点删除单元12112,还用于:
[0229]
第五节点中存在指向第六节点的兄弟指针,则以第五节点中的兄弟指针替换第四节点中的兄弟指针。
[0230]
需要说明的是:上述实施例提供的字符处理装置在处理字符时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将计算机设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的字符处理装置与字符处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0231]
图14示出了本技术一个示例性实施例提供的终端1400的结构示意图。终端1400可以用于执行上述字符处理方法中计算机设备所执行的步骤。
[0232]
通常,终端1400包括有:处理器1401和存储器1402。
[0233]
处理器1401可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处
理器1401可以采用dsp(digital signal processing,数字信号处理)、fpga(field-programmable gate array,现场可编程门阵列)、pla(programmable logic array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1401也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(central processing unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1401可以集成有gpu(graphics processing unit,图像处理的交互器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1401还可以包括ai(artificial intelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。
[0234]
存储器1402可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1402还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1402中的非暂态的计算机可读存储介质用于存储至少一条指令,该至少一条指令用于被处理器1401所具有以实现本技术中方法实施例提供的字符处理方法。
[0235]
在一些实施例中,设备1400还可选包括有:外围设备接口1403和至少一个外围设备。处理器1401、存储器1402和外围设备接口1403之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1403相连。具体地,外围设备包括:射频电路1404、显示屏1405和电源1406中的至少一种。
[0236]
外围设备接口1403可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器1401和存储器1402。在一些实施例中,处理器1401、存储器1402和外围设备接口1403被集成在同一芯片或电路板上;在一些其他实施例中,处理器1401、存储器1402和外围设备接口1403中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
[0237]
射频电路1404用于接收和发射rf(radio frequency,射频)信号,也称电磁信号。射频电路1404通过电磁信号与通信网络以及其他通信设备进行通信。射频电路1404将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路1404包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路1404可以通过至少一种无线通信协议来与其它设备进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wireless fidelity,无线保真)网络。在一些实施例中,射频电路1404还可以包括nfc(near field communication,近距离无线通信)有关的电路,本技术对此不加以限定。
[0238]
显示屏1405用于显示ui(user interface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏1405是触摸显示屏时,显示屏1405还具有采集在显示屏1405的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器1401进行处理。此时,显示屏1405还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏1405可以为一个,设置在终端1400的前面板;在另一些实施例中,显示屏1405可以为至少两个,分别设置在终端1400的不同表面或呈折叠设计;在另一些实施例中,显示屏1405可以是柔性显示屏,设置在终端1400的弯曲表面上或折
叠面上。甚至,显示屏1405还可以设置成非矩形的不规则图形,也即异形屏。显示屏1405可以采用lcd(liquid crystal display,液晶显示屏)、oled(organic light-emitting diode,有机发光二极管)等材质制备。
[0239]
电源1406用于为终端1400中的各个组件进行供电。电源1406可以是交流电、直流电、一次性电池或可充电电池。当电源1406包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
[0240]
本领域技术人员可以理解,图14中示出的结构并不构成对终端1400的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
[0241]
图15是本技术实施例提供的一种服务器的结构示意图,该服务器1500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,cpu)1501和一个或一个以上的存储器1502,其中,所述存储器1502中存储有至少一条指令,所述至少一条指令由所述处理器1501加载并执行以实现上述各个方法实施例提供的方法。当然,该服务器还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器还可以包括其他用于实现设备功能的部件,在此不做赘述。
[0242]
服务器1500可以用于执行上述字符处理方法中计算机设备所执行的步骤。
[0243]
本技术实施例还提供了一种用于处理字符的计算机设备,该计算机设备包括处理器和存储器,存储器中存储有至少一条指令,该至少一条指令由处理器加载并执行,以实现上述实施例的字符处理方法。
[0244]
本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有至少一条指令,该至少一条指令由处理器加载并执行,以实现上述实施例的字符处理方法。
[0245]
本技术实施例还提供了一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取所述计算机指令,处理器执行所述计算机指令,使得所述计算机设备实现如上述方面所述的字符处理方法。
[0246]
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0247]
以上所述仅为本技术实施例的可选实施例,并不用以限制本技术实施例,凡在本技术实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献