- 博客(5)
- 收藏
- 关注
原创 线段树
定义 线段树的非叶子节点都是区间,而叶子节点是原始数据本身。非叶子节点中经常存放着叶子节点的聚合数据,例如最大值,最小值,数量值等等。 由于线段树的区间只跟数据的数值范围有关,不跟数据有关。所以线段树的高度最大为log(数值范围)。 例如存放int值的线段树,高度最大为log(INT_MAX) 作用 包含查找树的所有功能 1.快速查找元素是否存在,log(n) 2.快速查找树中的最大
2016-03-02 10:05:45
265
原创 c4编译器源码剖析
c4_source 1. 概述 c4是500行代码实现一个c语言编译器 简单暴力,适合了解基础的编译器原理 2. 主流程 1.建立系统符号表 2.读取源代码 3.一次遍历源代码,同时进行词法分析,语法分析和中间代码生成。 4.执行中间代码 3. 中间代码 3.1. 基础 中间代码 操作 意义 LEA 2 将栈往上的2个位置变量加载到寄存器 加载本地变量 IM
2016-03-02 10:05:45
2002
原创 查找树
定义 排序二叉树,节点是数据本身,左子树比父节点要小,右字树比父节点要大 用法 1.快速查找节点是否存在在树中。log(n) 2.快速树种的最大值或者最小值。log(n) 优化 由于原始排序二叉树受输入数据影响,可能导致极度的不平衡。 所以有了平衡二叉树的说法,平衡二叉树的高度始终保持在log(n)的时间复杂度上。 平衡二叉树的变种 1.AVL树 2.红黑树 3.伸展树 4
2016-03-02 10:05:41
248
原创 前缀树
定义 前缀树,是将单词的每个字符作为树的节点。前缀树衍生自基数树,数字的基数是位,字符串的基数就是字符。所以前缀树相当于基为字符的基数树。另外,前缀树又成为Tire树。 作用 1.快速查找单词A是否在字符串B中。O(n*m) 2.快速查找单词A,B,C是否在字符串C中。O(n*m) 3.快速查找指定前缀下含有哪些单词。O(m) 优化 1.AC自动机。朴素的Trie树在进行模式匹配时,
2016-03-02 10:05:40
440
原创 后缀树
定义 后缀树建立的是单个单词的所有后缀的Trie树。 作用 1.快速判断单词A是否在句子B中,以及匹配的最长长度。O(n m) 2.快速判断单词A在句子B中的重复次数。O(m) 3.快速判断单词A与单词B的最长公共子串。O(m) 4.快速找出句子A中的最长回文字串。O(m) 优化 1.后缀数组。后缀树的数组形式。 2.后缀状态机。后缀树的状态机形式。
2016-03-02 10:05:40
273
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人