查找算法

十道海量数据处理面试题与十个方法大总结

陌路散爱 提交于 2019-12-08 18:50:30
第一部分、十道海量数据处理面试题 1 、海量日志数据,提取出某日访问百度次数最多的那个 IP 。 首先是这一天,并且是访问百度的日志中的 IP 取出来,逐个写入到一个大文件中。注意到 IP 是 32 位的,最多有个 2^32 个 IP 。同样可以采用映射的方法,比如模 1000 ,把整个大文件映射为 1000 个小文件,再找出每个小文中出现频率最大的 IP (可以采用 hash_map 进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这 1000 个最大的 IP 中,找出那个频率最大的 IP ,即为所求。 或者如下阐述(雪域之鹰): 算法思想:分而治之 +Hash 1.IP 地址最多有 2^32=4G 种取值情况,所以不能完全加载到内存中处理; 2. 可以考虑采用 “ 分而治之 ” 的思想,按照 IP 地址的 Hash(IP)%1024 值,把海量 IP 日志分别存储到 1024 个小文件中。这样,每个小文件最多包含 4MB 个 IP 地址; 3. 对于每一个小文件,可以构建一个 IP 为 key ,出现次数为 value 的 Hash map ,同时记录当前出现次数最多的那个 IP 地址; 4. 可以得到 1024 个小文件中的出现次数最多的 IP ,再依据常规的排序算法得到总体上出现次数最多的 IP ; 2

经典算法题:大数据处理常见算法题

别说谁变了你拦得住时间么 提交于 2019-12-08 18:41:53
第一部分、十道海量数据处理 1、海量日志数据,提取出某日访问百度次数最多的那个IP。   此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。   再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节   假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。   典型的Top K算法,还是在这篇文章里头有所阐述。 文中,给出的最终算法是:第一步、先对这批海量数据预处理,在O(N)的时间内用Hash表完成排序;然后,第二步、借助堆这个数据结构,找出Top K,时间复杂度为N

海量数据处理:十道面试题与十个海量数据处理方法总结

戏子无情 提交于 2019-12-08 18:41:27
海量数据处理:十道面试题与十个海量数据处理方法总结 作者:July、youwang、yanxionglu。 时间:二零一一年三月二十六日 说明:本文分为俩部分,第一部分为10道海量数据处理的面试题,第二部分为10个海量数据处理的方法总结。有任何问题,欢迎交流、指正。 出处: http://blog.csdn.net/v_JULY_v 。 ------------------------------------------ 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 或者如下阐述(雪域之鹰): 算法思想:分而治之+Hash 1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理; 2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;

经典大数据处理十道题

我与影子孤独终老i 提交于 2019-12-08 18:40:36
第一部分、十道海量数据处理 1、海量日志数据,提取出某日访问百度次数最多的那个IP。   此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。   再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节   假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。   典型的Top K算法,还是在这篇文章里头有所阐述。 文中,给出的最终算法是:第一步、先对这批海量数据预处理,在O(N)的时间内用Hash表完成排序;然后,第二步、借助堆这个数据结构,找出Top K,时间复杂度为N

十道海量数据处理面试题与十个方法大总结

一曲冷凌霜 提交于 2019-12-08 18:39:56
来源: blog.csdn.net 发布时间: 2011-03-30 13:23 阅读: 60 次 原文链接 全屏阅读   [收藏] 编辑点评: 本文将向您讲述诸多数据处理面试题以及方法的总结。   第一部分、十道海量数据处理面试题    1、海量日志数据,提取出某日访问百度次数最多的那个IP。   此题,在我之前的一篇文章 算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。   再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。   2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。   假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G

【转】海量数据处理:十道面试题与十个海量数据处理方法总结

巧了我就是萌 提交于 2019-12-08 18:08:02
海量数据处理:十道面试题与十个海量数据处理方法总结 作者:July、youwang、yanxionglu。 时间:二零一一年三月二十六日 说明:本文分为俩部分,第一部分为10道海量数据处理的面试题,第二部分为10个海量数据处理的方法总结。有任何问题,欢迎交流、指正。 出处: http://blog.csdn.net/v_JULY_v 。 ------------------------------------------ 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 此题,在我之前的一篇文章: 十一、从头到尾彻底解析Hash表 算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。 再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来

十道海量数据处理面试题与十个方法大总结

筅森魡賤 提交于 2019-12-08 17:53:38
海量数据处理:十道面试题与十个海量数据处理方法总结 作者:July、youwang、yanxionglu。 时间:二零一一年三月二十六日 本文之总结: 教你如何迅速秒杀掉:99%的海量数据处理面试题 。有任何问题,欢迎随时交流、指正。 出处: http://blog.csdn.net/v_JULY_v 。 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 或者如下阐述(雪域之鹰): 算法思想:分而治之+Hash 1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理; 2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址; 3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map

数据结构与算法之数组

房东的猫 提交于 2019-12-08 15:17:56
本章重点: 1.Java中数组的基础知识; 创建数组: 在许多的编程语言中(甚至有些面向对象语言,如c++),数组也是基本类型,但是在Java中把他们当做对象来对待,因此在创建数组时必须使用new操作符: int[] intArray; intArray = new int[100]; []操作符对于编译器来说是一个标志,它说明正在命名的是数组对象而不是普通的变量。 或: int[] intArray = new int[100]; int intArray[] = new int[100]; 由于数组是一个对象,所以它的名字intArray是数组的一个引用,而不是数组本身。数组存储在内存中的其他地址中,而intArray仅仅保存着这个地址。正如大多数编程语言一样,数组一旦被创建,数组大小便不可改变。 访问数组数据项: 数组数据项通过使用方括号中的下标数来访问: temp = intArray[3]; 注意:无论是在c、c++,还是java中,第一个数据项的下标都是0,所以一个有10个数据项的数组下标是从0到9.强撸会报Array Index Out Of Bounds数组越界错误。 初始化: 当创建整型数组之后,如果不另行指定,那么整型数组会自动初始化为空。与C++不同的是,即使通过方法来定义数组也是这样的。创建一个对象数组如下: autoData[] carArray =

欧拉路径的判断与查找

故事扮演 提交于 2019-12-08 14:46:35
判定 首先图必须是联通的,用并查集判即可 无向图欧拉回路:所有点度数都为偶数 无向图欧拉路径:两个点(或0个点)度数为奇数,其余点(或所有点)度数为偶数 有向图欧拉回路:所有点入度=出度 有向图欧拉路径:一个点入度=出度+1,一个点出度=入度+1,其余点(或所有点)入度=出度 查找-Hierholzer算法 //已知存在欧拉路径,找该路径 void dfs(int u){//s1~sn中存储的是欧拉路径上的点序列 for(int v=1;v<=n;v++){ if(mp[u][v]>0){ mp[u][v]--; mp[v][u]--; dfs(v); } } s[temp--]=u; } 为什么是对的? 因为找欧拉路径可以通过在图上的两个奇数点之间加一条边转化为求欧拉回路的问题。通过枚举可以发现,存在欧拉回路的图一定是由一些环嵌套而成(可以通过把一些点一分为二近似地看成仙人掌图) 将一个环看成主环,要一笔画走完主环,只要在遇到有副环的点u先沿着副环走一圈,再接着沿着主环走就好了 Hierholzer算法就是我们上述思路的一种简单的实现方法: 我们将开始dfs的点属于的环视为主环(其实可以有很多种不同的可能性,不一定就是最显然的那个环),在第一次dfs到无法递归下去时,所有被遍历到的点都在主环上,显然应该将最后遍历到的点放在答案数组的最后,然后一边回溯,如果还是无法递归

算法原理系列:2-3查找树

你。 提交于 2019-12-08 04:22:30
2-3查找树 第一次接触它是在刷数据结构那本书时,有它的介绍。而那时候只是单纯的理解它的节点是如何分裂,以及整个构建过程,并不清楚它的实际用处,所以看了也就忘了。而当看完《算法》查找章节时,顿时有种顿悟,喔,原来如此啊。所以,提出来的这些有趣的结构千万不能割裂来看,它的演变如此诱人,细节值得品味。 结构缘由 首先,搞清楚2-3查找树为什么会出来,它要解决什么样的问题?假设我们对它的基本已经有所了解了。先给它来个简单的定义: 2-3查找树: 一种保持有序结构的查找树。 可以维持动态平衡的有序查找树。 从上述定义就可以看出,它到底是为了解决什么问题,在上一篇文章中,介绍了【查找】的演变过程,详细请参看博文 这里 。其中最后优化到了BST这种树的结构。但我们都知道BST它对数据的输入是敏感的,如最坏情况下,每次 put() 的 key 是有序的,那么构造出来的 BST 树,就相当于一个链表,那么对于每个元素的查找,它的性能就相当糟糕。而2-3树就是为了规避上述问题而设计发明出来的模型。现在请思考该如何设计它呢? 这里我们从BST遇到的实际问题出发,提出设计指标,再去思考利用些潜在的性质来构建2-3树。这部分内容,没有什么理论根据,而是我自己尝试去抓些字典的性质来构建,而2-3树的诞生过程并非真的如此,所以仅供参考。 构建2-3树 字典的两个主要操作为:查找和插入。而在前面一篇文章说到