首页 > 编程语言 > 详细

普林斯顿算法课Part2第五周作业_Burrows

时间:2017-02-17 23:09:56      阅读:357      评论:0      收藏:0      [点我收藏+]

作业地址:http://coursera.cs.princeton.edu/algs4/assignments/burrows.html

作业难点:

1、理解题意:

  1)完成bzip2压缩算法三步骤中的:BW转换(Burrows-Wheeler transform)、MTF编码(Move-to-front encoding)以及BW转换的辅助类循环后缀串类(Circular suffix array)。

  2)理解BW转换解码的工作机制:

 i      Sorted Suffixes     t      next
--    -----------------------      ----
 0    ! ? ? ? ? ? ? ? ? ? ? A        3
 1    A ? ? ? ? ? ? ? ? ? ? R        0
 2    A ? ? ? ? ? ? ? ? ? ? D        6
*3    A ? ? ? ? ? ? ? ? ? ? !        7
 4    A ? ? ? ? ? ? ? ? ? ? R        8
 5    A ? ? ? ? ? ? ? ? ? ? C        9
 6    B ? ? ? ? ? ? ? ? ? ? A       10
 7    B ? ? ? ? ? ? ? ? ? ? A       11
 8    C ? ? ? ? ? ? ? ? ? ? A        5
 9    D ? ? ? ? ? ? ? ? ? ? A        2
10    R ? ? ? ? ? ? ? ? ? ? B        1
11    R ? ? ? ? ? ? ? ? ? ? B        4

    a) If sorted row i and j both start with the same character and i < j, then next[i] < next[j]. 对于排序好的字符串,字母相同时,下标小的,在待解码串中的位置也靠在前面。(如上图示)

    b) 依据作业提示,参考键索引计数排序算法,即可构建求解next[i]的算法。

    c) 如何根据next[i]解码:观察上图第3行于第7行,可发现ROW[3][0] == ROW[7][11],亦即解码字符为待解码串的第next[i]个字符,遍历全部next[i]可解码出原字符串。

2、如何保证循环后缀串的性能:

  1)如果直接使用库中的排序算法构建循环后缀串求解next[i],提交后会爆内存溢出错误,且不能满足性能需求。

  2)数据压缩算法压缩的文件很大,同时待排序的字符串为循环串,利用循环串的特性,可以不显示构造其他串,直接通过下标来区分所有字符串。

  3)分别通过Quick3way、MSD、Quick3String对循环后缀串进行排序,前两个算法均不能满足作业的性能需求。

容易扣分点:

同作业难点。

部分代码:

1、Quick3String的字符串比较算法:

        private static boolean less(int[] a, int i, int j, int d, String s) {
            int p = a[i], q = a[j], n = s.length();
            char prior, back;
            for (int k = d; k < n; k++) {
                prior = s.charAt((p+k)%n);
                back = s.charAt((q+k)%n);
                if (prior < back) return true;
                if (prior > back) return false;
            }
            return false;
        }

 

普林斯顿算法课Part2第五周作业_Burrows

原文:http://www.cnblogs.com/notTao/p/6411631.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!