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