
数据结构
文章平均质量分 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 · 172 阅读 · 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 · 272 阅读 · 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 · 155 阅读 · 0 评论 -
树状数组
树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构,空间复杂度则为O(n),通过将线性结构转化成树状结构,从而进行跳跃式扫描。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值(如果加入多个辅助数组则可以...原创 2018-02-18 16:30:39 · 144 阅读 · 0 评论 -
C++ STL常用操作
目录 一、vector 1.vector 的初始化 2.vector对象的常用操作 3.顺序访问vector方式 4.常用算法 二、pair 1、创建和初始化 2、pair对象操作 三、stack 定义stack对象: stack的基本操作: 四、queue 定义queue对象 queue的基本操作 优先队列priority_queue 五、algorithm...原创 2018-02-11 20:08:13 · 965 阅读 · 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 · 277 阅读 · 1 评论