20天集训——day17

今天依旧是讲数据结构。讲了单调栈,单调队列,哈希,并查集。

单调栈、单调队列:是由于存放按照“先进先出”或先进后出顺序出现,但又需要控制单调性的数据。

单调栈:是指一个内部元素具有严格单调性的栈,分为单调递增栈和单调递减栈。性质:满足栈先进后出的特性,满足从栈顶到栈底的元素具有严格的单调性。元素进栈过程:假设要一个单调递增栈,若当前进栈的元素为a如果a<栈顶元素则直接将a进栈,假如a>=当前栈顶元素则不断将栈顶元素出栈直到满足a<栈顶元素。

单调队列:是指一个内部的元素具有严格单调性的队列,分为单调递增队列和单调递减队列。性质:满足队列先进先出的特性,满足从队头到队尾的严格单调性。元素进队列过程:假设要一个单调递增队列,对于一个将入队的元素a如果a>队尾元素那么直接入队尾,如果a<=队尾元素,两种方案,将队尾元素出队列,直到满足a大于队尾元素,或者直接清空队列,按需要选择。

哈希:是把关键字k的记录放在f(k)的存储位置上,就是h[f(k)]=d[k]。当f[k]不适合作下标时用哈希(k是一个字符串或一个大范围内的随机数);哈希常用方法:1.f(k)=k%p(p是一个满足空间复杂度要求的大质数);2.按全展开法转化为对应的十进制数,在转化过程中同时利用取模。当下标冲突时可以用线性探测开拓地址法:当h[f[k]]已经有数值填入的时候尝试填入h[f[k]+1]……直到找到一个空位填入。拉链法:为哈希表每一个位置创建一个链表,利用链表的特性快速扩充哈希储存空间。

哈希函数:

int f(int K)
{
 int k;
 k=对K做取模、按位权展开等处理。
 return k;
}

并查集:(集合是若干个具有共性的元素相互联系在一起,组合起来。不同的集合可以合并)并查集是一种快速合并集合和查找集合的算法。

初始化:

for(int i=1;i<=n;i++)
 f[i]=i;

判断数据所属集合:

int find(int x)
{
 if(f[x]==x)
  return x;
 else
 {
  f[x]=find(f[x]);
  return f[x];
 }
}

集合合并:

f[find(x)]=find(y);
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值