ysu_dong

导航

 

2012年11月7日

摘要: 1. Bit-map思想给你一堆西安市的电话号码列表,数量大概在千万级,要求从中找出所有重复的电话号码,需要时间复杂度尽可能小。目前西安市的电话号码大概都以8开头,为8位,也就是类似于82678578这样子二重暴力搜索时间复杂度太高,这里我们不予考虑。容易想到的办法就是建立一个标志数组,int boolean都行,用相应的位置值来代替这个号码是否出现,根据数组的可直接存取特性,来提高效率。但是你是否想过或测试过int[] a = new int[100000000];boolean[] a = new boolean[100000000]; //需要大概100M*4的内存,如果这样类似的语句是 阅读全文
posted @ 2012-11-07 23:16 ysu_dx 阅读(588) 评论(0) 推荐(0)
 
摘要: 给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。这题当然可以用hash来,但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词,我要询问它的前缀是否出现过。这样hash就不好搞了,而用trie还是很简单。现在回到例子中,如果我们用最傻的方法,对于每一个单词,我们都要去查找它前面的单词中是否有它。那么这个算法的复杂度就是O(n^2)。显然对于100000的范围难以接受。现在我们换个思路想。假设我要查询的单词是abcd,那么在他前面的单词中,以b,c,d,f之类开头的我显然不必考虑。而只要找以a开头的中是否存在a 阅读全文
posted @ 2012-11-07 00:56 ysu_dx 阅读(294) 评论(0) 推荐(0)
 
摘要: bitmap是一个十分有用的结构。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码扩展:bloom filter可以看做是对bit-map的扩展问题实例:1)已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。2)2.5亿个整数中找出. 阅读全文
posted @ 2012-11-07 00:45 ysu_dx 阅读(5012) 评论(0) 推荐(0)
 
摘要: 腾讯算法 题:服务器内存1G,有一个2G的文件,里面每行存着一个QQ号(5-10位数),怎么最快找出出现过最多次的QQ号。2G内存,两个4G的文件,每个文件格式为每行是一个url地址,找出这个两个文件中重复的url地址(典型的url去重问题)淘宝面试题:从 [1,1000] 这个集合中任意选取100个不重复的整数,将这100个数压缩到 N 个 bit 位中存储,问:1、N 的最小值是多少?2、给出这个最小值对应的压缩存储算法。有一个给定的字符串集{“add”, “delete”, “update”, “start”, “stop”, “remove”, “push”, “pop”, “get” 阅读全文
posted @ 2012-11-07 00:17 ysu_dx 阅读(297) 评论(0) 推荐(0)