算法竞赛中桶的概念与应用

算法竞赛中桶的概念与应用

在算法竞赛和计算机科学中,有一种特殊的数据结构,我们把它叫做——桶。

有许多和桶有关的算法和数据结构,想要学习它们,必须先明确好桶的概念与应用。

桶的概念

刚刚已经讲过,桶是一种数据结构。数据结构的用途是以一种特殊方式统计数据,使得我们能够快速地修改、查询我们想要的那部分数据。但是一般我们在想要统计一组数据的时候,我们更关注的是这些数据都是什么。就比如我们现在要统计一个数列,我们更关心的是这个数列里到底有那些数,而不是特别关心这些数都出现了几次。

桶就打破了这个现状,作为一种“特殊”的数据结构,它所统计的就是每个数据在数据集合中一共出现了多少次

这里引用了大佬@\(littleseven\)的比喻:一般的数据结构,就好比有几个篮子\(A,B,C\cdots\),我们接到了一个新的数据,就要考虑将其按我们想要的那种方式分类,然后扔到某一个篮子里。

桶呢?就好比有几个篮子\(1,2,3,4\cdots\),我们接到了一个新的数据,只看这个数据到底是什么,是1就扔进1号篮,2就扔进2号篮,以此类推。

这就是桶的概念了。

桶的应用

桶是一种数据结构。但是它的应用却不仅仅只在裸的统计次数上。

桶的应用有很多,比如权值数据结构和桶排。这都是后话了,希望大家在学习相关数据结构的时候,从实际感受和例题中,再次加深对桶的理解。

原文地址:https://www.cnblogs.com/fusiwei/p/12229376.html

时间: 2024-10-28 15:48:39

算法竞赛中桶的概念与应用的相关文章

算法竞赛中数论理论浅析

一.基本概念 带余除法(division algorithm,除法定理):a∈Z,d∈Z*,有唯一的整数 q 和 r,并且0≤r<d0,满足 a= d q+r.q 称为商,r  称为余数.通俗说法:整数除以正整数得到唯一的商(quotient)和余数(residue).  整除(divide exactly):称 a 整除 b ,当整数 a 除以非零整数 b ,商为整数,且余数为零, 我们就说a能被b整除(或说b能整除a),记作 b|a.b 称为 a 的约数(因数,common divisor)

STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法

以前比较排斥这两个函数,遇到二分都是手写 \(while(left<=right)\). 这次决定洗心革面记录一下这两个函数的在算法竞赛中的用法,毕竟一般不会导致TLE. 其实百度百科已经概述得比较清楚了, 我们假设 \(value\) 为一个给定的数值, \(lower\_bound\) 是在一个升序序列中从前后后找第一个大于等于 \(value\) 的值, \(upper\_bound\) 是在一个升序序列中从前后后找第一个大于 \(value\) 的值. 比如:\(lower\_bound

算法竞赛中常见的数学(一):Fibonacci数列

最近做的题目有很多都是与Fabonacci数列有关的,身为信息组蒟蒻的我最近经常与数学组李中一大神(Orz)畅谈,其中包括Fabonacci数列的若干性质,此处做一个总结. 参考资料: <组合数学(第5版)>.<具体数学(第2版)> 正文: Fibonacci数列是形如0.1.1.2.3.5.8.13.21.34……的数列.递归形式定义为: 数列F[n]=F[n-1]+F[n-2],其中F[0]=0,F[1]=1. 当然也有这样的类Fibonacci数列,即形如: G[n]=G[n

【技巧】算法竞赛中对拍程序的写法

在竞赛过程中一个对拍程序可以帮你排除许多错误, 如果担心自己写的正解被一些小数据卡掉, 我们通常会写个对拍程序来检查正解的正确性, 通过大量数据观察正解与暴力的输出是否相同. 我们首先拿出我们写的可能会超时但是可以保证绝对正确的暴力程序,称作bf.exe, 然后拿出我们写的待检测的正解,称作std.exe, 接着我们写一个随机数据生成程序,用来一次生成一组自制随机数据用来检测输出,称作gen.exe, 然后我们来写一个利用windows批处理的对拍程序. 在你的程序的根目录下新建一个称作chec

算法竞赛中的数论经典定理

素数定理:记为小于等于的素数个数,那么有 定理:设,,那么有 定理:设,,那么 定理:设,那么的值为 (1)为素数,那么答案就是 (2)有多个素因子,那么答案就是 (3)只有一个素因子,那么答案就是该素因子 定理:设为Fib数,那么有 定理:给定两个互素的正整数和,那么它们最大不能组合的数为,不能组合的数的个数为 定理:     (满足积性函数) 定理: 定理:任何个连续的正整数的乘积均可被整除 关于上述定理的两个结论 (1)如果是素数,那么均能被整除     证明:如果,那么有,由于与素数,那

《算法竞赛入门经典(第二版)》pdf

下载地址:网盘下载 内容简介  · · · · · · <算法竞赛入门经典(第2版)>是一本算法竞赛的入门与提高教材,把C/C++语言.算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧.全书内容分为12 章,包括程序设计入门.循环结构程序设计.数组和字符串.函数和递归.C++与STL入门.数据结构基础.暴力求解法.高效算法设计.动态规划初步.数学概念与方法.图论模型与算法.高级专题等内容,覆盖了算法竞赛入门和提高所需的主要知识点,并含有大量例题和习题.书中的代码规范.简洁.易懂,不

算法竞赛入门经典_2_变量及其输入

代码: //2017-6-19 变量及其输入 #include <stdio.h> #include <math.h> void AAndB(); void CircleZtArea(); int main() { AAndB(); CircleZtArea(); return 0; } void AAndB() { int a, b; scanf("%d%d", &a, &b); //scanf("%d", a);//错误,

【算法竞赛入门】【第一章】课后习题

今天心血来潮,决定将<算法竞赛入门经典>里面的课后题,进行详解,先来第一发. 习题1-1 平均数(average) 对于第一题,相信即便是第一次接触编程的人.只要稍稍了解一下C的语法,也可轻易解决这一题.所以我也不多说了直接上代码. #include <stdio.h> int main() { int a, b, c; while(scanf("%d%d%d",&a,&b,&c)!=EOF){ printf("%.3lf\n&

算法竞赛入门经典——读书笔记day1

1-1:整数值用%d输出,实数用%f输出. 1-2:整数/整数=整数,浮点数/浮点数=浮点数. 1-3:scanf中的占位符和变量的数据类型应一一对应,且每个变量前需要加&符号. 1-4:在算法竞赛中,输入前不要打印提示信息.输出完毕后应立即终止程序,不 要等待用户按键,因为输入输出过程都是自动的,没有人工干预. 1-5:在算法竞赛中不要使用头文件conio.h,包括getch().clrscr()等函数. 1-6:在算法竞赛中,每行输出均应以回车符结束,包括最后一行.除非特别说明,每行的行首不