第十至十二章 算法分析--高阶数据结构
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
第十至十二章 算法分析--高阶数据结构相关推荐
- Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- 高阶数据结构(1):并查集 与 图
"Head in the clouds" 一.并查集 (1)认识并查集? 在一些问题中需要将n个不同的元素划分成 一些不想交的集合. 开始时,每个元素自成一个单元素集合,然后按一定 ...
- 求解器Gurobi 超过二次的高阶多项式表达方法(python)
Gurobi 提供了线性项和二次项的直接表达方法,用户可以直接调用.但超过二次之后,有2种表达方式 (1)引入辅助变量,拆解为二次项表达.例如 x ^5 可以引入几个辅助变量 y=xz,z=w^2, ...
- 高阶数据结构 —— 红黑树(较平衡搜索树)
文章目录 1. 红黑树的概念 1.1 红黑树的性质 1.2 红黑树效率的分析 2. 红黑树的旋转 2.1 情况一 2.2 情况二 2.3 情况三 2.4 对以上三种情况的总结 3. 红黑树的实现 3. ...
- 高阶数据结构之哈希的应用
文章目录 位图(bitMap) 位图的实现 将数据添加到位图中 检查数据是否在位图中存在 将数据的对应位置置为0 位图的应用 布隆过滤器 为什么会有误差 布隆过滤器的实现 布隆过滤器的删除 使用Goo ...
- 高阶数据结构 -------- 跳表
目录 1.什么是跳表 - Skiplist 2.skiplist的效率如何保证? 3.Skiplist实现 (1)整体代码 (2)节点设计 (3) Skiplist成员变量 和 构造函数 (4)sea ...
- 高阶数据结构:SSTable
1. 前言 最近在组会上面通过小组讨论论文时,发现了SSTable这个数据结构.课后为了深入分析和学习这个数据结构,我做了一些资料查阅.在查询相关分布式的书籍后,找到了SSTable的数据结构,现将其 ...
- 手撕红黑树——C++高阶数据结构详解
目录 传统艺能
- 【高阶数据结构】手撕红黑树(超详细版本)
最新文章
- linux安装mysql5.7.19
- boost::regex
- java中保留小数位_Java中保留两位小数的方法
- 三角形面积=SQRT(S*(S-a)*(S-b)*(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。 定义两个带参的宏,一个用来求area, 另一个宏用来求S。 写程序,在程序中用带
- 信息学奥赛一本通 1090:含k个3的数 | OpenJudge NOI 1.5 30
- java线程知识体系
- Gradle DSL method not found android
- PS中新建文件的一些常用预设信息
- npm install 报错:node-pre-gyp ERR! 问题解决
- prayaya v3-国产神操作系统
- 华为云域名转入到阿里云的基本流程
- si24r1程序_SI24R1多对一通信功能(ACK模式,ACK不带PAYLOAD)程序资料开发
- ios 博客及论坛整理
- 任务栏-IDEA图标变白色
- etc门架系统服务器是什么,ETC门架是什么东西?ETC龙门架作用
- 时间戳转换格林威治时间
- 学习日志之synthesis and optimization(4)——banding and sharing
- 【高效办公】Everything高效应用案例——软件基本信息篇
- 期货公司最低标准的手续费和保证金
- java实现将多个word文档合并