2011年9月13日

转 海量数据处理(2)

摘要: 十七道海量数据处理面试题与Bit-map详解出处:http://blog.csdn.net/v_july_v前言 本博客内曾经整理过有关海量数据处理的10道面试题(十道海量数据处理面试题与十个方法大总结),此次除了重复了之前的10道面试题之后,重新多整理了7道。仅作各位参考,不作它用。 同时,程序员编程艺术系列将重新开始创作,第十一章以后的部分题目来源将取自下文中的17道海量数据处理的面试题。因为,我们觉得,下文的每一道面试题都值得重新思考,重新深究与学习。再者,编程艺术系列的前十章也是这么来的。若您有任何问题或建议,欢迎不吝指正。谢谢。第一部分、十五道海量数据处理面试题1. 给定a、b两个文 阅读全文

posted @ 2011-09-13 21:21 buptLizer 阅读(215) 评论(0) 推荐(0) 编辑

转 海量数据处理(1)

摘要: 海量数据处理:十道面试题与十个海量数据处理方法总结出处:http://blog.csdn.net/v_JULY_v。------------------------------------------第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。 阅读全文

posted @ 2011-09-13 21:20 buptLizer 阅读(342) 评论(0) 推荐(0) 编辑

大数据处理小结

摘要: 1.从海量数据中找出中位数题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可。方案1:网上的解法都是千篇一律,方法都是将整数分段,映射都n个区间段,然后对每个区间段计数,当curSum>5G的时候停止计数,并统计中位数所在区间的每个取值的个数进行第二次统计,这样就得到了第5G大的数据了,这个的确是个好方法吧,算法的时间复杂度是线性的,因为是遍历了两次数据。方案2:采用编程之美上的一个思路,我们无法将5G的数据装入内存,那么就转入相对小的数据。比如取k为2G,我们利用最大堆,找出第2G大的数据,然后再遍历一次,找到第4G大的数据,然后建立1G大 阅读全文

posted @ 2011-09-13 21:18 buptLizer 阅读(497) 评论(0) 推荐(0) 编辑

2011年9月11日

转载一篇好文章:《海量数据处理常用思路和方法》

摘要: 最近有点忙,稍微空闲下来,发篇总结贴。 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。 1.Bloom filter 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数。将hash函数对 阅读全文

posted @ 2011-09-11 21:31 buptLizer 阅读(242) 评论(0) 推荐(0) 编辑

优先队列使用

摘要: 这个是转得网上的,由于不经常使用,偶尔用的时候还经常出错,所以记下来了,经常使用的已经用红色颜色标出来了 :在优先队列中,优先级高的元素先出队列。标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。优先队列的第一种用法,也是最常用的用法:priority_queue<int>qi;通过<操作符可知在整数中元素大的优先级高。故示例1中输出结果为:9 6 5 3 2第二种方法:在示例1中,如果我们要把元素从小到大输出怎么办呢?这时我们可以传入一个比较函数,使用functional.h函数对象作为比较函数。priority_queue<int,vector< 阅读全文

posted @ 2011-09-11 17:48 buptLizer 阅读(5594) 评论(1) 推荐(0) 编辑

差分约束系统

摘要: 小结:差分约束就是用最短(最长路径)来解决满足一系列约束条件的问题的最优解,首先约束条件必须满足一定的限制,即每个约束条件系数只能为1,-1这样的不等式。差分约束系统的解题过程大致为:a 建立约束图增加一个原点,根据约束条件构造约束图。b 利用dijkstra或者bellman_ford求出最短(长)路径,如果有负边,只能用后者。如果题目要求出最小值,我们将所有的不等式转化成>=,构造出约束图,开始的时候每个dist[i]赋值为-INF,然后求最长路径,这个是原点距离固定的情况,比如题目poj1201,mina是最小坐标,minb是最大坐标,题目让求的是dist[maxb]-dist[m 阅读全文

posted @ 2011-09-11 17:18 buptLizer 阅读(211) 评论(0) 推荐(0) 编辑

2011年9月10日

poj1201 查分约束系统

摘要: oj1201 查分约束系统和1716是同一类题目,求出包含区间中至少c个数的最小集合,建立约束图,就最长路径,把所有的符号转化为>=,利用spfa求解,这个题不能用bellman_ford,会超时。#include <iostream>#include <stdio.h>#include <queue>using namespace std;const int N=50002;const int INF=100000;struct node{ int to,w,next;};node edge[N*3];int n,num,maxb,dist[N],a 阅读全文

posted @ 2011-09-10 22:41 buptLizer 阅读(454) 评论(0) 推荐(0) 编辑

poj 3159 Candies

摘要: 这题目做的一个纠结啊。N个人份糖果,其中含有约束条件,即对于a,b,c有 b-a<=c,看到这个不等式马上感觉到要用最短路解决了,问Sn-S1的最大值是多少,我们令S1=0即求Sn的最大值,查分约束题目,求最短路,初始原点1到2,3,..,n的距离为INF,每次松弛找到第一组满足约束条件的解,这个解就是最大值,但是这个题目有问题啊,用最常用的bellman_ford无法通过啊,n,m值太大了,只能用spfa或者其他的优化方法,这个题用spfa+stack,用queue也会超时的,我猜想可能stack的访问效率较后者快吧,我最开始用的dijkstra+优先队列,不是超时就是WA,WA的时候 阅读全文

posted @ 2011-09-10 22:40 buptLizer 阅读(319) 评论(0) 推荐(0) 编辑

2011年9月9日

poj1738 an old stone game

摘要: 石子合并,经典dp,我们定义dp[i][j]表示从i开始的j个石子合并的最小(最大)代价,dp方程为:dp[i][j]=min{dp[i][k]+dp[i+k][j-k]+sum[i][j]},sum[i][j]表示从i开始的j个数的和。这个题目由于规模太大了,无法开一个5000*5000的数组,需要用到其他方法,discuss里面说用Garsia Wachs算法,没听说过,有待研究。下面的是我处理小规模的dp代码:#include #include using namespace std;const int INF=1000000001;const int N = 500;int m[N], 阅读全文

posted @ 2011-09-09 12:00 buptLizer 阅读(627) 评论(0) 推荐(0) 编辑

2011年9月8日

poj3034 Whac-a-Mole (dp)

摘要: 打地鼠游戏,dp好题,麻烦的不是写出dp方程,而是求出从(x1,y1)到(x2,y2)这条直线上经过那些整数坐标,利用gcd求出来,并且需要知道的一点是中间的某个点可能跑出到矩形外面,处理跑出矩形外地点只需要扩大范围就行了,行列各增加10,让冒出地鼠的坐标响应的+5即可,dp[t][x][y]表示时刻t坐标xy出得最大个数,那么此状态可能是由上一个状态dp[t-1[i][j]转移过来的,其中(i,j)和(x,y)距离<=d,我们去所有可能的ij中的最优值,代码如下:#include <iostream>#include <cmath>#include <st 阅读全文

posted @ 2011-09-08 15:01 buptLizer 阅读(404) 评论(0) 推荐(0) 编辑

导航