![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 93
算法系列文章
柏油
不负冬日春晓 不负青春韶华
展开
-
Redis数据结构为什么既省内存又高效?Redis 数据类型 + 数据结构超全指南
**Redis 数据结构为什么既高效又节省内存?**永恒的问题 ------ `空间`与`时间`的较量1)节省内存: - 一般通过特定的编码约定,将数据进行压缩,比如 ziplist、quicklist、listpack ..., - 还有,比如一些只包含数字的字符串可以通过 int 来存储(int 通常有 2字节、4字节、8字节) ,对应 redis 的 intset 结构 ... - 另外,把大家可能都有的部分抽取出来公用也是一种手段,比如 radix 前缀树、共享对象 ...原创 2022-10-24 07:42:39 · 634 阅读 · 0 评论 -
redis HyperLogLog,看这篇就够了
考虑这样一个场景,如何统计一个大型网站的去重日活、月活用户(UV)?你可以通过 set 集合、bitmap 这类常用工具,但有个最大的缺点是,如果数据量巨大,比如 1 亿,甚至 10 亿将耗费巨大内存消耗。有人研究出了这样一种算法叫 `HyperLogLog`,是一种概率性的统计算法,每个 `HyperLogLog` 对象最大占用空间为 `12KB`,相当节省内存。你应该也猜到了,这么小的内存消耗,是无法记录真实的明细数据,统计数值也不是完全精准,有一定的误差比例。原创 2022-10-18 11:30:00 · 5548 阅读 · 0 评论 -
利用栈求表达式的值(数据结构课程设计)
课程设计的内容和要求(包括原始数据、技术要求、工作要求等)编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。主要功能描述如下:1、从键盘上输入表达式。2、分析该表达式是否合法:(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。(3)若是其它字符原创 2017-06-27 11:22:27 · 14449 阅读 · 14 评论 -
几种排序方法的比较(选择、冒泡、归并、快排)
代码:#include#include#include#includeusing namespace std;const int maxn = 50000;//冒泡排序:void bubble(int a[],int len){ for(int i = 0;i < len-1;i++){ for(int j = 0; j < len-i-1; j++){ if(a[原创 2017-10-30 16:13:31 · 579 阅读 · 0 评论 -
线性时间求第k小(分治思想)
方法:将序列5个一组进行分组,找出每组得中位数,在从这些中位数中找出中位数(递归找出,当元素个数小于75时,则采用简单排序进行排序,将第k小值返回),作为划分元素(快排划分思想)。O(n)的由来:只要能保证两边划分的元素比大于1/10,试验得出的结论是可以看作O(n)的(在数据量很大的情况下)。产生20000个随机数,任意输入k的值,输出结果。另输出前200小的数做验证:#incl...原创 2017-11-06 20:24:07 · 1174 阅读 · 0 评论 -
棋盘覆盖--分治法
问题:在一个2^k×2^k (k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中可能出现的位置有4^k种,因而有4^k种不同的棋盘,棋盘覆盖问题(chess cover problem)要求用L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。思路:分治法每次将棋盘分成四等份,特殊方格一定在其中一份原创 2017-10-30 16:03:55 · 415 阅读 · 0 评论 -
UVA 12627 Erratic Expansion (递归,分治)
题意:一开始有一个红气球,每小时后,一个红气球会变成3个红气球和一个蓝气球,而每一个蓝气球会变成4个蓝气球;经过K个小时后,第A~B行共有多少个红气球?紫书思路:分治思想,k小时由四个k-1小时的情况而成,其中右下角全是蓝气球,不用考虑。 f(k,i)表示k小时之后最上面i行的红气球总数,g(k,i)表示k小时之后最下面i行的红气球总数(当 i如果i>=2^(k-1),则满足g(k,i原创 2017-06-22 22:14:36 · 347 阅读 · 0 评论 -
hihoCoder 1062 : 最近公共祖先·一(map、set 运用)
#1062 : 最近公共祖先·一时间限制:10000ms单点时限:1000ms内存限制:256MB描述小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中,但这是为什么呢?“为什么呢?”小Hi如是问道,在他的观察中小Ho已经沉迷这个网站一周之久了,甚至连他心爱的树玩具都弃置一边。“嘿嘿,小Hi,原创 2017-05-06 11:39:21 · 257 阅读 · 0 评论 -
hihoCoder 1068 : RMQ-ST算法 (区间最值查询之 rmq算法)
#1068 : RMQ-ST算法时间限制:10000ms单点时限:1000ms内存限制:256MB描述小Hi和小Ho在美国旅行了相当长的一段时间之后,终于准备要回国啦!而在回国之前,他们准备去超市采购一些当地特产——比如汉堡(大雾)之类的回国。但等到了超市之后,小Hi和小Ho发现者超市拥有的商品种类实在太多了——他们实在看不过来了!于是小原创 2017-05-04 20:10:53 · 311 阅读 · 0 评论 -
pzhu~1084 值班时间
值班时间Description假设学校某部门需要24小时不间断的有人值守,该部门有n名教师,同时考虑到有些老师还需要上课,所以学校允许他们实行弹性上班制。考虑到部门的运转,学校要求该部门任意时刻至少要有一个人在岗,但总有那么一些人会偷懒,如果给出你该部门有n(不超过5*10^3)名教师,同时给出每名教师的上班时间和离开时间(为了好计算,假设时间我们都统一用秒来表示,且不大于10^6),原创 2017-05-01 11:53:21 · 674 阅读 · 0 评论 -
hihoCoder 1514 : 偶像的条件(模拟+二分)
#1514 : 偶像的条件时间限制:10000ms单点时限:1000ms内存限制:256MB描述小Hi的学校正面临着废校的大危机。面对学校的危机,小Hi同学们决定从ABC三个班中各挑出一名同学成为偶像。 成为偶像团体的条件之一,就是3名团员之间的身高差越小越好。 已知ABC三个班同学的身高分别是A1..AN, B1..BM 和 C原创 2017-05-09 21:21:30 · 525 阅读 · 0 评论 -
计蒜客 非递归二叉树的前序遍历(树结构)
给定一个层数小于等于10的二叉树,输出对其前序遍历的节点名序列。输入包括一行,为由空格分隔开的各节点,按照二叉树的分层遍历顺序给出,每个节点形式如X(Y,num),X表示该节点,Y表示父节点,num为0,1,2中的一个,0 表示根节点,1表示为父节点的左子节点,2表示为父节点的右子节点。输出为一行,为前序遍历的结果。样例输入A(0,0) B(A,1) C(A,2) D(B,原创 2017-11-16 21:25:09 · 367 阅读 · 0 评论 -
UVA 120 Stacks of Flapjacks (煎饼)
题意:给你一些煎饼,要求你排序,输出排序的过程,例如,输出1,表示将最底下的元素以及它上方的元素倒置,3:从底下数第三个元素及以上的所有元素倒置AC代码:#include#includeusing namespace std;const int maxn=30+2;int a[maxn];void exchange(int pos){ for(int j = 1; j <=原创 2017-06-06 15:23:54 · 253 阅读 · 0 评论 -
hihoCoder 1523 : 数组重排2
#1523 : 数组重排2时间限制:10000ms单点时限:1000ms内存限制:256MB描述给定一个1-N的排列A1, A2, ... AN,每次操作小Hi可以选择一个数,把它放到数组的最左边。请计算小Hi最少进行几次操作就能使得新数组是递增排列的。输入第一行包含一个整数N。第二行包含N个两两不同整数A1, A2, ...原创 2017-05-22 21:09:06 · 1104 阅读 · 1 评论 -
hihoCoder hiho一下 第148周--Font Size (模拟)
Font Size时间限制:10000ms单点时限:1000ms内存限制:256MB描述Steven loves reading book on his phone. The book he reads now consists of N paragraphs and the i-th paragraph contains ai characte原创 2017-05-06 09:25:54 · 302 阅读 · 0 评论 -
计蒜客 非递归二叉树的后序遍历(树结构)
给定一个层数小于等于10的二叉树,输出对其后序遍历的节点名序列。输入包括一行,为由空格分隔开的各节点,按照二叉树的分层遍历顺序给出,每个节点形式如X(Y,num),X表示该节点,Y表示父节点,num为0,1,2中的一个,0 表示根节点,1表示为父节点的左子节点,2表示为父节点的右子节点。输出为一行,为后序遍历的结果。样例输入A(0,0) B(A,1) C(A,2) D(B,原创 2017-11-16 21:12:40 · 343 阅读 · 0 评论 -
百度2017春招笔试真题编程题 --有趣的排序
[编程题] 有趣的排序时间限制:1秒空间限制:32768K度度熊有一个N个数的数组,他想将数组从大到小排好序,但是萌萌的度度熊只会下面这个操作:任取数组中的一个数然后将它放置在数组的最后一个位置。问最少操作多少次可以使得数组从小到大有序?输入描述:首先输入一个正整数N,接下来的一行输入N个整数。(N 输出描述:输出一个整数表示最少的操作次数。原创 2017-05-10 22:51:15 · 1100 阅读 · 0 评论 -
hihoCoder 1518 : 最大集合
#1518 : 最大集合时间限制:10000ms单点时限:1000ms内存限制:256MB描述给定一个1-N的排列A[1], A[2], ... A[N],定义集合S[K] = {A[K], A[A[K]], A[A[A[K]]] ... }。 显然对于任意的K=1..N,S[K]都是有限集合。 你能求出其中包含整数最多的S[K]原创 2017-05-09 20:26:02 · 654 阅读 · 0 评论 -
HDU 1102 Constructing Roads (最小生成树 Prim算法)
Constructing RoadsTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24869 Accepted Submission(s): 9583Problem DescriptionThere原创 2017-11-23 21:37:56 · 206 阅读 · 0 评论 -
HDU 1875 畅通工程再续(最小生成树-Kruskal算法)
畅通工程再续Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 31755 Accepted Submission(s): 10407Problem Description相信大家都听说一个“百岛湖”的地方原创 2017-11-24 15:21:31 · 266 阅读 · 0 评论 -
计蒜客 灌溉 (最小生成树之prim算法)
到了旱季农业生产的灌溉就成了一个大问题。为了保证灌溉的顺利,某县政府决定投资为各个村之间建立灌溉管道。输入第1行包括一个整数N,表示某县的村庄的数量。(3≤N≤100),第2行-结尾为一个N×N的矩阵,表示每个村庄之间的距离。虽然在理论上,他们是N行,每行由N个用空格分隔的数组成,实际上,他们限制在80个字符,因此,某些行会紧接着另一些行。当然,对角线将会是0,因为不会有线路从第i个村到它本身原创 2017-05-20 14:07:54 · 660 阅读 · 0 评论 -
hihoCoder 1097 : 最小生成树一·Prim算法
#1097 : 最小生成树一·Prim算法时间限制:10000ms单点时限:1000ms内存限制:256MB描述最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了!但是,问题也接踵而来——小Hi现在手上拥有N座城市,且已知这N座城市中任意两座城市之间建造道路所需要的费用,小Hi希望知道,最少原创 2017-05-03 16:59:14 · 301 阅读 · 0 评论 -
HDU 3791 二叉搜索树
二叉搜索树Problem Description判断两序列是否为同一二叉搜索树序列 Input开始一个数n,(1接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。 Output如果序列相原创 2017-04-19 20:38:36 · 311 阅读 · 0 评论 -
POJ 2418 Hardwood Species (二叉查找树--插入操作)
Hardwood SpeciesTime Limit: 10000MS Memory Limit: 65536KTotal Submissions: 24658 Accepted: 9530DescriptionHardwoods are the botanical group of trees that have broad原创 2017-04-19 18:32:14 · 387 阅读 · 0 评论 -
HDU 3999 The order of a Tree (二叉搜索树+先序遍历)
The order of a TreeProblem DescriptionAs we know,the shape of a binary search tree is greatly related to the order of keys we insert. To be precisely:1. insert a key k to a empty tree, then t原创 2017-04-19 21:27:15 · 1333 阅读 · 0 评论 -
UVA 11572 Unique Snowflakes (滑动窗口)
题意:给出一个序列, 要找出最长的连续子序列,不存在重复元素。紫书题解:假设元素从0开始编号,连续子序列的左端点L,右端点R。起初L=R=0,不断增加R,判断a[R+1]是否在[L,R]这个区间出现过,若出现过,则从set集合中删除a[L](即L向右移动一位)。不断的这样判断直到最后结束即可。AC代码:#include#include#include#includeusing原创 2017-06-17 09:24:21 · 260 阅读 · 0 评论 -
切面条(大数据处理)
切面条Description有一个做面条的师傅,空闲的时候他喜欢切面条玩,他切面条的方法是:把面条对折几次,然后一刀从左半部分中间处切开,第二刀从右半部分中间处切开。师傅想要知道最后会变成几根面条,你能帮助他吗?注意:面条足够长。Input输入一个非负整数n(0Output输出对折n次后切了两刀之后面条的根数,结果对1000000007取余。原创 2016-12-25 08:57:47 · 503 阅读 · 0 评论 -
HDU 1173 采矿
某天gameboy玩魔兽RPG。有一个任务是在一个富含金矿的圆形小岛上建一个基地,以最快的速度采集完这个小岛上的所有金矿。这个小岛上有n(0<n<1000000)个金矿,每个金矿的矿藏量是相等的。而且这个小岛的地势非常平坦,所以基地可以建在小岛的任何位置,每个金矿的采矿速度只跟矿藏到基地的路程长度有关。为了不让这个任务太无聊,游戏设计者对这个小岛施了个“魔法”,规定矿工在小岛上只能正南正北正西正东原创 2017-06-15 20:09:48 · 259 阅读 · 0 评论 -
UVA 12171 Shuffle的播放记录(滑动窗口)
题意:假设一共有首歌,则一开始会给这s首歌随排列,全部播放完毕后再重新随机排序,继续播放,依次类推。当s首歌播放完毕之前不会重新排序;这样,播放记录里的没s首歌都是1~n的一个排列。给一个长度为n的播放记录,统计给出序列中第一个数在某个排序中的播放位置的种类。例如:s=4,播放记录是 3,4 ,4, 1 , 3 ,2, 1 , 2 ,3 ,4,只有一种可能性:前两首是一个段的最后两首,后面是原创 2017-06-21 17:57:29 · 307 阅读 · 0 评论 -
UVA 11504--Wine trading in Gergovia(思维题)
题意:把k个单位的酒从村庄运到相邻村庄需要k个单位的劳动力 。计算最少需要多少劳动力可以满足所有村庄的需求。输出保证在64为带符号整数的范围内。紫书上的思路:考虑最左边的村庄。如果需要买酒,即ai>0 ,则一定有劳动力从村庄2往左运给村庄1,而不管这些酒是从哪里来的。这样,问题就等价于只有村庄2~n,且第二个村庄的需求为a1+a2。 aiAC代码:#include#include#原创 2017-06-16 18:50:22 · 358 阅读 · 0 评论 -
HDU 2049 不容易系列之(4)——考新郎 (错排公式)
国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排; 然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个. 最后,揭开盖头,如果找错了对象就要当众跪搓衣板... 看来做新郎也不是容易的事原创 2017-06-15 21:45:19 · 334 阅读 · 0 评论 -
UVA 1605 Building for UN--联合国大厦
题意:修建一个长方体的联合国大厦,n个国家入驻,要求任意两个国家最少存在一对办公室相邻(相邻:隔一层墙或者一层天花板) 输出楼层H, 每层楼有w 行,l 列。思路:参照紫书上的思路是,一共有两层,每层都是n*n的,第一层的第i行全是国家i,第二层的第j列全是国家j的。 AC代码:#include#includeusing namespace std;const int ma原创 2017-06-16 10:34:22 · 423 阅读 · 0 评论 -
UVA 714 Copying Books (二分)
题意:把一个包含m个正整数的序列划分成k个非空的连续子序列,使得每个正整数恰好属于一个序列。设第i个序列的和为S(i),要找所有S(i)的最大值尽量小。如有多解,S(1)应尽量小。如果仍有多解,S(2)应尽量小,以此类推。思路:通过二分找到一个最小x ,使得对任意S(i)AC代码:#include#include#includeusing namespace std;con原创 2017-06-21 22:28:47 · 301 阅读 · 0 评论 -
蓝桥杯 历届试题 蚂蚁感冒 (思维题)
历届试题 蚂蚁感冒 时间限制:1.0s 内存限制:256.0MB 问题描述 长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的原创 2017-03-31 09:15:51 · 498 阅读 · 0 评论 -
HDU 1527 取石子游戏(威佐夫博奕)
取石子游戏Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6889 Accepted Submission(s): 3757Problem Description有两堆石子,数量任意,可以不同。游戏开始由两个人原创 2017-03-20 21:32:52 · 344 阅读 · 0 评论 -
nyoj 23 取石子(一)(巴什博弈)
取石子(一)时间限制:3000 ms | 内存限制:65535 KB难度:2描述 一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子。游戏的规则是这样的。设有一堆石子,数量为N(1<=N<=1000000),两个人轮番取出其中的若干个,每次最多取M个(1<=M<=1000000),最先把石子取完者胜利。我们知道,TT和他/她的室原创 2017-03-20 19:21:31 · 278 阅读 · 0 评论 -
hdu 2516 取石子游戏(斐波那契博弈)
取石子游戏Problem Description1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win". Input输入有多组.每组第1行是2 Output先取者负输出"Second win". 先取原创 2017-04-02 09:37:31 · 332 阅读 · 0 评论