12 2011 档案

海量数据处理面试题 续一
摘要:1. 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。解法:由于给的内存有限,我们无法将单个文件不加处理直接存放到内存中,所以第一步要预处理数据。在题目中的数据是64字节的URL,也就是有64个char的字符串,考虑将每一个字符串进行模式提取,或者干脆压缩字符串,得到唯一标识。但这样的内存开销还是满足不了题目的要求。或者使用Hash函数针对64个char的字符串进行处理,得到唯一hash值,然后放入位图中处理。这个时候,由于内存是4G,可以创建的位图长度为34359738368大于100E,表明这种方法是可行的。针对两个文件建立 阅读全文

posted @ 2011-12-10 10:18 yukl1n 阅读(1945) 评论(3) 推荐(3)

海量数据处理面试题
摘要:有2.5E个整数数据,找出其中重复的,给定的内存是600M。由于题目描述的不够清晰,现在假定整数指的是int32,其中有正有负有零,范围就是int32的范围。可以用编程珠玑里的位图来处理,由于内存只有600M,刚好可以将数据分作正,负和0来处理,这个范围是两个2^31,那就是一次处理位图占用512M的内存。之前我用byte数组表示位图,有很多繁琐的步骤和数据结构,在分析博客园其他大牛的文章和手头资料之后决定使用BitArray来处理。总共需要两个位图,一个标志出现过的整数,一个标志这个整数是重复出现的。程序分作数据生成和处理两个部分。处理数据的时候程序大概占用了500多M。时间用的还蛮多的,占 阅读全文

posted @ 2011-12-09 22:30 yukl1n 阅读(2650) 评论(0) 推荐(2)

Programming Pearls Essay 01 续一
摘要:04 产生[0,n-1]并且没有重复的k个随机整数。方法1:在使用Random类时,每次选择不同的随机因子并在Next中划定范围。这种方法简单容易实现,看上去似乎是可以满足需求的,但我不知道怎么去证明。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace _01._04{ class Program { static void Main(string[] args) { int n = 1000000; ... 阅读全文

posted @ 2011-12-06 21:17 yukl1n 阅读(272) 评论(0) 推荐(0)

Programming Pearls Essay 01
摘要:01 如果不缺内存,如何使用一个具有库的语言来实现一种排序算法以表示和排序集合?1 Array.Sort(array);02 如何使用位逻辑运算(例如与,或,移位)来实现位向量。重要的概念:用一个n位长的字符串来表示一个所有元素都小于n的简单非负整数集合。相对一般的数据而言,其特点是:a,数据限制在一个范围里b,数据没有重复c,数据没有其他的关联项int n = 100;byte[] array = new byte[n];//可以储存[0,n*8)的数//用int m举例,假设m在范围内int m,index,step;//index确定byte数组的索引位置,step确定byte[inde 阅读全文

posted @ 2011-12-06 14:30 yukl1n 阅读(340) 评论(0) 推荐(2)

导航