poj 1147 BWT压缩方法

来源:互联网 发布:淘宝客如何骗取佣金 编辑:程序博客网 时间:2024/04/29 01:48

题目描述

问题源自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的人才能体会!没有最快,只有更快!

 

代码