關於那個所謂的騰訊筆試題的研究

2021-04-17 11:34:56 字數 2512 閱讀 4262

題目是:乙個檔案中有40億個整數,每個整數為四個位元組,記憶體為1gb,寫出乙個演算法:求出這個檔案裡的整數裡不包含的乙個整數

演算法一:分配512mb記憶體,每一bit代表乙個整數,測試程式(vc6)如下:

//乙個

bit代表乙個數,實際上只需要

4096/8=512

兆的記憶體空間(即

(4096/32)*1024*1024

個整數陣列)

//unsigned long p[(4096/32)*1024*1024];//

棧預設不允許分配這麼大的空間!!

bool

bfound

= false;

unsigned

long*p

,lresult

;

p= newunsigned

long

[(4096/32)*1024*1024];

//這裡堆分配這麼大會較慢,約

20秒,但可以完成

//初始化記憶體,如果記憶體小,這句會很慢

memset(p

,0,(4096/8)*1024*1024);

//直接讀檔案的辦法:分段讀入檔案內容,把讀入的內容

4個位元組一組當無符號整數處理

//注意檔案中的整數可能會重複,並且沒有順序排列

/*file* stream = fopen("c://skinppdemo-vc.msi", "r");

if (stream)

fclose(stream);

}*///以下使用記憶體對映的方法:由於檔案有

16g那麼大,一次全對映也是不行的,要分多次

hfile

hfile

;

ofstruct

opbuf

;

handle

hmapfile

;

handle

hmapview

;

byte

*recv

;

hfile

=openfile

("c://skinppdemo-vc.msi"

,&opbuf

,of_read

);

if (

hfile

==hfile_error

)

dword

dwsizelow

, dwsizehigh

;

dwsizelow

= getfilesize

((handle

)hfile

, &dwsizehigh

);

hmapfile=((

handle

)hfile

,null

,page_readonly

,0,0,

"maptest"

);

if(hmapfile

==null

|| dwsizelow

== 0)

closehandle

((handle

)hfile

);

hfile

=0;

for(unsigned

long

l=0;

l<=

dwsizehigh;l

++)

recv

=(byte

*)hmapview

;

byte

*cur

=recv

;

long

lsize

= ((

lreadtimes

- 1 >

j) ?

read_size_every_time

: (dwsizelow

%read_size_every_time

));

while ( (

cur-

recv

) < (

lsize

- 3))

unmapviewoffile

(hmapview

);

}  }

//完成後,掃瞄一下陣列

p,找到第乙個不存在的數

for(unsigned

long

i=0;

i<(4096/32)*1024*1024;

i++)}}

if (

bfound

)

break;

}delete p;

注:如果直接用new申請動態記憶體,由於記憶體高達512兆,會很容易被交換到頁面檔案上去,效率會急劇下降,所以建議把記憶體申請在物理記憶體上,請參考virtualalloc和mapuserphysicalpages(需要sdk)等的使用

筆試題 騰訊基礎研究方向

編輯公式不方便,需要公式可自己上網查,這裡只給形象的概念幫助記憶。1.數學問題 3sigma原理,t分布,特徵根,特徵值,最大似然估計,馬爾科夫鏈。1 3sigma原理 在正態分佈中 代表標準差,代表均值x 即為影象的對稱軸,三 原則即為 數值分布在 中的概率為0.6526 數值分布在 2 2 中的...

筆試題目 騰訊2023年9月基礎研究筆試題

第一題 進行特徵選擇時,即分析哪些協變數對目標變數有較大影響時,有哪些常用的方法?你本人更看好其中哪些?為什麼?第二題 網路上流傳乙個故事,關於資料的神奇性 某商場向一位未婚少女郵寄一些用於保胎的商品目標和折扣券,其父親發火,後證實該少女確實懷孕,解釋一下如何做到的?個人從一下幾個方面答的,可能存在...

騰訊的遞迴筆試題目

題目是這樣的 f m,n m n 1 if m n 0 f m,n f m 1,f m,n 1 填空是 top 0 do elsewhile 1 top printf f d n f 解答過程 這是一道遞迴題目,說實話,第一次看到這種遞迴題目,還是感覺比較害怕,畢竟 f m,n f m 1,f m,...