Sepinoud Azimi Exact string matching with reaction systems TUCS Technical Report No 1104, February 2014 Exact string matching with reaction systems Sepinoud Azimi Åbo Akademi University, Department of Computer Science Joukahaisenkatu 3-5A, 20520 Turku, Finland [email protected] TUCS Technical Report No 1104, February 2014 Abstract Reaction systems are a formal framework with underlying rationale adopted from the biochemical reactions. There are two main assumptions behind every reaction system:1) if a reactant is present in a state, it is sufficiently present, and 2) if a reactant does not take part in any running reaction of the systems’s current state, it vanishes from the environment. This study is an attempt to expand the investigation of reaction systems from an applicative point of view. To this end, two reaction systems are defined through whose interactive processes, the corresponding suffix tree to a given string is obtained, which is subsequently employed for the exact string matching. It is concluded that reaction systems are expressive enough to be used as a modeling framework in multidisciplinary applications. Keywords: reaction systems, suffix trees, string matching. TUCS Laboratory Computational Biomodeling Laboratory (Combio Lab) 1 Introduction Reaction systems is a formal framework, first introduced in [2], to capture the interactions between chemical reactions with a qualitative approach. Reaction systems are built based on the biochemical reactions intuition. Each reaction is a triplet a = (R, I, P ), such that R, I and P are finite, non-empty sets where R and I are disjoint. The sets R, I and P represent the set of reactants, the set of inhibitors, and the set of products, respectively. In any reaction systems, two main assumptions are considered. First the threshold supply assumption, stating that, either a reactant is present and then there is enough amount of it to facilitate the enabling of the corresponding reactions or it is not present and consequently no reaction having this element within its set of reactants can take place. The second assumption is called no permanency and indicates that a reactant which is not sustained by any reaction disappears from the environment. In this work, we show the expressive power of reaction systems when dealing with one of the well known problems in computer science, i.e., exact string matching, using the concept of suffix trees. Suffix trees were first introduced in [5] and the more simplified version was proposed in [3]. In order to prove the expressiveness of reaction systems we build a suffix tree for a given string using the framework of the reaction systems and furthermore use it to do the exact string matching for two arbitrary strings. This paper is organized as follows. In Section 2 we recall the basic notation and terminology concerning reaction systems and suffix trees. In Section 3 we discuss a representation of suffix trees using reaction systems and apply this knowledge to do the exact string matching in Section 4. Finally, we conclude with some discussion in Section 5. 2 Preliminaries We recall in this section some of the basic definitions we need throughout the paper. A suffix tree of a given string is a rooted tree which includes the following information: (i) the number of its branches, the corresponding suffix to each branch, (iii) if a branch is broken and (iv) where it is broken. The formal definition of a suffix tree is provided in Definition 1. Definition 1. [3] A suffix tree Tu for a string u[1 . . . n] of length n is a rooted tree with exactly n leaves labeled 1, . . . , n. A branch denoted by t(i), is a path from a node to a leaf which is corresponding to the suffix u[i . . . n] of string u, where i is the label of the leaf on the tree. There are no two edges out of a node which starts with the same character and two branches t(i) and t(j), for i < j, intersect on their first t letters where u[i . . . i + t] = u[j . . . j + t], then we say, the branch labeled i is broken on its tth letter. 1 Figure 1: The suffix tree corresponding to string acbace. Various algorithms have been proposed to build a suffix tree for a given string (e.g., see [3], [4]). The algorithm proposed in [3] has a better conceptual simplicity comparing to the one of [4], although the latter have a better time complexity. We have chosen to employ the algorithm of [3] in this paper, due to the fact that our purpose here is to prove the expressive power of reaction systems and complexity is not the main concern. Therefore, we decided to choose the more elementary one which is presented in Algorithm 1. Algorithm 1. [3] Let u be a string of length n and Tu its corresponding suffix tree. Tu is built applying the following steps: Step 1 Add a root and a leaf and number the leaf by 1. Connect the root and leaf number 1 by an edge labeled u. Step i, 1<i ≤ n for suffix u[i . . . n], find the path j from the root intersecting with the first t letters of u[i . . . n]. If no such an intersection can be found, add a new branch from the root and label it by u[i . . . n] and number its leaf by i, otherwise split the branch j on its t + 1 letter and number the new branch’s leaf by i. Example 1. Let u = acbace be a string, the tree given in Figure 1 is its corresponding suffix tree. Reaction systems have been introduced in [2] as a formal framework for the analysis of biochemical networks. Here we provide the formal definition of the reaction systems framework. Definition 2. [1] A reaction is a triplet a = (R, I, P ), where R, I, P are finite nonempty sets with R ∩ I = ∅. If S is a set such that R, I, P ⊆ S, then a is a reaction in S and rac(S) denotes the set of all reactions in S. 2 Definition 3. [1] Let T be a finite set, i. Let a be a reaction. Then a is enabled by T , denoted by ena (T ), if Ra ⊆ T and Ia ∩ T = ∅. The result of a on T , denoted by resa (T ), is defined by: resa (T ) = Pa if ena (T ) is enabled, and resa (T ) = ∅ otherwise. ii. Let A be a finite set of reactions. The result of A on T , denoted by resA (T ), ∪ is defined by: resA (T ) = a∈A resa (T ). Definition 4. [1] A reaction system is an ordered pair A = (S, A) such that S is a finite set, and A ⊆ rac(S). Definition 5. [1] Let A = (S, A) be a reaction system and let n > 0 be an integer. An (n-step) interactive process in A is a pair π = (γ, δ) of finite sequences such that γ = C1 , . . . , Cn and δ = D1 , . . . , Dn , where C1 , . . . , Cn , D1 , . . . , Dn ⊆ S, D1 = ∅, and Di = resA (Di ∪ Ci ) for all i ∈ {2, . . . , n}. Ci is called context of step i. 3 Reaction system representation of a suffix tree In this section our goal is to present a reaction system which builds the suffix tree of a string u. In the following definition, a notion is proposed to give the exact positions of every letter a in a string u. Definition 6. Let u be a string of length n. For every a ∈ u, we define occu (a) to be the set of positions on which a appears in u, O(u) = {(a, occu (a)) | a ∈ u} and l(O(u)) = n. Example 2. Let u = acbace be a string of length 6, O(u) = {(a, {1, 4}), (b, {3}), (c, {2, 5}), (e, {6})}. Definition 7. Let u and v be two different strings. We say O(u) ⊆∗ O(v) if and only if for every (a, L) ∈ O(u), (a, L′ ) ∈ O(v), L ⊆ L′ and for every k1 ∈ L and k2 ∈ L′ \ L, k1 < k2 . Definition 8. Let u and v be two strings. We define ∩∗ as follows: (c, L) ∈ O(u) ∩∗ O(v) if and only if (c, Li ) ∈ O(u), (c, Lj ) ∈ O(v) and Li ∩ Lj = L. In Definition 9, we propose a reaction system through which the corresponding suffix tree of a given string can be produced. The intuition behind the reaction system presented in Definition 9 is to have all the information provided by the suffix tree in the result state, i.e., (i) the number of branches of the tree, (ii) the corresponding suffix of the branch, (iii) if a branch is broken and (iv) where it is broken. 3 Definition 9. Let u be a string of length n and A = (S, A) be a reaction system where: S = {(O(u[i · · · n]), i, K)|1 ≤ i ≤ n} ∪ {1, · · · , n} ∪ {final} s.t., K is a set where ∀j ∈ K : j = s(t) such that s, t ∈ N. A = {a1 , · · · , an+1 } is the set of reactions, where: a1 = ({(O(u), 1, ∅), 1}, {final}, {(O(u), 1, ∅)}), ai = (Rai , Iai , Pai ) for 2 ≤ i ≥ n s.t., • Rai = {(O(u[1 · · · n]), 1, K1 ), (O(u[2 · · · n]), 2, K2 ), . . . , (O(u[i−1 · · · n]), i − 1, Ki−1 ), (O(u[i · · · n]), i, Ki ), i}; • Iai = {final}; • Pai = {(O(u[1 · · · n]), 1, K1 ), (O(u[2 · · · n]), 2, K2 ), . . . , (O(u[i−1 · · · n]), i − 1, Ki−1 ), (O(u[i · · · n]), i, Ki′ )}), s.t.: {s} = min{m | O(u[i · · · n]) ⊆∗ O(u[m · · · n])} where m ∈ {1, · · · , i−1}, r = l(O(u[i · · · n]) ∩∗ O(u[m · · · n]) and { {s(r)}, {s} = ̸ ∅; Ki′ = ∅, otherwise. an+1 = ({(O(v), i, K), final}, {dI }, {(O(v), i, K), final}). The products of different states of a reaction system are given by a set. Therefore, we need a set representing the suffix tree of a string. In Definition 10 such a representation is proposed. Definition 10. Let u be a string of length n, Tu be a suffix tree corresponding to it and t(i) the branch of Tu corresponding to u[i . . . n]. The set SST (Tu ) is called the set representation of suffix tree Tu where: SST (Tu ) = {SSTi (Tu )|1 ≤ i ≤ n} and SSTi (Tu ) = (O(u[i . . . n]), i, K) is a tuple corresponding to branch t(i), where O(u[i . . . n]) corresponds to the suffix of t(i), i is the label of the branch and K represents the position on which t(i) is broken. The definition of K is as follows: {s(t)}, u[s . . . n] is the longest suffix of u such that u[i . . . t] = u[s . . . s + t] and s < i; K= ∅, otherwise. Example 3. The set representation of the suffix tree given in Figure 1 is as follows: SST (Tu ) = {({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}) , (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {3}), (b, {1}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(c, {1}), (e, {2})}, 5, {2(1)}), ({(e, {1})}, 6, ∅)}. 4 Theorem 1. Let A be the reaction system of Definition 9, u a string of length n, C(m) = {(O([m . . . n]), m, ∅)} ∪ {m} the context added to A in state m, for m ≤ n and C(n + 1) = {final} the context of state n + 1. PA (n + 1) is the set representation of the suffix tree corresponding to string u. Proof. Claim 1. Let u be a string of length n, and Tu the corresponding suffix tree. For every i ≤ n, PA (i) = {SSTj (Tu )|j ∈ {1, . . . , i}}. Proof of Claim by induction: • If i = 1, then C(1) = {(O(u[1 . . . n]), 1, ∅)} ∪ {1}. Reaction a1 is enabled and {(u[1 . . . n], 1, ∅)} = {SST1 (T )} = PA (1). • If i = k − 1, then by induction hypothesis PA (k − 1) = {SSTj (T )|j ∈ {1, . . . , k − 1}}. • If i = k, then C(k) = {(O(u[k . . . n]), k, ∅)} ∪ {k}. There are two possible cases: i. There is no j < k such that u[j . . . j + t] = u[k . . . k + t], ii. j is the smallest integer such that u[j . . . j + t] = u[k . . . k + t] and j < k. Case i Reactions a1 and ak are enabled, therefore: PA (k) = PA (k − 1) ∪ {O((u[k . . . n]), k, ∅)}. Case ii Reactions a1 and ak are enabled, therefore: PA (k) = PA (k − 1) ∪ {(O((u[k . . . n]), i, {j(k)})}. In the (n + 1)th state, reaction an+1 is enabled. Therefore, PA (n + 1) = {SST1 (T ), . . . , SSTn (T )} = SST (T ). Example 4. Let u = acbace and ∀m ≤ 6, C(m) = {(O(u[m . . . 6]), m, ∅)}∪{m} and C(7) = {final}. The interactive process presented in the Tables 1, 2, 3 and 4 shows that the product of the seventh state of the system is the same as the set representation in Example 3. 4 String matching with reaction systems Exact String matching is to try to find a place where one or several occurrences of string v are found within a larger string u. In this case we say, string v is matched with string u. In this section, we aim to do exact string matching through a reaction system. The reaction system presented in Definition 11 is used to achieve such a goal. 5 i Wi Ci Di C i ∪ Di 1 ∅ ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {1, 4}), (c, {2, 5}), (b, {3})}, 1, ∅), ({(a, {1, 4}), (c, {2}), (b, {3})}, 1, ∅), ({(a, {1}), (c, {2}), (b, {3})}, 1, ∅), ({(a, {1}), (c, {2})}, 1, ∅), ({(a, {1})}, 1, ∅), 1 ∅ ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {1, 4}), (c, {2, 5}), (b, {3})}, 1, ∅), ({(a, {1, 4}), (c, {2}), (b, {3})}, 1, ∅), ({(a, {1}), (c, {2}), (b, {3})}, 1, ∅), ({(a, {1}), (c, {2})}, 1, ∅), ({(a, {1})}, 1, ∅), 1 2 ∅ ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {3}), (c, {1, 4}), (b, {2})}, 2, ∅), ({(a, {3}), (c, {1}), (b, {2})}, 2, ∅), ({(c, {1}), (b, {2}))}, 2, ∅), ({(c, {1})}, 2, ∅), 2 ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅) ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {3}), (c, {1, 4}), (b, {2})}, 2, ∅), ({(a, {3}), (c, {1}), (b, {2})}, 2, ∅), ({(c, {1}), (b, {2}))}, 2, ∅), ({(c, {1})}, 2, ∅), 2 Table 1: The interactive process of Example 4. Reactions enabled i Wi Ci Di Ci ∪ Di a1 3 ∅ ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {2}), (c, {1, 3})}, 3, ∅), ({(a, {2}), (c, {1})}, 3, ∅), ({(c, {1})}, 3, ∅), 3 ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅) ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {2}), (c, {1, 3})}, 3, ∅), ({(c, {1})}, 3, ∅), 3 a1 , a2 4 ∅ ({(a, {1}), (c, {2}), (e, {3})}, 4, ∅), ({(a, {1}), (c, {2})}, 4, ∅), ({(a, {1})}, 4, ∅), 4 ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅) ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, ∅), ({(a, {1}), (c, {2})}, 4, ∅), ({(a, {1})}, 4, ∅), 4 Table 2: The interactive process of Example 4. 6 i Wi Ci Di C i ∪ Di 5 ∅ ({(c, {1}), (e, {2})}, 5, ∅), ({(c, {1}), 5, ∅), 5 ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), 6 ∅ ({(e, {1})}, 6, ∅), 6 ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(c, {1}), (e, {2})}, 5, {2(1)}), ({(c, {1}), (e, {2})}, 5, ∅), ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(c, {1}), 5, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(c, {1}), (e, {2})}, 5, {2(1)}), 5 ({(e, {1})}, 6, ∅), 6 Table 3: The interactive process of Example 4. i Wi Ci Di C i ∪ Di 7 ∅ (final, {6}) ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(c, {1}), (e, {2})}, 5, {2(1)}), ({(e, {1})}, 6, ∅), ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(c, {1}), (e, {2})}, 5, {2(1)}), ({(e, {1})}, 6, ∅), (final, {6}) 8 ∅ ∅ ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(c, {1}), (e, {2})}, 5, {2(1)}), ({(e, {1})}, 6, ∅), ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), ({(a, {2}), (c, {1, 3}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(c, {1}), (e, {2})}, 5, {2(1)}), ({(e, {1})}, 6, ∅) Table 4: The interactive process of Example 4. 7 Definition 11. Let u and v be two strings and SST (Tu ) the set representation of the suffix tree corresponding to u. Let Ap = (Sp , Ap ) be a reaction system where • Sp = SST (Tu ) ∪ {O(v)} ∪ {matching} • Ap = {a1 , . . . , an } s.t. for every 1 ≤ i ≤ n: – Rai = {O(v)} ∪ SSTi (Tu ); – Iai = dI ; { ∅, O(v) ∩∗ O(u[i . . . n]) ̸= O(v); – Pai = {matching , i}, O(v) ∩∗ O(u[i . . . n]) = O(v). Theorem 2. If u and v are two strings and {SST (Tu ), O(v)} the initial state of the reaction system in Definition 11, then the second state of the reaction system represents the exact string matching of string v with u. Proof. Let u = b1 b2 . . . bn and v = c1 c2 . . . cm . There are two possible cases: i. v is not matched with u: @SSTi (Tu ) : (bi , L) ∈ O(u[i . . . n]), 1 ∈ L and bi = c1 ⇒ @SSTi (Tu ) : (c1 , L′1 ) ∈ O(u[i . . . n]) ⇒ ∀i, O(v) ∩∗ O(u[i . . . n]) = ∅ ⇒ There is no matching. ii. v is matched with u on k positions: Let j ∈ {i1 , i2 , . . . , ik } be one of the positions on which v is matched with u. Therefore, u′ = bj bj+1 . . . bj+m = c1 c2 . . . cm = v. Hence, the O(u′ ) = O(v). Also, from the definition of set representation of the suffix tree we have: O(u′ ) ∩∗ O(u[i . . . n]) = O(u′ ) = O(v) and consequently {Matching, j} ∈ D2 . With similar argument, it is easy to show that {matching, i1 , i2 , . . . , ik } ∈ D2 . Since for every i ̸= i1 , i2 , . . . , ik , O(v) ∩∗ O(u[i . . . n]) = ∅, therefore D2 = {matching, i1 , i2 , . . . , ik } and hence D2 provides all the positions on which v is matched with u. Example 5. Let O(u) = {(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})} and O(v) = {(a, {1}), (c, {2}, (e, {3})}. In order to match O(v) with O(u) we run the corresponding interactive process for two consecutive states. The interactive process is presented in Table 5. Hence, v is matched with u on its fourth position. 5 Conclusion We demonstrated in this work the expressive power and the flexibility of reaction systems as a modeling tool for computer science applications. In Section 3 we exploited reaction systems to build a suffix tree and used it to do exact string matching. We proved that, 8 i 0 ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), Wi ({(a, {2}), (c, {3}), (b, {1}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(c, {1}), (e, {2})}, 5, {2(1)}), ({(e, {1}), 6, ∅)} ,{(a, {1}), (c, {2}, (e, {3})} Ci ∅ ({(a, {1, 4}), (c, {2, 5}), (b, {3}), (e, {6})}, 1, ∅), ({(a, {3}), (c, {1, 4}), (b, {2}), (e, {5})}, 2, ∅), Di ({(a, {2}), (c, {3}), (b, {1}), (e, {4})}, 3, ∅), ({(a, {1}), (c, {2}), (e, {3})}, 4, {1(2)}), ({(c, {1}), (e, {2})}, 5, {2(1)}), ({(e, {1}), 6, ∅)} ,{(a, {1}), (c, {2}, (e, {3})} Note O(v) ∩∗ S4 [4 . . . 6] = O(v) 1 {matching, 4} ∅ {matching, 4} Table 5: The interactive process of Example 5. the suffix tree built through the interactive processes of a specific reactions system corresponds to the one obtained via regular computer science algorithms. Furthermore, we showed that it is possible to do exact string matching using the reaction systems framework. In conclusion, our intention was to deepen the investigation of reaction systems from an applicative point of view and to confirm the feasibility and the expressive power as a modeling framework in multidisciplinary applications. References [1] R. Brijder, A. Ehrenfeucht, M. Main, and G. Rozenberg. A tour of reaction systems. International Journal of Foundations of Computer Science, 22(07):1499–1517, 2011. [2] Andrzej Ehrenfeucht and Grzegorz Rozenberg. Reaction systems. Fundamenta Informaticae, 75(1):263–280, 2007. [3] Edward M McCreight. A space-economical suffix tree construction algorithm. Journal of the ACM (JACM), 23(2):262–272, 1976. [4] Esko Ukkonen. On-line construction of suffix trees. Algorithmica, 14(3):249–260, 1995. [5] Peter Weiner. Linear pattern matching algorithms. In Switching and Automata Theory, 1973. SWAT’08. IEEE Conference Record of 14th Annual Symposium on, pages 1–11. IEEE, 1973. 9 Joukahaisenkatu 3-5 A, 20520 TURKU, Finland | www.tucs.fi University of Turku Faculty of Mathematics and Natural Sciences • Department of Information Technology • Department of Mathematics Turku School of Economics • Institute of Information Systems Sciences Åbo Akademi University • Department of Computer Science • Institute for Advanced Management Systems Research ISBN 978-952-12-3024-0 ISSN 1239-1891

© Copyright 2022 Paperzz