摘要:
使用范围:实现数据字典,进行数据的判重,集合求交集基本原理:基于bitmap,bitmap中用一个bit位来表示一个数字,而Bloomfilter是用多个bit位是否同时存在来判定元素是否存在。它的实现用到了位数组和k个hash函数,存入一个元素时,用k个hash函数分别求值,并将相应的bit位置1,当查找的时候,根据k个hash值,到k个位置查找,如果k个位置都存在,表明该元素存在,如果有一个bit位不存在表明元素不存在。很明显这个过程并不保证查找结果是百分百正确。同时它也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动其它的关键字,一个简单的改进是使用countingbloom 阅读全文
摘要:
有这样一块土地,可以被划分为M*N块正方形小块,每块面积是一平方英寸,第i行第j列的小块可以表示成P(i,j),这块土地高低不平,每一小块地P(i,j)都有自己的高度H(i,j),一场倾盆大雨后,由于这块地地势高低不同,许多低洼的地方都积存了不少降水,如果已经知道了这块土地的详细信息,求出它最多能积存多少立方英寸的降水分析:先分析一些比较容易求出的格子,例如边界,边界上积水上一定为0,从边界上最低的格子x开始,它就像是一个有洞的水桶,桶的容量取决于最低的那个洞,假设这个格子的高度为h,那么它相邻格子y的水位不会超过h,如果y的高度小于h,那么y的水位将是h,可以继续对y周围的格子进行灌水,直到 阅读全文
摘要:
poj 1806题意:已知有n种货币,编号为1~n,以及它们之间的瑞换比例。现在Nick有第fir种货币meney元,问你Nick能不能通过这些货币的瑞换规则,使自己拿到更多的fir货币。思路:bellman_ford。判断有没有正环,有的话Nick就可以无限次使用这个正环使自己的货币增值。 1 /** 2 * @file code.c 3 * @author <kong@KONG-PC> 4 * @date Sun Nov 04 21:54:40 2012 5 * 6 * @brief 求汇率转换问题 7 * 采用Bellman_ford算法求是否存在... 阅读全文
摘要:
求RMQ最简单的方法是遍历区间,时间复杂度O(n), 但是当查询次数很多的时候,时间效率并不高。可以用线段树把算法优化到O(logn) (在线段树中保存线段的最值),不过sparse_table算法是较好的,用O(nlogn)的时间进行预处理,然后用O(1)时间进行查询。预处理:预处理使用DP的思想,f(i, j)表示[i, i+2^j - 1]区间中的最小值,我们可以开辟一个数组专门来保存f(i, j)的值。例如,f(0, 0)表示[0,0]之间的最小值,就是num[0], f(0, 2)表示[0, 3]之间的最小值, f(2, 4)表示[2, 17]之间的最小值注意, 因为f(i, j)可 阅读全文
摘要:
树的公共祖先问题可以分为在线法和离线法,在线法就是来一个请求就处理一次,离线法就是收集所有请求然后统一给出回复。1. 在线法。LCA可以转换为RMQ1) 对树进行dfs,访问每个节点时要记录节点的层次,同时要记录每个节点第一次出现的位置,对于节点个数为n的树,最后会形成一个2n-1长度的序列2) 如果要查询节点a和节点b的公共祖先,只需找出a和b节点在在序列中第一次出现的位置,形成了一个从a到b的子序列, 对应序列中层数最小的节点即为公共祖先。3) 因此把LCA转化为RMQ问题。对于给定序列求出指定区间中的最小值 1 #include <stdio.h> 2 #include &l 阅读全文