1.贪婪算法的第二个应用为 哈夫曼编码 来进行文件压缩。 文件压缩的主要问题是给文件中的所有字符分配能唯一识别的编码(n个比特),如果我们事先知道所有字符出现的频率,把频率最高的放在最上层,频率低的放在左侧最下层,这就是最优编码。

2.编码树,所有字符都放在叶节点上,往左走的每条路径代表0,往右走的每条路径代表1,这种数据结构有时候叫做trie树,节点的深度既是需要的比特位数。这种树是满树:所有的节点要么是树叶,要么有两个儿子。一种最优的编码将总是具有这个性质。并且这样的编码既是前缀码。

3.红黑树

(1)红黑树是AVL树(自平衡二叉搜索树)的变种,其各种操作在最坏情形下花费O(logN)时间;

(2)红黑树性质:1.根是黑色的 2. 红色节点的子节点必须是黑色的 3.一个节点到一个null 引用的每条路径必须包含相同数目的黑色节点。

(3)自底向上的插入:1.新插入的项的父节点是黑色的,则插入完成

          2.如果插入节点的父节点是红色的:

          2.1父节点的兄弟节点是黑色的,可以通过单旋转或者双旋转。

          2.2父节点的兄弟也是红色的,需要通过上虑操作解决。

(4)自顶向下红黑树:可以提前对红黑树进行自顶向下的过程,从而保证父节点的兄弟不为红色。

4.后缀数组与后缀树

(1)数据处理中最基础的问题之一是从文本T中找到一段模式P所在的位置,并回答下列问题:a.存在能匹配P的T的子串吗  b.P在T中出现了多少次,及位置。c.一般的问题,T是固定,针对不同的P有频繁的请求。为了达到这些目的,我们一般会将T预处理成一种特殊的数据结构即后缀数组或后缀树。

(2)后缀数组:文本T的后缀数组实际上就是T的所有后缀进行有序排列所组成的一个数组。  模式P如果在文本中,则P一定是某个后缀的前缀,那么可以通过折半查找,以O(logT)

的时间找到。同时计算相邻后缀的最大公共前缀的话,则每次找P出现的次数为O(P+ logT)

(3)后缀数组的Java实现

//compute the longest share string prefix
public static int computaLCP(String s1,String s2){
int i=0;
while(i<s1.length()&&i<s2.length()&&s1.charAt(i)==s2.charAt(i)){
i++;
}
return i;
}

public static void createSuffixArray(String str,int[] SA,int[] LCP){
if(SA.length!=str.length()||LCP.length!=str.length())
throw new IllegalArgumentException();

int N = str.length();

String[] suffiesx = new String[N];
for (int i = 0; i < N; i++) {
suffiesx[i] = str.substring(i);
}
Arrays.sort(suffiesx);

for (int i = 0; i < N; i++) {
SA[i] = N-suffiesx[i].length();
}

LCP[0] = 0;
for (int i = 1; i < N; i++) {
LCP[i] = computaLCP(suffiesx[i],suffiesx[i-1]);
}

}

转载于:https://www.cnblogs.com/jetHu/p/7846542.html

第十至十二章 算法分析--高阶数据结构相关推荐

  1. Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  2. 高阶数据结构(1):并查集 与 图

    "Head in the clouds" 一.并查集 (1)认识并查集? 在一些问题中需要将n个不同的元素划分成 一些不想交的集合. 开始时,每个元素自成一个单元素集合,然后按一定 ...

  3. 求解器Gurobi 超过二次的高阶多项式表达方法(python)

    Gurobi 提供了线性项和二次项的直接表达方法,用户可以直接调用.但超过二次之后,有2种表达方式 (1)引入辅助变量,拆解为二次项表达.例如 x ^5 可以引入几个辅助变量 y=xz,z=w^2, ...

  4. 高阶数据结构 —— 红黑树(较平衡搜索树)

    文章目录 1. 红黑树的概念 1.1 红黑树的性质 1.2 红黑树效率的分析 2. 红黑树的旋转 2.1 情况一 2.2 情况二 2.3 情况三 2.4 对以上三种情况的总结 3. 红黑树的实现 3. ...

  5. 高阶数据结构之哈希的应用

    文章目录 位图(bitMap) 位图的实现 将数据添加到位图中 检查数据是否在位图中存在 将数据的对应位置置为0 位图的应用 布隆过滤器 为什么会有误差 布隆过滤器的实现 布隆过滤器的删除 使用Goo ...

  6. 高阶数据结构 -------- 跳表

    目录 1.什么是跳表 - Skiplist 2.skiplist的效率如何保证? 3.Skiplist实现 (1)整体代码 (2)节点设计 (3) Skiplist成员变量 和 构造函数 (4)sea ...

  7. 高阶数据结构:SSTable

    1. 前言 最近在组会上面通过小组讨论论文时,发现了SSTable这个数据结构.课后为了深入分析和学习这个数据结构,我做了一些资料查阅.在查询相关分布式的书籍后,找到了SSTable的数据结构,现将其 ...

  8. 手撕红黑树——C++高阶数据结构详解

    目录 传统艺能

  9. 【高阶数据结构】手撕红黑树(超详细版本)

最新文章

  1. linux安装mysql5.7.19
  2. boost::regex
  3. java中保留小数位_Java中保留两位小数的方法
  4. 三角形面积=SQRT(S*(S-a)*(S-b)*(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。 定义两个带参的宏,一个用来求area, 另一个宏用来求S。 写程序,在程序中用带
  5. 信息学奥赛一本通 1090:含k个3的数 | OpenJudge NOI 1.5 30
  6. java线程知识体系
  7. Gradle DSL method not found android
  8. PS中新建文件的一些常用预设信息
  9. npm install 报错:node-pre-gyp ERR! 问题解决
  10. prayaya v3-国产神操作系统
  11. 华为云域名转入到阿里云的基本流程
  12. si24r1程序_SI24R1多对一通信功能(ACK模式,ACK不带PAYLOAD)程序资料开发
  13. ios 博客及论坛整理
  14. 任务栏-IDEA图标变白色
  15. etc门架系统服务器是什么,ETC门架是什么东西?ETC龙门架作用
  16. 时间戳转换格林威治时间
  17. 学习日志之synthesis and optimization(4)——banding and sharing
  18. 【高效办公】Everything高效应用案例——软件基本信息篇
  19. 期货公司最低标准的手续费和保证金
  20. java实现将多个word文档合并

热门文章

  1. Lucene.Net的中文分词组件AdvancedChineseAnalyzer
  2. 江苏大学考研885程序设计 - 编程题笔记
  3. 更改ubuntu的mysql版本为指定版本
  4. flexgdsgen
  5. flutter listview 滚动到底部_Flutter系列之Flex布局详解
  6. 马尔可夫决策过程(MDP)
  7. python读取与写入文件
  8. centos系统使用snap安装软件(还是别用吧)
  9. hashmap扩容机制_图文并茂,HashMap经典详解!
  10. vue中进度条写法_vue实现简单loading进度条