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


    作业地址: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)分别通过Merge、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;
            }
  • 相关阅读:
    【算法】经典排序
    【算法】字符串匹配
    最简单的canal 1.1.6服务搭建方法
    前端多数据渲染优化
    前端下载文件
    python flask实现文件流下载
    python flask 读取上传文件转换为二进制
    golang对接阿里云私有Bucket上传图片、授权访问图片
    centos7(linux)安装RabbitMq本文借鉴别人的知乎文章,亲自操作可以OK的
    速看,ElasticSearch如何处理空值 咔咔
  • 原文地址:https://www.cnblogs.com/notTao/p/6411631.html
Copyright © 2020-2023  润新知