2012-09-09 14:38:59 -04:00
|
|
|
! Copyright (C) 2012 John Benediktsson
|
|
|
|
! See http://factorcode.org/license.txt for BSD license
|
2015-05-05 19:08:55 -04:00
|
|
|
USING: accessors assocs fry kernel math sequences
|
|
|
|
sequences.rotated sorting suffix-arrays.private ;
|
2012-09-09 14:38:59 -04:00
|
|
|
IN: math.transforms.bwt
|
|
|
|
|
2015-04-28 22:28:14 -04:00
|
|
|
! Semi-efficient versions of Burrows-Wheeler Transform
|
2012-09-09 14:38:59 -04:00
|
|
|
|
2015-05-05 19:08:55 -04:00
|
|
|
: bwt* ( seq -- newseq )
|
|
|
|
[
|
|
|
|
dup suffixes natural-sort
|
|
|
|
[ dup from>> [ to>> ] [ nip ] if-zero 1 - over nth ]
|
|
|
|
] [ map-as ] bi nip ;
|
|
|
|
|
2015-04-28 22:28:14 -04:00
|
|
|
: bwt ( seq -- i newseq )
|
|
|
|
dup all-rotations natural-sort
|
|
|
|
[ [ sequence= ] with find drop ]
|
|
|
|
[ [ last ] rot map-as ] 2bi ;
|
2012-09-09 14:38:59 -04:00
|
|
|
|
2015-04-28 22:28:14 -04:00
|
|
|
: ibwt ( i newseq -- seq )
|
|
|
|
[ length ]
|
|
|
|
[ <enum> sort-values '[ _ nth first2 ] ]
|
|
|
|
[ replicate-as ] tri nip ;
|