
算法
文章平均质量分 70
houzengjiang
这个作者很懒,什么都没留下…
展开
-
海量数据面试题整理
1、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。转载 2012-06-20 09:09:55 · 595 阅读 · 0 评论 -
Bloom Filter 算法的实现
bloom.h>>=#ifndef __BLOOM_H__#define __BLOOM_H__#includetypedef unsigned int (*hashfunc_t)(const char *);typedef struct { size_t asize; unsigned char *a; size_t nfuncs; hashfunc_t *funcs;}转载 2014-12-17 16:54:55 · 859 阅读 · 0 评论 -
Merkel Tree在BitTorren中的应用
大家都知道,目前BT应用的发展具有一个非常显著的趋势,那就是用来交换电影、游戏、ISO等大尺寸的数据文件。然而我们也能够观察到另一个事实,那就是:下载文件所对应的索引文件(.torrent)也越来越大,越来越难以下载;这是因为在索引文件中保存了被下载文件中所有数据块的20字节SHA1校验值,而文件越大,数据块越多,则.torrent文件越长(块数=文件长度/数据块长,Bit Torrent标准协议转载 2013-03-04 20:41:17 · 2188 阅读 · 0 评论 -
老鼠试毒瓶问题
大家应该都听说过这个老题目:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?这个问题的答案也堪称经典:把瓶子从 0 到 999 依次编号,然后全部转换为 10 位二进制数。让第一只老鼠喝掉1到1000所有二进制数右起第一位是 1 的瓶子,让第二只老鼠喝转载 2012-09-04 00:10:51 · 1917 阅读 · 0 评论 -
找数
题目:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。 能否只用一个额外数组和少量其它空间实现。分析:最原始的方法是检查每一个数 array[i] ,看是否左边的数都小于等于它,右边的数都大于等于它。这样做的话,要找出所有这样的数,时间复杂度为O(N^2)。其实可以有更简单的方法,我们使用额外转载 2012-09-04 00:05:17 · 643 阅读 · 0 评论 -
对称子字符串的最大长度
题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。方法:1. 值得注意的是,回文的2种形式,aba, abba;1.对于aba的形式, 从字符串中的每一个位置i,像两边扩展一位如果a[i-1]=a[i+1],那么继续扩展,直到a[i-k]!=a[i+k]或者i-k,i+k转载 2012-09-04 00:02:57 · 664 阅读 · 0 评论 -
丑数Ugly Number查找算法
我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数下面是一道在网络上广为流传的面试题,据说google曾经采用过这道题。所谓一个数m是另一个数n的因子,是指n能被m整除,也就是n % m == 0。根据丑数的定义,丑数只能被2、3和5整除。也就是说如转载 2012-09-03 23:50:10 · 9143 阅读 · 2 评论 -
动态规划——数组中最长递减子序列
求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}分析:典型的动态规划题目,对每一个数计算由它开始的最大递减子序列的个数,并存放到一张映射表中。例如对数组a[n]有……然后利用求得的映射表及最大子序列个数获取原数组中的元素。对于{9,4,3,2,5,4,3,2}我们求得最大子序列个数为nMaxLe转载 2012-09-02 23:22:57 · 1495 阅读 · 0 评论 -
字符串的排列组合问题
问题1 :输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 思路:这是个递归求解的问题。递归算法有四个特性:(1)必须有可达到的终止条件,否则程序将陷入死循环;(2)子问题在规模上比原问题小;(3)子问题可通过再次递归调用求解;(4)子问题的解应能组合成整个问题转载 2012-09-02 23:35:09 · 504 阅读 · 0 评论 -
一个整型数组里除了两个数字之外,其他的数字都出现了两次
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n) ,空间复杂度是O(1) 。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其转载 2012-09-02 23:25:11 · 1057 阅读 · 0 评论 -
在从1到n的正数中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。分析:这是一道广为流传的google面试题。简单的方法就是按照给位进行分析在个位出现1的个数=n/10+(个位=0,0;个位>1,1;个位=1,低0位+1);十位位出现1的个数=n/100*10+(十位=0,0;十位转载 2012-08-31 12:12:41 · 1880 阅读 · 0 评论 -
常用hash函数
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生 影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。常用字符串哈希函数有 BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。对于以上几种哈 希函数,我转载 2014-12-17 16:30:21 · 2998 阅读 · 0 评论