Burrows–Wheeler transform 算法
#!/usr/bin/python
# Burrows–Wheeler transform Algorithm
def transform(s, start_symbol, end_symbol):
s = start_symbol + s + end_symbol
rotations = []
for i in range(0, len(s)):
rotations.append(s[len(s) - i:] + s[0:len(s) - i])
rotations.sort();
output = ""
for item in rotations:
output += item[-1]
return output
def inverse_transform(s, start_symbol, end_symbol):
lines = []
for c in s:
lines.append("")
for times in range(len(s)):
for i in range(len(s)):
lines[i] = s[i] + lines[i]
lines.sort()
for item in lines:
if item.startswith(start_symbol) and item.endswith(end_symbol):
return item[len(start_symbol):-len(end_symbol)]
if __name__ == "__main__":
start_symbol = "^"
end_symbol = "@"
src = "banana"
print "original str: ", src
str1 = transform(src, start_symbol, end_symbol)
print "transformed str: ", str1
str2 = inverse_transform(str1, start_symbol, end_symbol)
print "inverse_transformed: ", str2