bwt比对算法 C语言,python-bwt算法的编码和解码

关于bwt算法的原理可以看看这个博客,讲得很好 https://blog.csdn.net/blackjack_/article/details/73801003

本文是利用python写的bwt算法的编码和解码,有兴趣的同学可以看看。例子是banana这个字符串

def bwtencode():

global L, F

L = ''

F = ''

text = "banana#"

last_str = text

len_text = len(text)

rotate_list = []

rotate_list.append(last_str)

for i in range(len_text - 1):

last_str = last_str[-1] + last_str[-len_text:-1]

rotate_list.append(last_str)

sorted_list = sorted(rotate_list)

for eachstr in sorted_list:

L = L + eachstr[-1]

F = F + eachstr[0]

print(L)

def C(c):

#统计T中字典序小于“c”的所有字符个数

global L

num_Tc = 0

for eachchr in L:

if c > eachchr:

num_Tc += 1

return num_Tc - 1

def Occ(c,r):

#统计L中第r行之前出现字符c的数量

global L

row = -1

num_Lc = 0

if r == 0:

return 0

for eachchr in L:

row += 1

if eachchr == c:

num_Lc += 1

if row == r - 1:

break

return num_Lc

def bwtdecode():

#因为#的存在,就能确定原文中的最后一个字符肯定在L的首行(首字符)

global L

r = 0

T = ''

while L[r] != "#":

T = L[r] + T

c = L[r]

r = C(c) + Occ(c, r) + 1

print(T)

bwtencode()

bwtdecode()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值