From 52043e60d58f2e1696ece8ff60162011cee2a326 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 5 May 2015 17:20:04 -0700 Subject: [PATCH] math.transforms.bwt: slightly faster, remove suffixes because it seems buggy. --- extra/math/transforms/bwt/bwt-tests.factor | 9 +++++++-- extra/math/transforms/bwt/bwt.factor | 18 ++++++------------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/extra/math/transforms/bwt/bwt-tests.factor b/extra/math/transforms/bwt/bwt-tests.factor index 0a02db2d65..b1f4ad7fdf 100644 --- a/extra/math/transforms/bwt/bwt-tests.factor +++ b/extra/math/transforms/bwt/bwt-tests.factor @@ -1,8 +1,13 @@ ! Copyright (C) 2012 John Benediktsson ! See http://factorcode.org/license.txt for BSD license -USING: kernel tools.test ; +USING: tools.test ; IN: math.transforms.bwt { "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 diff --git a/extra/math/transforms/bwt/bwt.factor b/extra/math/transforms/bwt/bwt.factor index d3cecea39c..9431f6a8c4 100644 --- a/extra/math/transforms/bwt/bwt.factor +++ b/extra/math/transforms/bwt/bwt.factor @@ -1,21 +1,15 @@ ! Copyright (C) 2012 John Benediktsson ! See http://factorcode.org/license.txt for BSD license -USING: accessors assocs fry kernel math sequences -sequences.rotated sorting suffix-arrays.private ; +USING: accessors assocs fry kernel locals sequences +sequences.rotated sorting ; 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 ] - [ [ last ] rot map-as ] 2bi ; +:: bwt ( seq -- i newseq ) + seq all-rotations natural-sort + [ [ n>> 0 = ] find drop ] keep + [ last ] seq map-as ; : ibwt ( i newseq -- seq ) [ length ]