
算法
fengbonianshao
这个作者很懒,什么都没留下…
展开
-
给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
思路:可以估计每个文件的大小为5G*64=300G,远大于4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 遍历文件a,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为a0,a1,...a999)当中。这样每个小文件的大小约为300M。遍历文件b,采取和a相同的方法将url分别存储到1000个小文件(b0,b1....b999)转载 2014-04-10 22:21:03 · 8061 阅读 · 1 评论 -
百度suggestion功能的Trie实现(附代码)
相信大家都使用过百度搜索框的suggestion功能,百度搜索框中的suggestion提示功能如何实现?请给出实现思路和主要的数据结构、算法。有什么优化思路可以使得时间和空间效率最高? 这个题的基础实现方法是使用Trie树, 原理部分摘用别的. (代码部分我增加了findTips功能, 这里采用方法1,空间要求最大 26^n,,若是汉字,那不能使用了。)转载 2014-04-10 20:38:40 · 990 阅读 · 0 评论 -
用两个栈实现一个队列
两年前从网上看到一道面试题:用两个栈(Stack)实现一个队列(Queue)。觉得不错,就经常拿来面试,几年下来,做此题的应该有几十人了。通过对面试者的表现和反应,有一些统计和感受,在此做个小结。 用C++描述,题目大致是这样的: 已知下面Stack类及其3个方法Push、Pop和 Count,请用2个Stack实现Queue类的入队(Enqueue)出队(Dequeue)方法。转载 2014-04-10 22:45:31 · 884 阅读 · 0 评论 -
经典算法-字符串的颠倒
最优状态下字符串的颠倒(字符串的反转) 2005-11-18 10:18:35 FROM:http://www.exuesoft.com/article/View.aspx?NewsID=116 void Reverse(char s[]) { for(int i =0,j=strlen(s)-1;i { char c=s[i]; s[i]=s[j]; s[j]=c;转载 2014-04-10 22:25:30 · 818 阅读 · 0 评论 -
二分搜索及其扩展(循环递增数组的搜索)
二分搜索需要注意开闭区间的问题,限制条件和边界要保持配对:low 二分搜索的模板如下: [cpp] view plaincopy // 二分搜索 int BinarySearch(int *num, int key, int low, int high) { int mid ; while(low //切记:转载 2014-04-11 09:52:41 · 921 阅读 · 0 评论