問題:
有大量的字符串格式的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的時候進行排序,這樣能減少比對的次數。