数据结构
RugerMc
寄蜉蝣于天地,渺沧海之一粟
展开
-
简单贪心问题
今年暑假不AC//简单贪心题目 “今年暑假不AC?” “是的。” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%…” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。 作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及原创 2016-11-07 20:51:17 · 685 阅读 · 0 评论 -
红黑树原理分析
红黑树红黑树的规则:每个节点非黑即红。根结点是黑色。叶结点 (NIL) 是黑色。如果一个结点是红色, 则它的两个子节点都是黑色的。从根结点出发到所有叶结点的路径上, 均包含相同。调整策略:插入调整站到祖父节点观察。删除调整站在父节点观察。插入和删除的情况一共五种。优势:最短路径 与 最长路径 长度至多差一倍。插入操作:首先我们明确插入节点 xxx 必将预先设置...原创 2018-10-12 17:27:13 · 293 阅读 · 0 评论 -
Manacher算法
学习Manacher算法需要建立三个概念。三个概念:回文半径数组回文右边界右边界的最早中心位置算法流程:若 i 不在右边界内部: 可能性:暴力向两边扩展若 i 在右边界内部: 可能性1:如若i对应的i’的半径包括在大的回文半径,i的回文半径等于i‘的回文半径。 t 【F [a b a] k t k [a b a] F】s 可能性2:如...原创 2018-10-04 22:44:28 · 239 阅读 · 0 评论 -
字符串模式匹配
字符串模式匹配有以下几种算法:BF算法KMP算法Sunday算法Shift-And算法BF算法:我们常用的暴力算法,时间复杂度log n2log n2log\ {n^{2}} 代码演示:int BF(const char *text, const char *pattern) { int len1 = strlen(text); i...原创 2018-08-19 19:18:40 · 347 阅读 · 0 评论 -
哈希表与哈希函数
哈希表我们将任意类型元素转换为整型的过程叫作哈希。 所谓哈希,实质上是高维空间向低维空间的映射。高维度空间元素数量多,低维空间元素数量少,必定会出现多对一的映射,所以必然出现哈希冲突。在设计哈希函数的过程要针对状态数来进行分析。哈希函数的本质在做哈希,处理哈希碰撞。 设计哈希表应当注重以下两点:设计哈希函数处理冲突设计哈希有以下几种方法:开放地址法多重哈希...原创 2018-08-19 17:59:15 · 357 阅读 · 0 评论 -
二分法与三分法
二分查找 基于分治策略的一种查找方法, 时间复杂度 O(log2n)O(log2n) O(log_{2}{n}) 是用于解决单调有序问题,缩小问题规模算法步骤:将左指针指向序列首元素,右指针指向队尾元素中间指针左指针右指针中间指针=左指针+右指针2中间指针左指针右指针中间指针=左指针+右指针2中间指针左指针右指针中间指针 = \frac{左指针 + 右指针}{2}...原创 2018-08-19 17:41:47 · 1741 阅读 · 0 评论 -
顺序表与链表
线性表:顺序表(Vector) 链表(LinkList)时间复杂度比较:顺序表: 适合随机访问 O(1)。 插入、删除节点 O(N)。 链表: 不适合随机访问 O(N)。 插入、删除节点 O(1)。 链表:单向链表 双向链表 循环链表循环链表:插入删除过程要注意,初始指针应指向链表尾节点(若当插入到头前时,找不到前驱节点) 当在更新尾节点时需要更新...原创 2018-08-15 14:18:57 · 255 阅读 · 0 评论 -
排序方法与策略
排序方法种类:冒泡排序插入排序选择排序归并排序堆排序快速排序基数排序分类方法:稳定排序与非稳定排序:两个大小一样的值,在排序后相对位置不变。内部排序与外部排序:是否需要开辟额外存储空间。稳定排序:冒泡排序 2. 插入排序 3. 归并排序 4. 基数排序非稳定排序:选择排序 2. 堆排序 3. 快速排序 稳定排序:冒泡排序...原创 2018-08-16 10:43:43 · 746 阅读 · 0 评论 -
堆与优先队列
分析与思考数组是完全二叉树的存储结构,完全二叉树是数组的逻辑结构,这样我们就可以使用树形结构来解决线性问题。堆大顶堆(用于升序排序,根节点大于等于两个子节点)小顶堆(用于降序排序,根节点小于等于两个子节点)堆的插入与删除:尾部插入,头部弹出(联想到了队列) 不同编程语言在实现优先队列时底层90%是由堆构成的。 通过代码本身来提高编程能力是错误的,应注重思维逻...原创 2018-08-16 09:46:57 · 212 阅读 · 0 评论 -
树与二叉树
树形结构是计算机最重要的数据结构,链表示特殊的树.特点:节点抽象为集合,边抽象为关系。树由节点与边构成。子节点之间是没有交集的。每个节点的指针域两个至多个(N叉树)。节点数 = 边数 + 1。图的度 = 出度 + 入度, 树的度 = 出度。定理: 二叉树中度数为零的节点比度数为2的节点多一个。满二叉树:没有度数为1的节点。完全二叉树:除了最后一层的所...原创 2018-08-15 22:31:14 · 366 阅读 · 0 评论 -
哈夫曼编码与二叉字典树存储中文语料(AC自动机实现多模查询)
前言: 在做这个项目之前,我有很大的抵触情绪,因为我认为这个任务已经完全超出了我的能力和认知范围,这个时候突然想到胡船长的一句话:当我们的生活遇到困难时,不应该总是抱怨生活有多么不公,而是应该想办法去改变这一现状。随着对问题的不断剖析,我逐渐地摸索出了一种解决方案.Day1: 在做这个项目之前我参阅了很多有关中文编码的资料,当今计算机主要采用的还是UTF-8编码,虽...原创 2018-08-08 10:49:11 · 758 阅读 · 2 评论 -
栈与队列
队列性质:先进先出(队尾入队,队头出队)分类: 单向队列循环队列单调队列优先队列(存储结构为队列,逻辑结构为堆)栈性质:先进后出(队尾入栈,队尾出栈)分类: 单项队列单调栈 栈适合解决所有完全包含关系的问题单调队列 : 均摊时间复杂度O(1), 适用于解决查询区间最值问题(线段树也适用)问题:在一个序列中需要一个五位的字串,排序后保证每一个数字...原创 2018-08-15 14:44:41 · 330 阅读 · 0 评论 -
01背包问题
Problem Description电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。Input多组数据。对于每组原创 2016-12-05 11:07:37 · 447 阅读 · 0 评论 -
高精度加法与乘法实现
众所周知,在一个很大的数字相加和相乘时,传统的整数类型规定的大小范围已经满足不了我们的需要,所以我们需要算法来实现大数相加与相乘。大数相加 思维参考思路很简单,通过整数型数组存入每一个数字,然后模拟小学时学得的加法运算,如果个位数相加超过10,则十位数加一,然后个位数减十,不断的进位来实现整个过程。大数相加 sample123456789 + 987654321 = ?大数相加 代码实现#inclu原创 2016-11-10 13:20:48 · 1258 阅读 · 0 评论 -
Morris遍历 - 二叉树神级遍历
时间复杂度O(1),额外空间复杂度O(1)的遍历方法。morris算法流程:当前节点记为 cur(引用)如果cur无左孩子,cur向右移动(cur = cur.right)如果cur有左孩子,找到cur左子树最右的节点,记为mostRight如果mostRight的右指针指向NULL,则让其指向cur,cur向左移动(cur = cur.left)//这里并不矛盾,往后看如果most...原创 2018-10-10 16:10:59 · 268 阅读 · 0 评论