Suffix tree: Difference between revisions

m
→‎{{header|Perl 6}}: Make a complete, runnable example, fix syntax errors
(Fixed language for example)
m (→‎{{header|Perl 6}}: Make a complete, runnable example, fix syntax errors)
Line 557:
 
=={{header|Perl 6}}==
{{Works with|rakudoRakudo|2017-012018.03}}
Here is quite a naive algorithm, probably <math>O(n^2)</math>.
 
The display code is a variant of the [[visualize_a_tree#Perl6|visualize a tree]] task code.
 
<lang Perl 6>multi suffix-tree(Str $str) { suffix-tree flat map &flip, [\~] $str.flip.comb }
Line 564 ⟶ 566:
hash
@a == 0 ?? () !!
@a == 1 ?? ( @a[0] => [] ) !!
gather for @a.classify(*.substr(0, 1)) {
my $subtree = suffix-tree(grep *.chars, map *.substr(1), .value[]);
Line 574 ⟶ 576:
}
}
}
}</lang>
 
<lang Perl 6>my $tree = root => suffix-tree 'banana$';
Displaying the tree is done with the code from [[visualize a tree]]:
 
<lang Perl 6>my $tree = root => suffix-tree 'banana$';
.say for visualize-tree $tree, *.key, *.value.listList;</lang>
 
sub visualize-tree($tree, &label, &children,
:$indent = '',
:@mid = ('├─', '│ '),
:@end = ('└─', ' '),
) {
sub visit($node, *@pre) {
| gather {
take @pre[0] ~ $node.&label;
my @children := $node.&children;
my $end = @children.end;
for @children.kv -> $_, $child {
when $end { take visit($child, (@pre[1] X~ @end)) }
default { take visit($child, (@pre[1] X~ @mid)) }
}
}
}
visit($tree, $indent xx 2);
}</lang>
 
{{out}}
10,333

edits