GJS
少年,奋起吧。

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)排序

 

 

 

 

    

posted on 2016-03-15 16:22  GJS Blog  阅读(4319)  评论(0编辑  收藏  举报