Burrows Wheeler变换(BWT)

时间:2011-05-07 11:23:17

标签: algorithm decode decoder burrows-wheeler-transform

我在掌握Burrows Wheeler转换(BWT)的解码算法方面遇到了困难。我已经在线阅读并查看了一些示例代码,但是,它们似乎都在使用“主索引”来解码编码的字符串。

我的问题是,如何将像'rdacraaaabb'这样的BWT编码字符串解码为原始的'abracadabra'。

一些示例代码会很精彩。

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

反向部分是算法中最简单的部分:创建累积直方图并根据其等级检索值。

您可以在此处找到基于BWT的完整块压缩器/解压缩器:http://code.google.com/p/kanzi/source/browse/java/src/kanzi/transform/BWT.java

答案 2 :(得分:0)

在我的代码中:abracadabra - > ardcraaaabb,key = 0
不是' rdacraaaabb'。

http://mlich.zam.slu.cz/js-bwt/js-cryptbwt.htm
http://mlich.zam.slu.cz/js-bwt/bwt_class.txt
  - 但我的php解码很慢   - 这里必须为char \ n \ c \ r为textarea

添加斜杠
function bwtDeCode(&$data)
    {
    arr    = array();
    $arr[0] = array();
    $arr[1] = array();
    $arr[2] = array();
    $len = strlen($data['out']); // !!! input source data (string)
    for ($i=0;$i<$len;$i++)
        {
        $arr[2][$i] = $i;       //index row
        $arr[1][$i] = $data['out'][$i]; //last col
        $arr[0][$i] = $data['out'][$i]; //first col
        }
    usort($arr[0],array($this,'sortCmpDeCode'));    //first col
  //    sort($arr[0]);  //first col
    $none = -1;
    $i    = $data['key'] * 1; // !!! input source key (number)
    $key  = $arr[1][$i];
    $out  = $key;
    $arr[2][$i] = $none;
    for ($j=1;$j<$len;$j++)
        {
        for ($i=0;$i<$len;$i++)
  //        foreach ($arr[0] as $i=>$value)
            {
            if ($arr[2][$i]===$none || $arr[0][$i]!==$key)
  //                if ($arr[0][$i]!==$key)
                {continue;}
                $key = $arr[1][$i];
  //            $out = $key . $out;
            $out .= $key;
            $arr[2][$i] = $none;
  //unset($arr[1][$i]);
            break;
            }
        }
    $out = strrev($out);
    $data['in'] = $out;
    }