Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Building a suffix tree for string "aabaaabb"
- The problem: during step 6, only 1 split node (Node 6) was created, i.e. it's suffix link will be null.
- But in a correct suffix tree, the link for (Node 6) must be (Node 3). Because of that, the resulting tree looks like this:
- ROOT. children: (3 (a), 10 (b))
- 3 (a) children: (6 (a), 4 (baaabb))
- 6 (a) children: (7 (abb), 8 (b))
- 7 (abb) children: ()
- 8 (b) children: (2 (aaabb), 9 (b)) link: 10(b)
- 2 (aaabb) children: ()
- 9 (b) children: ()
- 4 (baaabb) children: ()
- 10 (b) children: (5 (aaabb), 11 (b))
- 5 (aaabb) children: ()
- 11 (b) children: ()
- While CORRECT Suffix Tree must look like this:
- ROOT (); children: (Node 3 (a), Node 12 (b)); link: -1
- Node 3 (a); children: (Node 6 (a), Node 10 (b)); link: ROOT
- Node 6 (a); children: (Node 7 (abb), Node 8 (b)); link: Node 3 (a)
- Node 7 (abb); children: (); link: -1
- Node 8 (b); children: (Node 2 (aaabb), Node 9 (b)); link: Node 10 (b)
- Node 2 (aaabb); children: (); link: -1
- Node 9 (b); children: (); link: -1
- Node 10 (b); children: (Node 4 (aaabb), Node 11 (b)); link: Node 12 (b)
- Node 4 (aaabb); children: (); link: -1
- Node 11 (b); children: (); link: -1
- Node 12 (b); children: (Node 5 (aaabb), Node 13 (b)); link: ROOT ()
- Node 5 (aaabb); children: (); link: -1
- Node 13 (b); children: (); link: -1
- The steps of your approach are:
- Step 1. BEFORE adding 'a'---------------------------------------------
- active_point: (1, 'a', 0), remainder: 1
- AFTER adding 'a'
- active_point: (1, 'a', 0), remainder: 0
- -------TREE IS:-------
- ROOT. children: (2 (a))
- 2 (a) children: ()
- --------------------------------------------------------------
- Step 2. BEFORE adding 'a'---------------------------------------------
- active_point: (1, 'a', 0), remainder: 1
- AFTER adding 'a'
- active_point: (1, 'a', 1), remainder: 1
- -------TREE IS:-------
- ROOT. children: (2 (aa))
- 2 (aa) children: ()
- --------------------------------------------------------------
- Step 3. BEFORE adding 'b'---------------------------------------------
- active_point: (1, 'a', 1), remainder: 2
- AFTER adding 'b'
- active_point: (1, 'b', 0), remainder: 0
- -------TREE IS:-------
- ROOT. children: (3 (a), 5 (b))
- 3 (a) children: (2 (ab), 4 (b))
- 2 (ab) children: ()
- 4 (b) children: ()
- 5 (b) children: ()
- --------------------------------------------------------------
- Step 4. BEFORE adding 'a'---------------------------------------------
- active_point: (1, 'b', 0), remainder: 1
- AFTER adding 'a'
- active_point: (3, '', 0), remainder: 1
- -------TREE IS:-------
- ROOT. children: (3 (a), 5 (ba))
- 3 (a) children: (2 (aba), 4 (ba))
- 2 (aba) children: ()
- 4 (ba) children: ()
- 5 (ba) children: ()
- --------------------------------------------------------------
- Step 5. BEFORE adding 'a'---------------------------------------------
- active_point: (3, '', 0), remainder: 2
- AFTER adding 'a'
- active_point: (3, 'a', 1), remainder: 2
- -------TREE IS:-------
- ROOT. children: (3 (a), 5 (baa))
- 3 (a) children: (2 (abaa), 4 (baa))
- 2 (abaa) children: ()
- 4 (baa) children: ()
- 5 (baa) children: ()
- --------------------------------------------------------------
- Step 6. BEFORE adding 'a'---------------------------------------------
- active_point: (3, 'a', 1), remainder: 3
- AFTER adding 'a'
- active_point: (6, '', 0), remainder: 2
- -------TREE IS:-------
- ROOT. children: (3 (a), 5 (baaa))
- 3 (a) children: (6 (a), 4 (baaa))
- 6 (a) children: (7 (a), 2 (baaa))
- 7 (a) children: ()
- 2 (baaa) children: ()
- 4 (baaa) children: ()
- 5 (baaa) children: ()
- --------------------------------------------------------------
- Step 7. BEFORE adding 'b'---------------------------------------------
- active_point: (6, '', 0), remainder: 3
- AFTER adding 'b'
- active_point: (6, 'b', 1), remainder: 3
- -------TREE IS:-------
- ROOT. children: (3 (a), 5 (baaab))
- 3 (a) children: (6 (a), 4 (baaab))
- 6 (a) children: (7 (ab), 2 (baaab))
- 7 (ab) children: ()
- 2 (baaab) children: ()
- 4 (baaab) children: ()
- 5 (baaab) children: ()
- --------------------------------------------------------------
- Step 8. BEFORE adding 'b'---------------------------------------------
- active_point: (6, 'b', 1), remainder: 4
- AFTER adding 'b'
- active_point: (10, '', 0), remainder: 2
- -------TREE IS:-------
- ROOT. children: (3 (a), 10 (b))
- 3 (a) children: (6 (a), 4 (baaabb))
- 6 (a) children: (7 (abb), 8 (b))
- 7 (abb) children: ()
- 8 (b) children: (2 (aaabb), 9 (b)) link: 10(b)
- 2 (aaabb) children: ()
- 9 (b) children: ()
- 4 (baaabb) children: ()
- 10 (b) children: (5 (aaabb), 11 (b))
- 5 (aaabb) children: ()
- 11 (b) children: ()
- --------------------------------------------------------------
Add Comment
Please, Sign In to add comment