自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

转载 【原】水库抽样详解

此经典算法收录于TAOCP中,但高大爷只给出算法步骤没给出证明,这里将详细定义并做证明 定义: 从N个记录中随机选择n个记录,但一开始并不知道N为多少。 算法: 1. 选择抽样算法: 可顺序扫描N个记录,对第t+1个记录以概率(n-m)/(N-t)来选择(m为已选得的记录数),但这样做必须事先顺序扫描一遍文件以获得N的大小。 2. 水库抽样算法:...

2019-10-03 16:01:51 634

转载 【原】模幂运算(Modular Exponentiation)算法

模幂运算常常作为一些算法的中间求解步骤,算法的思路十分巧妙并且高效。模幂运算的描述如下: 已知b, e, m, 求c。形如: 其中,b<m (若b>m,可转换b为b%=m) 算法一:最显而易见的办法就是先求幂,再取模。例如 ,得到 c = 445。 。 注意到b=4为1位,e=13为2位,m=497为3位,c=445为3位...

2019-10-03 16:01:48 5123

转载 【原】布隆过滤器 (Bloom Filter) 详解

布隆过滤器 (Bloom Filter)是由Burton Howard Bloom于1970年提出,它是一种space efficient的概率型数据结构,用于判断一个元素是否在集合中。在垃圾邮件过滤的黑白名单方法、爬虫(Crawler)的网址判重模块中等等经常被用到。哈希表也能用于判断元素是否在集合中,但是布隆过滤器只需要哈希表的1/8或1/4的空间复杂度就能完成同样的问题。布隆过滤器...

2019-10-03 16:01:48 192

转载 【原】斐波那契质数(Fibonacci Prime)详解

Fibonacci数大家一定很熟悉了: Fibonacci质数的定义: 若某Fibonacci数与任何比它小的Fibonacci数互质,那么它就是Fibonacci质数。但是哪些的Fibonacci数才是Fibonacci质数呢?这里先给出结论: 1. F(3)和F(4)是Fibonacci质数;从F(5)开始,某...

2019-10-03 16:01:46 932

转载 【原】Python/C API使用方法简介 (在C/C++中嵌入Python)

由于Python功能强大并且各种应用程序库十分丰富,它常常可以以一种简单的方式来完成C/C++比较难实现的功能。Python/C API可以使得C/C++程序员在他们的程序中嵌入Python程序,使得开发的灵活性和简易性大大提高。在这里我以python 2.5版本举一个小例子来简单讲述一下Python/C API的用法,如果大家有兴趣可以参见官方文档来深入学习: http://docs...

2019-10-03 16:01:46 729

转载 【原】 POJ 3748 位操作 解题报告

http://poj.org/problem?id=3748 方法: 给定16进制32bit数,将其第x位置0,第y位开始的三位置成110 注意考虑待置位数中有a~f的情况 Description 假设你工作在一个32位的机器上,你需要将某一个外设寄存器的第X位设置成0(最低位为第0位,最高位为第31位),将第Y位开始的连续三位设置成110(从高位到低位的顺...

2019-10-03 16:01:44 96

转载 【原】费马小定理(Fermat little theorem)详解

Fermat定理: 如果P是任意一个不能整除整数a的素数,则 之后我会展示一些用到这一经典定理的算法。例如:, 等等证明:考虑a的倍数: (1) 证明这些整数中任意两个都不能模p同余。 反证法:假设 ,即 这不可能,因为p为素数且s-r<p,p不能整除a,所以p不可能是(s-r)a的因子。...

2019-10-03 16:01:44 2127

转载 【Joke】你可以去当程序员了

某日,老师在课堂上想考考学生们的智商,就问一个男孩: “树上有十只鸟,开枪打死一只,还剩几只?” 男孩反问:“是无声手*枪,还是其他没有声音的枪么?” “不是.” “枪声有多大?” “80~100分贝.” “那就是说会震的耳朵疼?” “是.” “在这个城市里打鸟犯不犯法?” ‘不犯.” “您确定那只鸟真的被打死啦?” ...

2019-10-03 16:01:43 80

转载 【原】 POJ 3630 Phone List Trie树 解题报告

http://poj.org/problem?id=3630 方法一: 利用Trie可以很好的解决此类前缀问题。它有一个很大的好处就是可以边插入边判断是否是前缀。 由于号码只由0~9组合,因此Trie的数组分支也为10个,即son[10](就像当英文字典时为son[26])。 一般而言Trie的节点都在需要时被new出来,但这样无疑会浪费太多的时间。因此我们可以...

2019-10-03 16:01:42 94

转载 【原】 POJ 3517 And Then There Was One Joseph问题 解题报告

