機械開發**久了,看了看一些面試題,可以活躍大腦,最近網上看了一題面試題。
google面試題:找幾百億資料的中值
有幾百億的整數,分布的儲存到幾百台通過網路連線的計算機上,你能否開發出乙個演算法和系統,找出這幾百億資料的中值?就是在一組排序好的資料中居於中間的數。顯然,一台機器是裝不下所有的資料,也盡量少用網路頻寬。
我的演算法訓練挺少的,只能自己談些自己的心得。
1.獲得題目,要仔細研讀,迅速轉化為數學模型。
混亂 -->有序 , 區域性-->整體。
大問題化解為小問題來求解。
這時,我們的思路 大概就是出來了:如果每一台機器上的資料都是無序的,我們需要排序,排好序了從這些區域性中
綜合到整體, 然後獲得乙個正確答案。
2. 舉例歸納。確立問題的邊界。
1 4 5 6 15 44 55
3 7 11 12 13 18 35
總的順序為 1 3 4 5 6 7 11 12 13 15 18 35 44 55.
總共 14個數,中值為 11 12 。
直白的想法,這是歸併排序嗎,頻寬不允許。
當然,如果題目變成了,求任意個位置的數值,那麼歸併排序就是乙個完全的解空間。
現在題目很特殊,就是乙個中值,我們要充分利用這個內涵。
3. 發掘約束,削減解空間。
觀察樣本,利用直覺,第一排中間是6,第二是12,小於6的全部拋棄, 大於12的全部拋棄。
中值在 6 15 44 55, 3 7 11 12中尋找,可以嗎?
答案好像是可以的,假設中值在問號位置,
* ? * 6 15 44 55
3 7 11 12 13 18 35
那麼 ? < 6 <12, 那麼 ? 排在整個序列中,那麼它後面還有 4+4> (14/2)了,所以它的位置肯定不為中間,那麼同樣道理,中值也不肯出現在 下一排的 比較大的那部分,
反證法證完畢。
我們可以通過傳送乙個值,一下排除一半的資料,同樣道理,我們繼續總剩下的序列中,通過這個方式,
遞迴地排除好多資料,最後夾逼到中值,有點類似求極限,呵呵。
當然,這裡有些小細節沒有給出,如果幾排中值相等如何處理等等,如果遞迴,我想這些聰明的讀者已經想到,先到這裡吧, 作為乙個民工,我他媽的還要繼續給老闆創造價值,先把那80%不需要頭腦的活幹完再說。
谷歌面試題
這個所謂的面試沒有物理存在,只是邏輯上等同於。題目要求如下 整數序列q中的每個元素都至少能被整數a和b中的乙個整除,現給定a和b,請計算出q中的前n項元素。例如,當a 3,b 5,n 6時,q序列的前6項元素為3,5,6,9,10,12。1 設計函式void generate int a int b...
谷歌面試題
某獵頭收集了140多個google的面試題,都張到他的blog中了,主要是下面這些職位的,因為被牆,且無任何敏感資訊,所以,我原文搬過來了。這篇blog例舉了google用來面試下面這幾個職位的面試題。很多不是很容易回答,不過都比較經典與 是google,microsoft,amazon之類的公司的...
谷歌的面試題
幾星期前,乙個朋友接受了google公司的面試,他透露了面試中的一些問題。順便,我把從其他幾個曾經面試過的人那裡聽來的內容也整理在一起。最大的網際網路公司google的乙份面試題集,看看你是否能夠回答出來。其中很多問題都是開放式的,正確的解答有許多種,所以在這裡就不提供答案了。一輛學校班車裡面能裝多...