Class: Bwt

Inherits:
Object
  • Object
show all
Defined in:
lib/bwt.rb

Overview

Initial implementation of BWT algorithm

Burrows–Wheeler transform - block-sorting compression

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBwt

Returns a new instance of Bwt.



8
# File 'lib/bwt.rb', line 8

def initialize;end

Class Method Details

.bwt(string) ⇒ String

Transformation | - start flag. ~ - end flag.

Parameters:

  • String (String)

    Any given string

Returns:

  • (String)

    String transformed.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/bwt.rb', line 14

def self.bwt(string)
  string2="|#{string}~"
  p string2
  len=string2.length
  m=[]
  (0...string2.length).collect { |i| (string2 * 2)[i, string2.length] }.each do |entry|
    arr=[]
    entry.split('').each do |letter|
      arr.push(letter)
    end
    m.push(arr)
  end
  a=m.sort
  b=[]
  a.each do |lt|
    b.push(lt[len-1])
  end
  return b.join('')
end

.bwt_rev(string) ⇒ Array

Inverse Transformation

Parameters:

  • String (String)

    Inverse String

Returns:

  • (Array)

    Array of letters - Original String



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/bwt.rb', line 37

def self.bwt_rev(string)
  len=string.length
  s1=""
  m=Array.new
  count = 0
  while count < len do
    if not m.any?
      string.split('').each do |s|
        s1=[s]
        m.push(s1)
        m.sort!
      end
      count += 1
    else
      val = 0
      string.split('').each do |s|
        m[val].insert(0,s)
        val += 1 
      end
      m.sort!
      count +=1
    end
  end
  m.each do |arr|
    if arr.last == "~"
      return arr
    end
  end
end