微信扫一扫打赏支持

随笔分类 -  3_算法和数据结构

上一页 1 2 3 4 5 6 7 8 9 ··· 17 下一页
摘要:二叉查找树的删除操作 先说一下如何删除二叉树查找树的节点吧。总共有三种情况 1.被删除的节点是叶子节点,这时候只要把这个节点删除,再把指向这个节点的父节点指针置为空就行 2.被删除的节点有左子树,或者有右子树,而且只有其中一个,那么只要把当前删除节点的父节点指向被删除节点的左子树或者右子树就行。 3 阅读全文
posted @ 2018-01-09 19:32 范仁义 阅读(9801) 评论(3) 推荐(5)
摘要:二叉查找树的前驱后继 二叉搜索树节点的前驱后继节点 之前写过文章介绍了二叉搜索树以及其上的基本操作,但不包括求节点的前驱结点和后继节点。 这是一个很老的问题了,首先看下某节点前驱和后继节点的定义。一个节点的 前驱结点:节点val值小于该节点val值并且值最大的节点 后继节点:节点val值大于该节点v 阅读全文
posted @ 2018-01-09 16:41 范仁义 阅读(6812) 评论(3) 推荐(3)
摘要:替罪羊树 总结: 1、伸展树靠不停的旋转来保持平衡,treap的话用一个随机的东西保持平衡,而替罪羊树直接把不平衡的子树拍平,直接暴力重构来平衡 2、重构允许重构整棵替罪羊树,也允许重构替罪羊树其中的一棵子树。 3、替罪羊树可以和kd-tree结合使用 详解: 0x00 扯淡 知乎上面有个问题问最优 阅读全文
posted @ 2018-01-08 18:58 范仁义 阅读(957) 评论(0) 推荐(0)
摘要:DFS序 总结: 1、树转化为线性:将树通过dfs转化为线性结构,这就是dfs序,和树链剖分有点相似 2、普通树转化为线段树:记录每个节点构成的树(子树)的起点和终点,起点是自己,这样每个点就构成了一个区间,然后对区间的操作就和线段树和树状数组一样了。 3、DFS序主要用来做子树的更新,因为DFS序 阅读全文
posted @ 2018-01-08 18:05 范仁义 阅读(407) 评论(1) 推荐(0)
摘要:bzoj3224: Tyvj 1728 普通平衡树(平衡树) 总结 a. cout<<(x=3)<<endl;这句话输出的值是3,那么对应的,在splay操作中,当父亲不为0的时候,就一直向上旋转 3224: Tyvj 1728 普通平衡树 Description 您需要写一种数据结构(可参考题目标 阅读全文
posted @ 2018-01-07 21:15 范仁义 阅读(364) 评论(0) 推荐(0)
摘要:splay树入门(带3个例题) 首先声明,本教程的对象是完全没有接触过splay的OIer,大牛请右上角。。 PS:若代码有误,请尽快与本人联系,我会尽快改正 首先引入一下splay的概念,他的中文名是伸展树,意思差不多就是可以随意翻转的二叉树 PS:百度百科中伸展树读作:BoGang,不知道是不是 阅读全文
posted @ 2018-01-07 20:37 范仁义 阅读(450) 评论(0) 推荐(0)
摘要:红黑树 概要 目录1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除 作者:Sky Wang 于 2013-08-08 概述:R-B Tree,又称为“红黑树”。本文参考了《算法导论》 阅读全文
posted @ 2018-01-07 19:44 范仁义 阅读(280) 评论(0) 推荐(0)
摘要:AVL树 总结: 1、节点定义 a. 增加了高度属性,因为平衡树就是为了让树平衡,为了让树的局部没那么高 b. key属性是二叉排序树中的标志属性,排序属性。 2、节点的创建 a. 创建节点的时候将节点的高度都默认为了0,其它操作都和在二叉查找树中一样 3、获取根节点高度(获取树高)的方法 本文采用 阅读全文
posted @ 2018-01-07 15:37 范仁义 阅读(468) 评论(0) 推荐(0)
摘要:二分图染色模板(P1330 封锁阳光大学) 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M条道路连接。每只河蟹可以对一个点进行封锁,当某个点被封锁 阅读全文
posted @ 2018-01-03 20:31 范仁义 阅读(207) 评论(0) 推荐(0)
摘要:P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题。如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序。 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1不为空,将S1栈顶元素弹出至输出序列 操作c 如果输入序列不为空 阅读全文
posted @ 2018-01-03 20:14 范仁义 阅读(418) 评论(0) 推荐(0)
摘要:CF 86D 莫队(卡常数) D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standard output D. Powe 阅读全文
posted @ 2018-01-03 20:06 范仁义 阅读(470) 评论(0) 推荐(0)
摘要:P1228 地毯填补问题(分治) 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上,美丽漂亮聪慧的公主就是他的人了。公主这一个方格不能用地毯盖住,毯子 阅读全文
posted @ 2018-01-03 19:46 范仁义 阅读(1245) 评论(0) 推荐(0)
摘要:二叉查找树 总结: 1、节点的定义中 a. 左右孩子用指针定义,类似于int *left,因为结构体本身就是一种自定义类型,struct BSTreeNode看成系统的类型int不过分。 b. 用了typedef重定义类型,给struct BSTreeNode起了两个别名Node和*BSTree。 阅读全文
posted @ 2018-01-03 19:31 范仁义 阅读(3966) 评论(0) 推荐(0)
摘要:伸展树 总结 a. 伸展树在插入操作后需要将插入的这个点旋转为根节点 b. 删除操作的时候将删除的那个点的前驱节点设置为根节点 c. 伸展树的伸展操作就是以找到的这个点左旋或者右旋,包括三个步骤,旋转,链接,组合,因为是以找到的这个点为基点来旋转的,所以旋转一步就可以保证找到的这个点为根节点。 d. 阅读全文
posted @ 2018-01-03 19:27 范仁义 阅读(466) 评论(0) 推荐(0)
摘要:最小生成树(Kruskal和Prim算法) 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图。 强连通图:在有向图中,若任意两个顶点vi与vj都有路径相通,则称该有向图为强连通图。 连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个 阅读全文
posted @ 2018-01-03 16:16 范仁义 阅读(1406) 评论(0) 推荐(0)
摘要:【bzoj2038】[2009国家集训队]小Z的袜子(hose)(细致总结) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从 阅读全文
posted @ 2018-01-03 15:15 范仁义 阅读(430) 评论(0) 推荐(0)
摘要:清橙A1206.小Z的袜子 && CF 86D(莫队两题) 在网上看了一些别人写的关于莫队算法的介绍,我认为,莫队与其说是一种算法,不如说是一种思想,他通过先分块再排序来优化离线查询问题。 应用范围:一般问题是让你回答多个连续区间上的问题,如果你知道了区间【l,r】的答案、你就可以在O(1)或O(l 阅读全文
posted @ 2018-01-03 15:10 范仁义 阅读(444) 评论(0) 推荐(0)
摘要:倍增算法 【序言】 我认为吧,所有能够优化复杂度的算法都是神奇的,所有能够化繁琐为形象的文字都是伟大的。一直觉得倍增算法是个很神奇的东西,所以决定写点东西纪念一下它。但是作为一个非常不称职的OIER,我非常讨厌在看别人的算法解析时整版的i,j,k等我看到鼠标就惯性移到右上角的符号语言,所以我想用最形 阅读全文
posted @ 2017-12-29 09:04 范仁义 阅读(580) 评论(0) 推荐(0)
摘要:矩阵快速幂求斐波那契数列(总结) 第一部分:矩阵的基础知识 1.结合性 (AB)C=A(BC). 2.对加法的分配性 (A+B)C=AC+BC,C(A+B)=CA+CB . 3.对数乘的结合性 k(AB)=(kA)B =A(kB). 4.关于转置 (AB)'=B'A'. 一个矩阵就是一个二维数组,为 阅读全文
posted @ 2017-12-29 09:00 范仁义 阅读(3325) 评论(0) 推荐(2)
摘要:快速幂总结 快速幂这个东西比较好理解,但实现起来到不老好办,记了几次老是忘,今天把它系统的总结一下防止忘记。 首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下: 阅读全文
posted @ 2017-12-29 08:49 范仁义 阅读(268) 评论(0) 推荐(1)

上一页 1 2 3 4 5 6 7 8 9 ··· 17 下一页