如何判斷在40億個無符號整型數據是否存在某個數(不需要排序)?
方案1
申請512M的內存(232/8=512M),一個bit位代表一個unsigned int值。讀入40億個數,設置相應的bit位,讀入要查詢的數,查看相應的bit位是否爲1,爲1表示存在,爲0表示不存在。
方案2
因爲232爲40億多,所以給定一個數可能在,可能不在,這裏把40億個數中的每一個用32位的二進制來表示。
假設這40億個數分成兩類:①最高位爲0 ②最高位爲1
然後將這兩類分別寫入到兩個文件中,其中一個文件的個數<=20億,而另外一個>=20億(相當於折半查找);與要查找的數比較後進入對應的文件再查找
然後把這個文件又分爲兩類:①次高位爲0 ②次高位爲1
。。。。。。
以此類推,就可以找到,時間複雜度爲O(logn)