http://poj.org/problem?id=3517 方法:具体参见3750 假设此环为以m+1起始,m-1终止的n-1环,且m+1--->1,求得此环最后出队的编号 再将此编号转换成原n环的编号 注意: 此题m为起始点,k为步长。且首先出队编号m,再以步长k循环 Description Let’s play a stone rem...

2019-10-03 16:01:41 80

转载 【原】 POJ 3750 小孩报数问题 Joseph相关问题详解 解题报告

http://poj.org/problem?id=3750 方法: 1012类似,但稍复杂 约瑟夫环问题:三个参数————人数n,开始人的号start,数到step出队一人 此问题一般有两种形式(这里都给了实现) 1、求出队顺序:利用数组或循环链表模拟出队过程,复杂度为O(step*n) 技巧:循环链表实现时将初始指针指向st...

2019-10-03 16:01:41 148

转载 【原】 POJ 3414 Pots 状态BFS 解题报告

http://poj.org/problem?id=3414 方法: 该题简化之后即为求从初始状态(0,0)到终止状态(i,C)或(C,j)的最短路径 对于每个状态(i,j)存在由6种操作得到的6个邻接状态,即为图中的邻接节点 将每种操作和得到的节点状态对应上以便打印路径,即pathArr[6]和adjVertex[6] Description Y...

2019-10-03 16:01:39 92

转载 【原】 POJ 3321 Apple Tree 深度优先生成树+树状数组 解题报告

http://poj.org/problem?id=3321 方法: 该题要经常查询数值总是变化的区间和。 如果采取常规做法求得积累数组c[N],那么当a[i]改变时,同时需要改变c[i...N],使得每次调整都会很慢,复杂度O(N)。求和复杂度O(1) 树状数组BIT形状很像二项树,适用于对经常改变的数组快速求得区间和。 采用树状数组tree[N]...

2019-10-03 16:01:39 119

转载 【原】 POJ 3126 Prime Path 筛素数+BFS单源无权最短路径 解题报告

http://poj.org/problem?id=3126 方法: 先筛出1000~9999的所有素数,对于其中每个素数求得他在图中的邻接点。其邻接点就是所有与其有一位不同的素数。 再用BFS搜索图找到指定源节点和目标节点之间的最短路径。若不联通则输出失败 Description The ministers of the cabinet were q...

2019-10-03 16:01:37 126

转载 【原】 POJ 3278 Catch That Cow BFS单源无权图最短距离 解题报告

http://poj.org/problem?id=3278 方法: 单源无权图最短距离,即BFS 该问题只需要求得某两点间的最短距离,所以不必求得所有节点的最短距离,一旦处理了目的地点,即可返回结果 Description Farmer John has been informed of the location of a fugitive cow a...

2019-10-03 16:01:37 83

转载 【原】 POJ 2499 Binary Tree 优化经典 解题报告

http://poj.org/problem?id=2499 root为(1,1),节点(a,b)的左孩子为(a+b,b),右孩子为(a,a+b)。求从root到给定节点(a,b)所走过的左右路径各为多少 方法:不断优化算法的经典例子,类似于求最大公约数TLE了几次才逐渐改进的算法:TLE-->0ms详见注释 Description BackgroundBinary tre...

2019-10-03 16:01:35 145

转载 【原】 POJ 3210 Coins 巧妙的简单题 解题报告

http://poj.org/problem?id=3210 方法: 当n个硬币初始同面,则只能偶次翻转才能保持同面,所以答案肯定是偶数。 n为偶数时,假设1个为正,n-1个为反,两中情况同为奇数,所以只能通过奇数次翻转才能保持同面, 这与上面的情况矛盾,所以n为偶数时无解 n为奇数时,正反的个数必然是一个偶数一个奇数。假设1个为正,n-1个为反...

2019-10-03 16:01:35 280

转载 【原】 POJ 3176 Cow Bowling 动态规划 解题报告

http://poj.org/problem?id=3176 方法: DP:将大问题转化为小问题解决。由递归写循环。 c[i][j]表示从a[1][1]开始到a[i][j]的最大和。而最终的结果为c[n][1...n]中的最大值 递归式为: c[1][1] = a[1][1] c[i][j] = max{ c[i-1][j-1], c[i-1][...

2019-10-03 16:01:34 81

转载 【原】 POJ 2388 Who's in the Middle 中位数 解题报告

http://poj.org/problem?id=2388 方法: 找中位数 一般来讲当数不是很多时可使用patition的方法,复杂度n 这里的方法适用于大量数据的情况,此时内存无法放下所有数。通过扫描大概lgn次数据即可找到中位数,复杂度nlgn 利用了中位数的性质:其左右两边的数据量相同 Description FJ is surve...

2019-10-03 16:01:33 159

转载 【原】 POJ 3067 Japan 2D树状数组+逆序数 解题报告

http://poj.org/problem?id=3067 方法: 求交点个数,我们可以将其转化为求逆序数问题。 两线段(x1,y1)、(x2,y2)相交当且仅当(x1-x2)*(y1-y2)<0 对所有输入线段按x排序,对同x的线段按y排序。利用排序后的输入计算逆序数。 数组元素a[i]记录y为i的线段的个数。依次读入排序后的线段,每取一个...

2019-10-03 16:01:32 135

转载 【原】 POJ 2262 Goldbach's Conjecture 筛素数 解题报告

http://poj.org/problem?id=2262 方法: 首先筛得1000000以下的素数表,复杂度N*lglgN 再用测试值减去素数表中从小到大的值,判断如果该值是素数,则不需要再接着找了,直接输出。复杂度N 注意点: 1、由于N很大,所以筛素数在计算i*i时可能会超过int的范围,所以需要采用__int64 2、需要符合要...

2019-10-03 16:01:31 122

转载 【原】 POJ 2159 Ancient Cipher 题意万岁 解题报告

http://poj.org/problem?id=2159 题意万岁:判断两数组a、b中的所有数是否一样(一个数组是另一个数组的排列) 两种方法: 1、可以先排序再依次判断两数组元素,复杂度nlgn+n 2、由于此题中每个字符串的长度最大为100,则数组中的每个元素都不会超过100,那么可以利用一个附加数组c[101], ...

2019-10-03 16:01:30 89

转载 【原】 POJ 2739 Sum of Consecutive Prime Numbers 筛素数+积累数组 解题报告

http://poj.org/problem?id=2739 方法: 埃氏筛法得到N以下的所有素数,复杂度n*lglgn 利用积累数组计算数组中连续元素的和 Description Some positive integers can be represented by a sum of one or more consecutive prime num...

2019-10-03 16:01:30 96

转载 【原】 POJ 2104 K-th Number 线段树 划分树 合并树 解题报告

http://poj.org/problem?id=2104 方法: 1、划分树,是平衡树:数组排序nlgn,建树nlgn,m次查询mlgn,总复杂度为O(nlgn+mlgn) 划分树就是利用类似线段树的树型结构记录划分元素(最终排序)的过程。 划分树是一种树形结构的二维数组,由四个数组构成,具体见程序 建树: ...

2019-10-03 16:01:28 88

转载 【原】 POJ 2593 Max Sequence 动态规划 解题报告

http://poj.org/problem?id=2593 Maximum Sequence 求数组两段不重叠的连续子数组的最大和 详见2479 Description Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N). You should outp...

2019-10-03 16:01:28 130

转载 【原】 POJ 1611 The Suspects 并查集 解题报告

http://poj.org/problem?id=1611 方法: 由于需要求得0元素所在划分的元素数,所以采用union by size的方法 将所有等价元素union到一起,然后再输出0元素所在划分的元素数 注意: union时需要事先判定两元素是否已经在同一个划分中,不然会出错 Description Severe acute ...

2019-10-03 16:01:26 84

转载 【原】 POJ 2479 Maximum sum 动态规划 解题报告

http://poj.org/problem?id=2479 方法:两次dp+一次扫描,复杂度3*n 基于求最大连续子数组的线性dp算法 对数组从前往后各做一次O(n)的dp,求得maxsofar[0][0...n-1],再数组从后往前各做一次O(n)的dp,求得maxsofar[1][0...n-1], 再扫描一遍maxsofar求得maxsofar[0...

2019-10-03 16:01:26 119

转载 【原】 POJ 2352 Stars 树状数组 解题报告

http://poj.org/problem?id=2352 方法:复杂度N*O(log Max) 树状数组Binary Indexed Tree,具体见3321 求得常变二维平面上(0,0)到(x,y)所形成的矩形中点的个数 由于内存限制,所以只能考虑用一维的BIT来解决此问题。因此需要将输入数据先按y排序,再对 同y的x排序,对这样排序好的数据依次进行处理。...

2019-10-03 16:01:25 95

转载 【原】 POJ 2299 Ultra-QuickSort 逆序数 解题报告

http://poj.org/problem?id=2299 方法: 利用merge sort求逆序数,复杂度nlgn 如果比较每一对儿数(或使用bubble sort),复杂度为n^2,太慢 对于一对儿逆序对儿,有三种情况:两数都在数组左半边,两数都在数组右半边,两数分别在左右两个半边。 由于Merge时两个半边都为sorted,所以只会出现第三种情况。...

2019-10-03 16:01:23 109

转载 【原】 POJ 2159 Tree Recovery 解题报告

http://poj.org/problem?id=2255 方法: 根据preorder和inorder构造postorder 例如preorder:DBACEGF inorder:ABCDEFG D / \ / \ B...

2019-10-03 16:01:21 83

转载 【原】 POJ 2155 Matrix 2D树状数组 解题报告

