careercup 擴充套件性和儲存限制10 3

2021-09-06 22:37:07 字數 1939 閱讀 9690

給你乙個檔案,裡面包含40億個整數,寫乙個演算法找出該檔案中不包含的乙個整數, 假設你有1gb記憶體可用。

如果你只有10mb的記憶體呢?

我們先來做個算術題,40億個整數大概有多大?

40 * 10^8 * 4b = 16gb (大約值,因為不是按照2的冪來做單位換算)

這個明顯無法一次性裝入記憶體中。但是,如果我們用計算機中的一位來表示某個數出現與否, 就可以減少記憶體使用量。比如在一塊連續的記憶體區域,15出現,則將第15位置1。 這個就是bit map演算法。關於這個演算法,網上有篇文章寫得挺通俗易懂的,推薦:

如果用bit map演算法,乙個整數用一位表示出現與否,需要的記憶體大小是:

40 * 10^8 b = 5 * 10^8 b = 0.5gb

而我們有1gb的記憶體,因此該演算法可行。由於bit map只能處理非負數, (沒有說在第-1位上置1的),因此對於有符號整數,可以將所有的數加上0x7fffffff, 將資料移動到正半軸,找到乙個滿足條件的數再減去0x7fffffff即可。 因此本文只考慮無符號整數,對於有負數的情況,按照上面的方法處理即可。

我們遍歷一遍檔案,將出現的數對應的那一位置1,然後遍歷這些位, 找到第乙個有0的位即可,這一位對應的數沒有出現。**如下:

#include #include 

using

namespace

std;

intmain()

//fclose(stdout);

freopen(

"12.3.in

", "r"

, stdin);

int int_len = sizeof(int) * 8

;

int bit_len = 0xffffffff /int_len;

int* bit = new

int[bit_len];

intv;

while(scanf("

%d", &v) !=eof)

bool found = false

;

for(int i=0; ii)

}if(found) break

; }

delete

bit;

fclose(stdin);

return0;

}

而我們有1gb的記憶體,因此該演算法可行。由於bit map只能處理非負數, (沒有說在第-1位上置1的),因此對於有符號整數,可以將所有的數加上0x7fffffff, 將資料移動到正半軸,找到乙個滿足條件的數再減去0x7fffffff即可。 因此本文只考慮無符號整數,對於有負數的情況,按照上面的方法處理即可。

接下來我們就可以用bit map演算法了。我們再遍歷一遍資料, 把落在這個塊的數對應的位置1(我們要先把這個數歸約到0到blocksize之間)。 最後我們找到這個塊中第乙個為0的位,其對應的數就是乙個沒有出現在該檔案中的數。 **如下:

#include #include 

using

namespace

std;

intmain()

fclose(stdin);

intstart;

for(int i=0; ii)

}freopen(

"12.3.in

", "r"

, stdin);

while(scanf("

%d", &v) !=eof)

}bool found = false

;

for(int i=0; i1; ++i)

}if(found) break

; }

delete

block;

delete

bit;

fclose(stdin);

return0;

}

架構 擴充套件性

擴充套件選和伸縮性 擴充套件性 指對現有系統影響最小的情況下,系統功能可持續擴充套件或提公升的能力。表現在系統基礎設施穩定不需要經常變更,應用之間較少依賴和耦合,對需求變更可以敏捷響應。它是系統架構設計層面的開閉原則 對擴充套件開放,對修改關閉 架構設計考慮未來功能擴充套件,當系統增加新功能時,不需...

CSS可擴充套件性

今日在寫pc官網的時候,一直對於html css的結構編寫完全按照自己的思維方式,今天把 交給老大的時候,被他指出很多編寫 的錯誤性,比如 結構,標籤的使用,語義化,css的可擴充套件性,由於 主要還是需要做seo優化,所以在標籤使用上也有些不合理之處,給了我一些建議,自己記錄以下 1 在html標...

具有高擴充套件性的儲存引擎 TokuDB

tokudb是什麼?tokudb是乙個應用在mysql和mariadb中的儲存引擎,它使用索引來加快查詢速度,具有高擴充套件性並支援hot schema modification。如果你的記錄數量過億 儲存舊的記錄或想要縮小資料占用的儲存空間,很適合使用tokudb。本文內容摘自 核心系統 插入效能...