2011-05-07 4 views
1

Burrows Wheeler transform (BWT.)에 대한 디코딩 알고리즘을 파악하는 데 어려움을 겪고 있습니다. 온라인으로 읽었으며 샘플 코드를 살펴 보았지만 모두 ' 인코딩 된 문자열을 디코딩하는 '기본 인덱스'.Burrows Wheeler Transform (BWT)

제 질문은 'rdacraaaabb'와 같은 BWT 인코딩 문자열을 어떻게 원래의 'abracadabra'로 디코딩 할 수 있는가입니다.

일부 샘플 코드는 훌륭합니다.

+0

위키 피 디아 일부 '코드가 텍스트 영역에 대한 문자의 \ n 개의 \ C의 \ r에 대한 슬래시 'http://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform – kenny

+0

시도해보십시오. 위키 피 디아의 파이썬 코드는 컴파일되지 않습니다 : (그리고 그것은 매우 암호화되어 있습니다.) – DeepHouse

답변

-1
+0

좋은 링크입니다! 프로그램은 자체적으로 인코딩 한 데이터 만 디코딩 할 수 있습니다. 일반 BWT 데이터는 디코딩 할 수 없습니다. – DeepHouse

+0

청크 크기는 중요하지 않습니다. 문제는 BWT를 인코딩하는 동안 프로그램은 특수한 EOF 문자를 넣고 그것을 디코드하는 데 의존합니다 .EOF 문자가없는 경우 디코드 할 수있는 방법이 있는지 궁금 해서요 – DeepHouse

+0

투표를 시도했습니다. 나는 그것을 받아 들일 것이지만 그것은 최선의 대답은 아니다 : ( – DeepHouse

0

:

당신은 여기 BWT에 따라 완전한 블록 압축/압축 해제를 찾을 수 있습니다.

http://mlich.zam.slu.cz/js-bwt/js-cryptbwt.htm
http://mlich.zam.slu.cz/js-bwt/bwt_class.txt
-하지만 내 PHP는 디코드
느린 - 여기가해야 우데는

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; 
    } 

관련 문제