騰訊商業分析筆試題

才智咖 人氣:2.55W

想要進入騰訊工作,可是要參加筆試的。下面本站小編為大家蒐集的一篇“騰訊商業分析筆試題”,供大家參考借鑑,希望可以幫助到有需要的朋友!

騰訊商業分析筆試題

一 不定項選擇題(共25題,每題4分,共100分,少選、錯選、多選均不得分)

1 已知一棵二元樹,如果先序遍歷的節點順序是:ADCEFGHB,中序遍歷是:CDFEGHAB,則後序遍歷結果為:(D)

EBDA GHBA DEBA EDBA

先序遍歷:根左右,因此可以通過先序遍歷得到父子關係,即在前面肯定是後面的父節點。中序遍歷:左根右,通過中序遍歷可以獲得某個節點的左右孩子(直接),因此可以還原出這課二元樹為:,得出這棵二元樹後就可以推出它的後序遍歷。

2 下列哪兩個資料結構,同時具有較高的查詢和刪除效能?(CD)

A.有序陣列 B.有序連結串列 樹 表

A和B沒什麼可說的,DHash表的查詢的時間複雜度:不衝突時為O(1),刪除也為O(1),衝突時為O(C),O(C)都是常數量級別的。所以必選。

補充一下,在開放地址方法時不能物理刪除,只能做一個刪除標記。若是鏈式地址方法的話可以物理刪除。

C平衡樹,平衡樹的查詢的時間複雜度:O(logn),刪除的時間複雜度取決於是否還要調整,但即使調整時間複雜為O(1).C也可以選。只要在logn級別的`複雜度都是比較高速的。

3 下列排序演算法中,哪些時間複雜度不會超過nlogn?(BC)

A.快速排序 B.堆排序 C.歸併排序 D.氣泡排序

堆排序的最好和最壞都是n*logn,歸併排序最好是O(n),最壞是O(n*logn)因此BC沒問題。

4 初始序列為1 8 6 2 5 4 7 3一組數採用堆排序,當建堆(小根堆)完畢時,堆所對應的二元樹中序遍歷序列為:(A)

A.8 3 2 5 1 6 4 7

B.3 2 8 5 1 4 6 7

C.3 8 2 5 1 6 7 4

D.8 2 3 5 1 4 7 6

根據初始序列,建成的小根堆為:

對其進行中序遍歷的結果為:83251647

14 如果某系統15*4=112成立,則系統採用的是(A)進位制。

A.6 B.7 C.8 D.9

根據進位制的定義可以得出若是x進位制的數,則個位的數字就是該數字,十位上的數字大小為a則為a*x,百位的為a*x^2.利用這個原理將上面的等式改為

2+x+x^2 = 4*(5+x)可以得出x=6.話說這道題和資料結構沒什麼關係吧,或許我的解法有問題。

15 某段文字中各個字母出現的頻率分別是{a:4,b:3,o:12,h:7,i:10},使用哈夫曼編碼,則哪種是可能的編碼:(A)

A a(000) b(001) h(01) i(10) o(11)

B a(0000) b(0001) h(001) o(01) i(1)

C a(000) b(001) h(01) i(10) o(00)

D a(0000) b(0001) h(001) o(000) i(1)

根據頻率可以得出一棵哈夫曼樹為:

可以得出a是一種答案。關鍵是構建哈夫曼樹的過程,選出兩個最小頻率的節點,其父節點的值為左右孩子的和,再將這個父節點放入到原序列中再次選出兩個最小值的節點。如果得出的新節點不在最小的二個節點中,那麼新選出的兩個節點要比這個新節點的深度大一即要在其下一層。如圖中的i節點和o節點。只要注意這個,這個題就沒什麼問題了。

17 一個棧的入棧序列是A,B,C,D,E,則棧的不可能的輸出序列是?(C)

A A B E

沒啥好說的。

21 遞迴函式最終會結束,那麼這個函式一定?(B)

A 使用了局部變數

B 有一個分支不呼叫自身

C 使用了全域性變數或者使用了一個或多個引數

D 沒有迴圈呼叫

遞迴函式要求有一個出口,即不在繼續呼叫自身,這樣才能結束遞迴。

二、填空題(共4題10個空,每空2分,共20 分)

1 設有字母序列{Q,D,F,X,A,P,N,B,Y,M,C,W},請寫出按二路歸併方法對該序列進行一趟掃描後的結果為DQFXAPBNMYCW。

這個也沒什麼可說的,只要明白歸併排序的方法就可以了。歸併的含義是將兩個或兩個以上的有序表組合成一個新的有序表,二路歸併就是說每次分的表為2或1。

2 關鍵碼序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),要按照關鍵碼值遞增的次序進行排序,若採用初始步長為4的Shell的排序法,則一趟掃描的結果是QACSQDFXRHMY;若採用以第一個元素為分界元素的快速排序法,則掃描一趟的結果是FHCDQAMQRSYX。

希爾排序,相同增量的數為一組進行簡單插入排序。步長為4也就是相隔的增量為4.第一組為QQR,剩餘的為ADH,CFM,SXY。組內排序可以得出答案。快速排序,相信大家都很熟悉了,只是以一個key為基準這裡選中了第一個元素,key左邊的元素都不大於key,右邊的都大於key。從後往前找第一個不大於key的元素,找到後從前往後找第一個大於key的,知道兩個指標相遇。結果也很好得出。

三、其他方向簡答題(共2題,每題20分),選作題,不計入總分)

2 A,B兩個整數集合,設計一個演算法求他們的交集,儘可能的高效。

我的想法感覺比較笨,第一種:先對其中的一個進行排序,然後從一個未排序的集合中取出一個元素用折半查詢的方法查詢集合中有沒有這個元素。相應的時間複雜度為:排序n*logn,查詢的時間複雜度也為n*logn,整體上也是n*logn。這個時間複雜有待商榷的地方在於,排序的時間複雜度,若選取堆排序則平均複雜度為n*logn,如果選用其他的排序方法最壞的情況下不一定是這個複雜度。

第二種方法:利用Hash表,先將A構造成一個Hash表,然後將B看做是待查詢元素從Hash表裡查詢。Hash表的查詢的時間複雜最壞為O(C)C為平均查詢長度,構造Hash表的時間複雜度也是常數級別的,平均為O(C)。