關於程式設計珠璣第2章的整理

2021-07-04 23:08:12 字數 795 閱讀 2021

給定乙個最多包含40億個隨機排列的32位整數的順序檔案,找出乙個不在檔案中一32位整數。

1、在檔案中至少存在這樣乙個數?

2、如果有足夠的記憶體,如何處理?

3、如果記憶體不足,僅可以用檔案來進行處理,如何處理?

答案:1、如果採用位圖思想來存放,則32位整數最多需要占用43億個位。約512mb的記憶體空間。

如果某位上為1則存在這個數,為0則不存在這個數

int a[1+n/32];

void set(int i)

void clr(int i)

2.如果用二分搜尋來解決此問題,演算法如下

演算法認為如果32位整數都存在的話則每個bit位上的0,1數量是相當的。

int split(int* a, int* b, int*c, int alen, int bit)

{ int biter, citer, i;//biter、citer分別是b和c的索引計數器

int v=0, re = 0, *t;

while(bit--){

v = (1 << bit); //v從最高位開始依次向後

for(i=biter=citer=0; i < alen; i++) { //遍歷陣列a

if(a[i] & (1<2.字串迴圈移位比如abcdef 左移三位,則變成defabc

求逆比如 abcdefgh

reverse(a,0,i-1); cba defgh

reverse(a,i, n-1); cba hgfed

reverse(a, 0, n-1); defgh abc

程式設計珠璣第14章

這裡把所有關於堆的操作寫出來。當做標程吧。include include define ms 1025 typedef struct heap heap heap h static void shift heap h,int i else break a i t static void increa...

程式設計珠璣第12章

正文 如何生成0 n 1內的m個隨機整數 1 方法一 比如要從5個數里選出2個數,第乙個數的概率是2 5,第二個數的概率是1 4,然後是0 3 那麼現在已經很清楚了。可以寫 如下 for int i 0 i n i if rand n i m 2 方法二 可以用乙個set,每生成乙個隨機,就去set...

程式設計珠璣第13章

正文 為了解決在12章中的隨機數問題,本章中的目的是對檢視是否在陣列中的情況進行處理。那麼這裡採用了以下幾種方法 1 採用c 的set 2 採用陣列 3 採用鍊錶,順序搜尋,插入時不用移動。結果是陣列的比鍊錶的要快 1 鍊錶需要讀入的記憶體數比陣列大 2 陣列訪問有較好的記憶體相聯性,而鍊錶則不能保...