随笔分类 - 数据结构
金融系统中的RSA算法
摘要:**基础知识** 对称性算法: 信息传递的双方的加解密信息,需要保护的是加解密信息;因为此时加解密的方式是一样的; 非对称性算法(公开密钥加密算法): 信息传递的双方的加解密信息,需要保护的是解密信息,可以公开的是加密信息;此时加解密的方式是不一样的; 举一个最简单的非对称加密方式: 传递一个 <1
阅读全文
树状数组(FenwickTree)
摘要:**基础知识** 前缀和数组: 初始化:O(n); 查询区间和: O(1) 度,S[j] - S[i] 即为原数组( i, j ] 的区间和, 前开后闭; 单点修改: O(n) ,需要修改S[i] ~ S[n] 所有值; 缺点:频繁修改原数组中值,前缀和数组就不适合了。 负数的补码 = 反码 + 1
阅读全文
哈弗曼编码(haffman-Coding)
摘要:**基础知识** 编码:信息的不同表示形式; 定长编码:典型的就是 ASCII 编码; 缺点:有些位数是没必要的; 变长编码:保证任意两个字符的编码都不一样,且编码的长度是不固定即可; 有效的变长编码:任意一个字符的编码,不能是其他字符编码的前缀;对于计算机来讲,有效变长编码更有意义; 因此如果把编
阅读全文
字典树(Trie) 与双数组字典树(DoubleArrayTrie)
摘要:**基础知识** 字典树(Trie): 单词查找树, 可用于单词查找,字符串排序; 在大部分的树中, 节点 代表 集合;边 代表 关系;(很重要,代码实现中很多地方都体现); 字典树的具体结构如下图,其中每一条边代表一个字符;不同节点颜色代表以该节点结尾的单词是否存在(粉色:存在;白色:不存在)。
阅读全文
红黑树(RB Tree)
摘要:**基础知识** 红黑树的基本性质:(红黑树是弱化版的AVL 树) 1. 每个节点非黑即红; 2. 根节点是黑色; 3. 叶节点(NIL(Null-pointer to objective))是黑色的; 在示意图中没有画出来的NIL!! 在删除操作中很重要,删除操作中主要就是处理双重黑失衡; 4.
阅读全文
AVL-平衡二叉搜索树(Self-balancing binary search tree)
摘要:**基础知识** 二叉排序树(二叉搜索树):思维结构中可以是有序数组,树; 性质: 左子树 < 根节点 ; 右子树 > 根节点; 中序遍历结果:就是递增排序的有序序列;(3,17, 20, 28, 28, 29, 30, 32) 操作: 增(插入): 与根结点比较:小于:进入左子树;大于:进入右子树
阅读全文
单调队列(monotone-Queue)/单调栈(monotone-Stack)
摘要:**基础知识** 单调队列(monotone-Queue):重点关注队首元素 目的: 主要为了解决RMQ(range Minimum/Maximum Query) 区间最值问题; 如果不移除开头元素,则最终deque 中留下的元素,则是用来解决固定末尾RMQ问题; 本质来讲,由每次往后移位后对应的d
阅读全文
哈希表基础知识
摘要:**基础知识** 哈希表:为了解决快速索引树问题的结构 数组中根据下标可以O(1) 实现数据获取; 但是在实际应用中,可能要根据复杂的数据结构来查找数据; 所以要实现将任意数据 到 数组下标的映射就可以实现任意类型数据之间的关联,实现O(1) 查找; 哈希函数: 任意数据 到 数组下标的映射; 体现
阅读全文
并查集(UnionSet)
摘要:**基础知识** Union-find 是一种抽象化较高的数据结构,主要用来处理联通性问题,联通性自身具有传递性; 参考文章: 并查集(Union-Find)算法介绍 & 应用举例 1 //#include "UnionSet.h" 2 #include <iostream> 3 using nam
阅读全文
堆(heap) & 优先队列(priority_queue)
摘要:**基础知识** 1. 应用 完全二叉树 结构,通过连续数组空间储存( 左子树:2 * n, 右子树 : 2 * n + 1; root = 1) , 实现一个完全二叉树; 要学会 数组(表现形式) 与 完全二叉树 (思维结构)之间的转换! 数据结构:本质就是定义一种性质,并在所有操作中都要维护这种
阅读全文
二叉树(BinaryTree)
摘要:**基础知识** 1. 树形结构: 从代码结构来看,Tree 与 链表类似,主要在指针域的区别; 链表可以看成一叉树; 树形结构中: 节点代表集合,边代表关系 (RB tree/ trie...), 比如说 左边是小于关系,所以左边拎出来都是小于根节点的集合; 右边是大于关系,右边拎出来都是大于根节
阅读全文
栈(stack)
摘要:**基础知识** 1. FILO(先入后出) : 出栈 更多意义上是指 指针移动(与队列出队类似,都是指针的移动); 2. 括号匹配问题引出 思路进阶过程:记录左右括号个数 -> 影响的其实左右括号差 -> 本质是 ( 等价 发生,) 等价 结束,()才是一件事情完整; ( ( ) ) 可以看作 是
阅读全文
队列--queue
摘要:基础知识 一段连续存储区存储任意数据,包含head,tail(最后一个元素的下一位:因为一般都是采用前开后闭区间,这样 cnt = tail - head); 支持操作有push(队尾入队),pop(队首出队); 先入先出(FIFO); 队列出队,入队多次操作以后,如果没有重复利用先前出队的空间,而
阅读全文
链表--list
摘要:基础知识 包含数据域(内置类型,任意定义的结构), 指针域(绝对地址:pointer, 相对地址:下标...),通过指针域的值指向下一个位置,形成一个线性结构; 复杂度:插入O(1), 查找O(n), 更新O(1), 删除O(1); 特点:不适合快速定位查找数据,适合动态的插入和删除数据场景 扩展:
阅读全文