数组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)排序
从菜鸟走向大神,这是道路。