数据结构
wjsay
白色的蜻蜓,在空中忘记了飞行。
我的 github ID: zzuwenjie
展开
-
堆-数据结构
学习Treap前先把堆回顾一下堆堆的基本性质堆也可以说是一个完全二叉树,就是除了最底层的,其它层是满的,既然我们可以用完全二叉树来表示一个堆,那么我们这里就采用数组结构的二叉树来阐述堆的性质。 假设在这里我们用数组A表示堆,A[i]表示堆里面的第i个元素,于是我们通过二叉树的性质可知:PARENT(i) = i/2LEFTCHILD(i) = 2*iRI转载 2017-07-11 20:20:20 · 340 阅读 · 0 评论 -
划分树讲解
搜索关于划分树的讲解,竟然搜到了郑大媛学姐的博文,不是这篇原博文有错误,我就不给出原链接了用划分树来解决选定区间内的第K大值,其实也就两步!一步是建树,另一步则是查询。 先说我对建树的理解吧! 建树的过程很简单:两步就OK了! 第一步:找到序列的中位数,把大于中位数的扔到中位数的左边,小于中位数的扔到数的右边。这样整个序列就被转载 2017-07-12 18:31:36 · 355 阅读 · 0 评论 -
归并树讲解
划分树和快排划分有关,归并树和归并排序的归并有关。 在求解区间第k个数的问题,除了划分树以外我们还可以使用另一种高效的方法 ------ 归并树。1、算法描述 所谓归并树,就是利用线段树的建树过程,将归并排序的过程保存。(不会线段树:here,不会归并排序:here)。在说明归并树之前我们先看看这样的一个问题:[plain] view pl转载 2017-07-14 14:57:59 · 655 阅读 · 0 评论 -
spoj ORDERSET - Order statistic set Hash+树状数组。附另一种解法,使用了policy based data structrue
这个题本来是学树堆Treap练习的,但是我的板子超时,无奈之下去墙那边看了下,老外用了树状数组给解出来了,很巧妙的离散化操作。。。Orz。。。ORDERSET - Order statistic set#tree #binary-searchEnglishVietnameseIn this problem, you have转载 2017-07-17 21:52:25 · 529 阅读 · 0 评论 -
RMQ算法分析-区间最最值查询
RMQ(range minV/maxV query)算法是一个快速求区间最值得离线算法,预处理时间为O(nlgn),查询时间为O(1)。这个问题也可以用线段树解决。问题描述:给出n个数ary[i],快速求出某一区间的最值。算法思想:DP + 位运算算法分析,状态:dp[i][j] 表示第i为开始,到(i + 2^j - 1)位的最大/小值。状态转移方程建立:转载 2017-05-21 18:48:52 · 443 阅读 · 0 评论 -
KMP算法
//KMP算法实现,参照ACM模板//牛客网,上海交通大学机试题#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1e6+7;char P[maxn],T[maxn];int Next[maxn];void preKmp(c...原创 2016-12-13 23:38:08 · 358 阅读 · 0 评论 -
Lowest Common Ancestor 最近公共祖先 过了初 中级测试,附:国外大神满分简洁代码
LCA:最近公共祖先,对于有根树T的两个节点u,v,最近公共祖先LCA(T,u,v)表示一个节点x,满足x是u,v的祖先且x的深度depth尽可能大。https://www.codechef.com/LTIME14/problems/TALCA终于把LCA这棵树给调试好了,在错误中不断修改,用了新学的离线操作,还有前向星存图 也只帮我过了中级测试,高级测试TLE,因为没有发现其中的技巧原创 2017-07-19 21:59:15 · 507 阅读 · 0 评论 -
spfa 快速最短路-队列优化
spfa 快速最短路-队列优化,可以用 hdu2544 验证算法的正确性里面的spfa算法摘自ardart 的板子。把这个函数记录在网上,以免忘记。我再理解下。#define _CRT_SECURE_NO_WARNINGS#include #include #include #include using namespace std;const int maxn = 1e4原创 2017-05-20 13:34:56 · 358 阅读 · 0 评论 -
矩阵快素幂 板子
求递推公式的第n项,当n很大时,用矩阵快速幂很有效。时间复杂度O(m^3*logn),m为递推公式跨越了几项。以杭电2017女生专场赛 happy necklace 为例,看如何套板子。分析的递推公式 如图:根据递推公式写出计算an的矩阵,然后套下面板子(计算矩阵乘时,有优化)#define _CRT_SECURE_NO_WARNINGS#include #原创 2017-07-21 09:31:52 · 415 阅读 · 0 评论 -
舞蹈链模板 Dancing Links
完全覆盖矩阵从1开始,判断是否可以完全覆盖:g.Dance(0)const int maxnode = 100010;const int MaxM = 1010;const int MaxN = 1010;struct DLX { //四向链表 int n, m, size; //n行,m列;元素上下左右对应指针 int U[maxnode], D[maxnode], L[max原创 2017-09-02 11:07:31 · 450 阅读 · 0 评论 -
二叉树的遍历与求深度的递归与非递归实现
//=========二叉树(Binary Tree)===========#define _CRT_SECURE_NO_WARNINGS#include#includeusing namespace std;#include#include#include#define OVERFLOW -1#define OK 1#define ERROR 0#define max(a原创 2016-11-26 21:01:31 · 502 阅读 · 0 评论 -
哈夫曼编码
//==========HaffmanTree & HaffmanCode===============#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#define Status int#define OK 1#define ERROR 0#define BOOLEAN int#define TRU原创 2016-12-18 19:12:56 · 479 阅读 · 0 评论 -
线段树讲解及例题
线段树转一:线段树基本概念1:概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操转载 2017-07-10 18:03:26 · 1583 阅读 · 0 评论 -
主席树讲解
——————————————————————————————————————————————————————————————————————————————————————————————以下转自http://prominences.weebly.com/1/post/2013/02/1.html可持久化线段树,也叫作函数式线段树,也就是主席树,(。。。因为先驱就是fotile主席转载 2017-07-10 11:26:34 · 340 阅读 · 0 评论 -
Chaos Strings BIT类似求逆序数
Runing on judge 1 5 9 28……Accepted处理字符串,根据字符串的字典序对其进行赋予权值,接近a的权值大些,然后在按转置的字符串X' 对 X(原串)进行排序,再然后就是很裸的树状数组模板求逆序数了。Little Lovro likes to play games with words. During the last few weeks he原创 2017-07-08 13:33:23 · 330 阅读 · 0 评论 -
归并排序求逆序对数 (附另两种姿势BIT 线段树)
求逆序数 三种方法 归并排序 树状数组 线段树交换次数即为逆序对数poj1804数据范围小,int不会溢出,spoj上提价需用long long(注册spoj时,获取验证码时会访问谷歌,所以需要……)#define _CRT_SECURE_NO_WARNINGS#include #include const int maxn = 2e5 + 7;int a[maxn], b[maxn];long long cnt;//函数原创 2017-07-07 09:46:55 · 405 阅读 · 0 评论 -
字典树
1. Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3个基本转载 2017-07-06 10:55:22 · 194 阅读 · 0 评论 -
海量数据处理-BIT Map
转自 http://blog.csdn.net/hguisu/article/details/78802881. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit转载 2017-07-06 09:06:35 · 299 阅读 · 0 评论 -
最大连续子序列和
题目描述:给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。对于S的所有非空连续子序列T,求最大的序列和。变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。 输入:第一行为一个正整数N,第二行为N个整数,表示序列中的数。输出:输入可能包括多组数据,对于每一原创 2017-03-30 22:18:19 · 344 阅读 · 0 评论 -
dijkstra算法,单源最短路径算法,含记录路径
v0为源点,N为邻接矩阵的阶,edge为邻接矩阵,maxn为常量,path用来保存路径节点的前驱,D用来保存最短路径权重和。顺便说一下,严蔚敏的数据结构中的这个算法只能保存最短路径上的节点,并得不到先后顺序。//从某个点到其余各点间的最小距离void dijkstra(int v0, int N, int edge[][maxn], int path[], int D[]) { for (原创 2017-03-19 22:55:04 · 886 阅读 · 0 评论 -
畅通工程-并查集-HDU1232
练习使用一下并查集模板(嵌在代码中),因为今天省赛热身赛用到了并查集的father[]或者说是per[]数组的思想(也可能不是啦)。hdu1232 click here#include #define N 1007int pre[N]; int find(int x) { //查找根节点 int r = x; while (pre[r] != r)原创 2017-05-06 21:05:04 · 316 阅读 · 0 评论 -
深度理解链式前向星
摘自ACDreamers,略加改动我们首先来看一下什么是前向星.前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.用len[i]来记录所有以i为起点的边在数组中的存储长度.用head[i]记录转载 2017-04-29 15:01:53 · 456 阅读 · 1 评论 -
最小生成树
无向图,最小生成树MST,节点有1到n,PRIM算法,O(n^n)#define _CRT_SECURE_NO_WARNINGS#include #include #include #include #include #include #include #include #include #include #include #include #include #in原创 2017-04-12 11:54:09 · 284 阅读 · 0 评论