poj 1147 BWT压缩方法

题目描述

问题源自BWT压缩方法。详见http://acm.pku.edu.cn/JudgeOnline/problem?id=1147

该问题就是BWT压缩方法的逆过程。关于BWT压缩方法见http://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform

 

解题过程

有的时候感觉智商不够用。如果没有答案估计我是想不出答案了。

我解题过程写了3套代码。

第一套代码

按照wiki上说的建立一个表,问题的规模是n=3000,表的规模是n*n,所以空间满足需求。这里面有一个排序的过程,我用STL的sort,就是快速排序,问题的规模是n=3000,每次排序平均需比较1000左右的字符,快速排序的复杂度为n*lgn,所以总的时间为O(n*n*lgn*n/2)。所以可想而知,CPU越要计算10^10,当然是超时了。

第二套代码

发现排序的时候有个规律,在第i步之前,原来的表是从小到大排序好的,利用这个规律改进排序方法,排序用O(n)就可以了,所以总共的时间复杂度是O(n*n), 最后空间是9000k,时间是900ms.

第三套代码

继而发现表都不用建立,那么填充表的过程也可以省略,最终空间是180k,时间是100ms.

改进所带来的乐趣,只有努力AC的人才能体会!没有最快,只有更快!

 

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值