http://poj.org/problem?id=2155 题目要求修改一个区域,然后求一个元素的值。貌似和树状数组的功能完全相反。但这题,应该 说这个思路的精妙之处就体现在这里。我认为关键是要理解“树状”的概念。画一个一维的树状数 组图形,就会发现所有的元素都会链接到2,4,8,16,32……这条“主干”上来。那么,修改了“主干”, 其实就相当于修改了整...

2019-10-03 16:01:19 112

转载 【原】 POJ 1606 Jugs 状态BFS 解题报告

http://poj.org/problem?id=1606 方法: 该题简化之后即为求从初始状态(0,0)到终止状态(i,C)的最短路径 对于每个状态(i,j)存在由6种操作得到的6个邻接状态,即为图中的邻接节点 将每种操作和得到的节点状态对应上以便打印路径,即pathArr[6]和adjVertex[6] 注意: 此题的input无...

2019-10-03 16:01:18 138

转载 【原】 POJ 1503 Integer Inquiry 大整数加法 解题报告

http://poj.org/problem?id=1503 方法: 很简单,模拟手动加法过程, 结果中的前置0要消去 Description One of the first users of BIT's new supercomputer was Chip Diller. He extended his exploration of powers of 3...

2019-10-03 16:01:17 80

转载 【原】 POJ 1426 Find The Multiple BFS搜索 解题报告

http://poj.org/problem?id=1426 方法: 找到n的倍数m,m中只能有0或1 0,1可构造出二叉树进行BFS搜索 该题的重点就在于如何构造出BFS进行搜索。 所有0,1组成的数可以构造出一颗二叉树从而进行BFS。每层的数字长度相同,每个节点的左右孩子为其末尾分别添加0,1 BFS搜索一颗二叉树。二叉树的节点按层序遍历依次为(1),(...

2019-10-03 16:01:15 84

转载 【原】 POJ 1308 Is It A Tree? 并查集树结构 解题报告

http://poj.org/problem?id=1308 方法: 给定一些节点和对应边,判断他们所形成的图是否是树 技巧:类似于“并查集”的表示方法来表示树的结构 tree[1...49]初始为0。tree[i]表示i的父节点。 isNode[1...49]记录哪些编号的节点出现在图中 依次读入父节点p、子节点c和对应边,将isNode[...

2019-10-03 16:01:14 99

转载 【原】 POJ 1094 Sorting It All Out 拓扑排序 解题报告

http://poj.org/problem?id=1094 方法: 每加入一条边就进行一次拓扑排序,从而找到符合条件的最少边数 拓扑排序的基本思想就是依次找到图中入度为0的节点,将该节点和其对应的边删除,这样就使得它的邻接节点的入度-1。反复循环这样做直到所有节点都从图中删除(都被编上拓扑编号),或者因为有环所以还剩下某些节点未被删除 Descrip...

2019-10-03 16:01:13 125

转载 【原】 POJ 1159 Palindrome 回文 动态规划 解题报告

http://poj.org/problem?id=1159 方法1: c[i][j]表示:s[i...j]子字符串中最少需要插入多少个字符形成回文 c[1][n]为最终结果 初始值: c[i][i] = 0 c[i][j] = 0,if i>j 递归式: c[i][j] = c[i+1][j-1],if s[i]==s[j]...

2019-10-03 16:01:12 226

转载 【原】 POJ 1083 Moving Tables 解题报告

http://poj.org/problem?id=1083 方法: 将所有房间号分为200段,即数组path[201],将每次需要移动的起始和目的地之间的所有path[i]都加1 找出path[1...N-1]中最大的一个,即最大的某路段重叠数,就是需要的趟数,再乘以10即得结果 注意点: 1.由于奇偶数分列两边,所以需要将奇偶数房间号做一...

2019-10-03 16:01:11 88

转载 【原】 POJ 1157 LITTLE SHOP OF FLOWERS 动态规划 解题报告

http://poj.org/problem?id=1157 方法: c[i][j]:一共i束花,j个花瓶时的最大值。 初始化: c[1][1] = a[1][1] c[i][i] = c[i-1][i-1]+a[i][i] 递归式: c[i][j] = max{ c[i][j-1], c[i-1][j-1]+a[i][j] } Descrip...

2019-10-03 16:01:10 76

转载 【原】 POJ 1007 DNA Sorting 逆序数 解题报告

http://poj.org/problem?id=1007 求逆序数的方法: 1、此题每个string只有4种字母,所以可以用类似counting sort的方法来以逆序扫描字符串,并以a[1...3]记录相应字符串组的个数,计算每位数与其后面几位的逆序数。复杂度n。但输入若没有限制就不能靠a[1...3]这样做了,那样的话可能每扫描一个字符++的数组位很多,需要...

2019-10-03 16:01:08 129

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除