查找两个数组的相同字符(两个超大文件的相同字符)
2016-03-15 16:22
288 查看
1.找到两个数组中的相同元素
数组A
数组B
方法1:对A中的数组进行排序,采取同样的排序方法对B中的数组进行排序
1)从A,B中各自取出a,b进行比较
2)如果a>b,那么从B中取出下一个数据b进行比较
3)如果a<b,那么从A中取出下一个数据a进行比较
4)如果a=b,那么找到一个,继续
方法2:hash
1)对A中的m个数据装入到hash表
2)对B中的n个数据一次去hash表中查询,如果找到那么就是相同元素
升级:如果数据特别大,内存无法装下。 两个大文件,查找相同字符串
hash,分治法:
1)采用hash算法对A文件进行hash成a个小文件
2)采取同样的hash算法对B文件进行hash成b个小文件
3)比较小文件对<a1,b1>.........因为hash的问题,所以相同的字符串肯定在同个文件对里面。
4)统计小文件对,可以继续采用hash,对a1的每一字符串建立hash表,遍历b1的字符串看是否在之前构建的hash表里面(和上面一样)
一般来说,如果内存可以存放,可以构造hash表,进行查找。如果内存无法加载,那么可以通过hash把大文件分成多个小文件,从而进行比较。
hash算法在海量数据中的运用:
单机处理大数据的问题也和mapreduce一样,分而治之,把海量数据切分成若干个小份进行处理。
1)分而治之
采用hash进行取模进行等价映射,将巨大的文件进行等价分割(符合一定规律的数据会被划分到同一个文件),划分成若干个小文件再进行处理。
2)利用hashmap进行内存统计
利用hashMap对小文件里面的数据进行统计
3)排序
数组A
数组B
方法1:对A中的数组进行排序,采取同样的排序方法对B中的数组进行排序
1)从A,B中各自取出a,b进行比较
2)如果a>b,那么从B中取出下一个数据b进行比较
3)如果a<b,那么从A中取出下一个数据a进行比较
4)如果a=b,那么找到一个,继续
方法2:hash
1)对A中的m个数据装入到hash表
2)对B中的n个数据一次去hash表中查询,如果找到那么就是相同元素
升级:如果数据特别大,内存无法装下。 两个大文件,查找相同字符串
hash,分治法:
1)采用hash算法对A文件进行hash成a个小文件
2)采取同样的hash算法对B文件进行hash成b个小文件
3)比较小文件对<a1,b1>.........因为hash的问题,所以相同的字符串肯定在同个文件对里面。
4)统计小文件对,可以继续采用hash,对a1的每一字符串建立hash表,遍历b1的字符串看是否在之前构建的hash表里面(和上面一样)
一般来说,如果内存可以存放,可以构造hash表,进行查找。如果内存无法加载,那么可以通过hash把大文件分成多个小文件,从而进行比较。
hash算法在海量数据中的运用:
单机处理大数据的问题也和mapreduce一样,分而治之,把海量数据切分成若干个小份进行处理。
1)分而治之
采用hash进行取模进行等价映射,将巨大的文件进行等价分割(符合一定规律的数据会被划分到同一个文件),划分成若干个小文件再进行处理。
2)利用hashmap进行内存统计
利用hashMap对小文件里面的数据进行统计
3)排序
相关文章推荐
- GLSL学习笔记---之内建变量
- 使用installEventFilter 监听LineEdit事件
- GitHub 上排名前 100 的 Android 开源库简介
- ActiveMQ 即时通讯服务 浅析
- Learning Deconvolution Network for Semantic Segmentation
- python 协程
- linux下 fork(),vfork(),clone()的用法及区别
- PHP如何添加自带的扩展库
- websocket
- xml文档
- CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)
- C#解leetcode 16. 3Sum Closest
- P364实战练习第一题
- 课后题
- 不调用mysql_close()出现的问题
- android_内容提供者的升级定义和访问
- Android SQLite数据库升级的问题
- 【leetcode】【204】Count Primes
- PorterDuffXferMode不正确的真正原因PorterDuffXferMode深入试验)
- 通往WinDbg的捷径(二)