大量url,如何去重


問題: 
有大量的字符串格式的URL,如何從中去除重復的,優化時間空間復雜度 



1. 內存夠用,將URL存入hash鏈表,每個URL讀入到hash鏈表中,遇到重復的就舍棄,否則加入到鏈表里面,最后遍歷得到所有不重復的URL。空間復雜度M,時間復雜度為O(N+N/M),M為不重復的URL,N為總URL數,但是M無法預測,所以存在風險,可能內存不足以存儲所有的不重復URL。 

2. 為了解決內存可能不足的問題,需要把hash鏈表變化成普通的hash表,每個hash表元素指向一個文件文件,這個文件記錄了所有該hash值對應的無重復的URL,那么在加入URL的時候就遍歷對應文件中的URL,沒有重復則加入到文件中。這樣做時間復雜度沒有提升,但是每次都要讀寫文件,消耗的時間應該是上一種方式的三倍(依賴於io速度),而對內存的要求比較小。一個改進是加入URL的時候進行排序,這樣能減少比對的次數。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM