方案1:这题是考虑时间效率。用trie树统计每个词出现的次数,时间复杂度是O(n*le)(le表示单词的平准长度)。然后是找出出现最频繁的前10个词,可以用堆来实现,前面的题中已经讲到了,时间复杂度是O(n*lg10)。所以总的时间复杂度,是O(n*le)与O(n*lg10)中较大的哪一个。
方案1:
8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。 (可以理解为从0-99 999 999的数字,每个数字对应一个Bit位,所以只需要99M个Bit==1.2MBytes,这样,就用了小小的1.2M左右的内存表示了所有的8位数的电话)
@July:我想,这位读者可能没有明确提议。本题目中的TOP10是指最大的10个数,而不是指出现频率最多的10个数。但如果说,现在有另外一提,要你求频率最多的 10个,相当于求访问次数最多的10个IP地址那道题,即是本文中上面的第4题。特此说明。
最大子矩阵问题:给定一个矩阵(二维数组),其中数据有大有小,请找一个子矩阵,使得子矩阵的和最大,并输出这个和。
this.defaultLookAndFeel1.LookAndFeel.SkinName = cmbAppStyle.EditValue.ToString();
PS:
1、注意,我这儿用的是DevExpress 8.1,在老版本中可能不支持。如果是7.x的版本,请见DevExpress demo中的源代码。
2、什么是启动项不用解释了吧~~
3、当我们安装完DevExpress控件包之后,在添加新项窗口中我们会看到多出的几项:DevExpress Form v8.1、DevExpress RibbomForm v8.1和DevExpressUsercontrol v8.1,其中“v8.1”是版本号。
4、DevExpress中的默认皮肤名的取得:DevExpress.Skins.SkinManager.DefaultSkinName

关于此问题的详细解答,请参考此文的第3.1节:。
3. 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。
(2) 给出主要的处理流程,算法,以及算法的复杂度;
第四步:在软件的入口Program类的main函数的第一行代码前加上如下代码:
4. 海量日志数据,提取出某日访问奇迹sf次数最多的那个IP。
然后再处理第二个元素7,将第八位置为1,,接着再处理第三个元素,一直到最后处理完所有的元素,将相应的位置为1,这时候的内存的Bit位的状态如下:
第一部分、十五道海量数据处理面试题
9. 1000万字符串,其中有些是重复的,需要把重复的全部去掉,保留没有重复的字符串。请怎么设计和实现?
方案1:采用并查集。首先所有的字符串都在单独的并查集中,www.jjj.com。然后依扫描每个集合,顺序合并将两个相邻元素合并。例如,对于
,首先查看aaa和bbb是否在同一个并查集中,如果不在,那么把它们所在的并查集合并,然后再看bbb和ccc是否在同一个并查集中,如果不在,那么也把它们所在的并查集合并。接下来再扫描其他的集合,当所有的集合都扫描完了,并查集代表的集合便是所求。复杂度应该是O(NlgN)的。改进的话,首先可以记录每个节点的根结点,改进查询。合并的时候,可以把大的和小的进行合,这样也减少复杂度。
方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。然后找出上一步求出的数据中重复次数最多的一个就是所求(具体参考前面的题)。
第三步:添加DevExpress 主题皮肤的引用,你看你的引用中是否有DevExpress.BonusSkins.v8.1 DevExpress.officeSkins.v8.1的引用,如果没有,请添加
给定一个字符串的集合,格式如:
。要求将其中交集不为空的集合合并,要求合并完成的集合之间无交集,例如上例应输出
。
方案1:这题用trie树比较合适,hash_map也应该能行。

与方案1类似,但在做完hash,分成多个文件后,可以交给多个文件来处理,采用分布式的架构来处理(比如MapReduce),最后再进行合并。
一般query的总量是有限的,只是重复的次数比较多而已,可能对于所有的query,一次性就可以加入到内存了。这样,我们就可以采用trie树/hash_map等直接来统计每个query出现的次数,然后按出现次数做快速/堆/归并排序就可以了
可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下
十七道海量数据处理面试题与Bit-map详解
(3) 请描述可能的改进。
7. 怎么在海量数据中找出重复次数最多的一个?
foreach (DevExpress.Skins.SkinContainer skin in DevExpress.Skins.SkinManager.Default.Skins)
{ cmbAppStyle.Properties.Items.Add(skin.SkinName);
}
第七步:设置其他皮肤,怎样设置皮肤呢,只需设置每个窗口的DefaultLookAndFeel即可,在ComboBoxEdit的selectChang事件中,代码如下:
方案1:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32*2bit=1GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。
2)2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。
方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
读者反馈@QinLeopard:
(更多可以参考:,以及)
17. 最大子序列与最大子矩阵问题
方案2:也可采用上题类似的方法,进行划分小文件的方法。然后在小文件中找出不重复的整数,并排序。然后再进行归并,注意去除重复的元素。
俗话说得好:”好记心不如烂笔杆儿“,这不,前些时间突然心血来潮,想用C#来写写软件,其实我的计算机中老早就装上了DevExpress的开发环境了,可是一直跟自己找借口,没有动手写过一个像样的软件,我写项目喜欢把界面做得漂亮点儿,当然并没有忽略功能,如果你还在找如何更换DevExpress中form的皮肤或者是如何使用用DevExpress Form窗体皮肤的话,本文是一篇有效解决你这个问题的!下面实录我在DevExpress 8 中更改form皮肤的过程: