1. 程式人生 > >電面總結(資料探勘)

電面總結(資料探勘)

C++:

const

虛擬函式:虛擬函式是C++中用於實現多型(polymorphism)的機制。核心理念就是通過基類訪問派生類定義的函式。

Python

  • 常用的資料結構及應用場景(list,dict,tuple)

統計知識

給定一個分類器p,它有0.5的概率輸出1,0.5的概率輸出0。

  • Q1:如何生成一個分類器使該分類器輸出1的概率為0.25,輸出0的概率為0.75? Ans:連續進行兩次分類,兩次結果均為1則輸出1,其餘情況(10,01,00)均輸出0。

  • Q2:如何生成一個分類器使該分類器輸出1的概率為0.3,輸出0的概率為0.7?Tip:小明正在做一道選擇題,問題只有A、B和C三個選項,通過拋一個硬幣來使選擇3個選項的概率相同。小明只需拋連續拋兩次硬幣,結果正正為A,正負為B,負正為C,負負則重新拋硬幣。 Ans

    :連續進行4次分類(2^4=16 > 10),結果前3種情況則輸出1,結果接下來7種情況則輸出0,其餘情況重新進行分類。

工程應用問題

  • Q1:給定一個1T的單詞檔案,檔案中每一行為一個單詞,單詞無序且有重複,當前有5臺計算機。請問如何高效地利用5臺計算機完成檔案詞頻統計工作?Ans(有問題的):將1T檔案切分為5份,分配給5臺計算機。每臺計算機進行詞頻統計工作,輸出一個結果為{單詞:頻數}的字典結果檔案。將5臺計算機生成的5個結果檔案合併。

  • Q2:每臺計算機需要計算200G左右的檔案,記憶體無法存放200G內容,那麼如何統計這些檔案的詞頻? Ans(不是最優):首先將檔案排序,然後遍歷利用list儲存結果即可。(不能用字典,因為200G統計出來的結果會很大,沒有那麼大的記憶體存放字典。由於經過排序操作,遍歷儲存並不會使結果丟失,所以用list儲存結果即可,每當一個list即將佔滿記憶體,則將其寫入檔案,然後清空list繼續儲存結果。)

  • Q3:如何將1T的檔案均勻地分配給5臺機器,且每臺機器統計完詞頻生成的檔案只需要拼接起來即可(即每臺機器統計的單詞不出現在其他機器中)Ans1(不是很好):對1T檔案中的單詞進行抽樣,獲得其概率分佈,遍歷檔案,然後根據首字母的概率均勻分配至5臺計算機,如a到e的概率均為0.04, 0.04*5=0.2,則將所有以a-e的單詞放入第1臺計算機,若z的概率為0.2,則把所有以z開頭的單詞放入第5臺計算機。缺點:不具有可擴充套件性,如果有100臺計算機,那麼可能就需要2個字母計算了,則程式就要改變。還有可能出現2臺機器中有相同的單詞。 Ans2(不是最優):遍歷檔案,對於每一個單詞,獲得單詞中各字母的ASCII碼值,然後將ASCII值之和取餘。則每臺機器中的單詞必定是不一樣。