一個檔案中有40億個整數,每個整數為四個位元組,記憶體為1GB,寫出一個演算法:求出這個檔案裡的整數裡不包含的一個整數
答:方法一: 4個位元組表示的'整數,總共只有2^32約等於4G個可能。
為了簡單起見,可以假設都是無符號整數。
分配500MB記憶體,每一bit代表一個整數,剛好可以表示完4個位元組的整數,初始值為0。基本思想每讀入一個數,就把它對應的bit位置為1,處理完40G個數後,對500M的記憶體遍歷,找出一個bit為0的位,輸出對應的整數就是未出現的。演算法流程:
1)分配500MB記憶體buf,初始化為0
2)unsigned int x=0×1;
for each int j in file
buf=buf ¦x < <j;
end
(3) for(unsigned int i=0; i <= 0xffffffff; i++)
if (!(buf & x < <i))
{
output(i);
break;
}
以上只是針對無符號的,有符號的整數可以依此類推。