math.transforms.bwt: faster version of bwt if only needing transform.

db4
John Benediktsson 2015-05-05 16:08:55 -07:00
parent 5f3ded0b1a
commit e62da0bc64
2 changed files with 11 additions and 2 deletions

View File

@ -1,6 +1,8 @@
! Copyright (C) 2012 John Benediktsson
! See http://factorcode.org/license.txt for BSD license
USING: tools.test ;
USING: kernel tools.test ;
IN: math.transforms.bwt
{ "asdf" } [ "asdf" bwt ibwt ] unit-test
{ t } [ "hello" [ bwt nip ] [ bwt* ] bi = ] unit-test

View File

@ -1,10 +1,17 @@
! Copyright (C) 2012 John Benediktsson
! See http://factorcode.org/license.txt for BSD license
USING: assocs fry kernel sequences sequences.rotated sorting ;
USING: accessors assocs fry kernel math sequences
sequences.rotated sorting suffix-arrays.private ;
IN: math.transforms.bwt
! Semi-efficient versions of Burrows-Wheeler Transform
: bwt* ( seq -- newseq )
[
dup suffixes natural-sort
[ dup from>> [ to>> ] [ nip ] if-zero 1 - over nth ]
] [ map-as ] bi nip ;
: bwt ( seq -- i newseq )
dup all-rotations natural-sort
[ [ sequence= ] with find drop ]