math.transforms.bwt: slightly faster, remove suffixes because it seems buggy.
parent
e62da0bc64
commit
52043e60d5
|
@ -1,8 +1,13 @@
|
||||||
! Copyright (C) 2012 John Benediktsson
|
! Copyright (C) 2012 John Benediktsson
|
||||||
! See http://factorcode.org/license.txt for BSD license
|
! See http://factorcode.org/license.txt for BSD license
|
||||||
USING: kernel tools.test ;
|
USING: tools.test ;
|
||||||
IN: math.transforms.bwt
|
IN: math.transforms.bwt
|
||||||
|
|
||||||
{ "asdf" } [ "asdf" bwt ibwt ] unit-test
|
{ "asdf" } [ "asdf" bwt ibwt ] unit-test
|
||||||
|
|
||||||
{ t } [ "hello" [ bwt nip ] [ bwt* ] bi = ] unit-test
|
{
|
||||||
|
29
|
||||||
|
"TEXYDST.E.IXIXIXXSSMPPS.B..E.S.EUSFXDIIOIIIT"
|
||||||
|
} [
|
||||||
|
"SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES" bwt
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -1,21 +1,15 @@
|
||||||
! Copyright (C) 2012 John Benediktsson
|
! Copyright (C) 2012 John Benediktsson
|
||||||
! See http://factorcode.org/license.txt for BSD license
|
! See http://factorcode.org/license.txt for BSD license
|
||||||
USING: accessors assocs fry kernel math sequences
|
USING: accessors assocs fry kernel locals sequences
|
||||||
sequences.rotated sorting suffix-arrays.private ;
|
sequences.rotated sorting ;
|
||||||
IN: math.transforms.bwt
|
IN: math.transforms.bwt
|
||||||
|
|
||||||
! Semi-efficient versions of Burrows-Wheeler Transform
|
! Semi-efficient versions of Burrows-Wheeler Transform
|
||||||
|
|
||||||
: bwt* ( seq -- newseq )
|
:: bwt ( seq -- i newseq )
|
||||||
[
|
seq all-rotations natural-sort
|
||||||
dup suffixes natural-sort
|
[ [ n>> 0 = ] find drop ] keep
|
||||||
[ dup from>> [ to>> ] [ nip ] if-zero 1 - over nth ]
|
[ last ] seq map-as ;
|
||||||
] [ map-as ] bi nip ;
|
|
||||||
|
|
||||||
: bwt ( seq -- i newseq )
|
|
||||||
dup all-rotations natural-sort
|
|
||||||
[ [ sequence= ] with find drop ]
|
|
||||||
[ [ last ] rot map-as ] 2bi ;
|
|
||||||
|
|
||||||
: ibwt ( i newseq -- seq )
|
: ibwt ( i newseq -- seq )
|
||||||
[ length ]
|
[ length ]
|
||||||
|
|
Loading…
Reference in New Issue