dylan BWT notes
Dylan's Burrows-Wheeler transform notes
def rotations(t):
t+="\003" #etx
tt = t*2
return [tt[i:i+len(t)] for i in range(0,len(t))]
def bwm(t):
return sorted(rotations(t))
def bwt(t):
return ''.join([x[-1] for x in bwm(t)])
def twb(bwt):
L = []
ranks = {}
for c in bwt:
if c not in ranks:
ranks[c] = 0
else:
ranks[c] += 1
L.append((c,ranks[c]))
F = sorted(L)
""" display F-L
print()
print("Matrix")
for i in range(len(L)):
print(F[i],L[i])
print()
"""
indx = L[0]
rstr = ''
while 1:
if ord(indx[0]) == 3:
break
rstr = indx[0] + rstr
indx = L[F.index(indx)]
return rstr
test_string = "banana banana banana"
"""
aaannnnnnbbb aaaaaa
banana banana banana
"""
print(bwt(test_string))
print(twb(bwt(test_string)))