数据结构
文章平均质量分 70
yerkeys
小小程序猿
展开
-
堆排序
#include <iostream>#include<cstdio>using namespace std;int Heap[100];int Hlength;void max_heapify(int Heap[], int s, int m) //向下调整堆{ int rc = Heap[s]; for (int j = s * 2;...原创 2018-02-09 18:35:15 · 148 阅读 · 0 评论 -
并查集操作
并查集用来管理元素分组情况的数据结构。1.初始化集合。数组fa记录每个节点的父节点编号,初始时各元素单独形成一个集合,fa[x]=x,x是所在树的根。另设rank数组记录根节点的秩,可以是树高度,也可以是集合内元素个数。void init(int n){ for(int i=0;i<n;i++) { fa[i]=i; rank[i]=1; } } 2.查找...原创 2018-02-12 16:41:47 · 240 阅读 · 0 评论 -
线段树
线段树用于对数据的更新和查询,主要优势体现在对段的处理上。如将数组a[]从a[i]-a[j]的元素均加上b,要做j-i+1次,而有一个段表示a[i]-a[j]的话,就直接将这个段的和sum加上b*(j-i+1)即可。同理,查询段的和也只需一次。线段树的原理就是将[1,n]分解成若干子区间,通过对其少量子区间进行修改统计实现对该区间快速的修改统计,用于统计的对象需符合区间加法,如求和,求最值,公...原创 2018-02-13 23:03:16 · 128 阅读 · 0 评论 -
树状数组
树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构,空间复杂度则为O(n),通过将线性结构转化成树状结构,从而进行跳跃式扫描。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值(如果加入多个辅助数组则可以...原创 2018-02-18 16:30:39 · 118 阅读 · 0 评论 -
C++ STL常用操作
目录一、vector1.vector 的初始化2.vector对象的常用操作3.顺序访问vector方式4.常用算法二、pair1、创建和初始化2、pair对象操作三、stack定义stack对象:stack的基本操作:四、queue定义queue对象queue的基本操作优先队列priority_queue五、algorithm...原创 2018-02-11 20:08:13 · 856 阅读 · 0 评论 -
欧几里得算法及扩展
辗转相除法求整数a,b的最大公约数gcd(a,b):定理:gcd(a,b)=gcd(b,a%b)证明:设a除以b得到的商和余数分别为k和r,则a=kb+r,r=a%b,设d为a,b公约数,则d一定整除r=a-kb,所以d是(b,a%b)的公约数。(a,b)和(b,a %b)公约数相同,最大公约数也一定相等。根据该定理不断操作下去最终得到gcd(a,b)=gcd(c,0)=c。复杂度...原创 2018-03-31 12:36:47 · 227 阅读 · 1 评论