我看各專業精英都有方法,作為計算機方向,我也忍不住出一計——
MapReduce 其實就是把龐大資料分為多塊小一點的資料(Map),然後再把每個小塊資料的結果總結起來(Reduce),就得到了結果。
就這個問題來說,我把一袋米分給 10 個人,讓他們每人回頭告訴我分到的那一份是奇數還是偶數,根據:
-
奇數+奇數=偶數
-
偶數+偶數=偶數
-
奇數+偶數=奇數
知道這 10 個人分到米粒的奇偶,我就知道整袋米的奇偶,這就是一次 MapReduce。
當然這 10 個人也不用自己逐一去數米,他們每個人也可以把分到手的米粒分給其他 10 個人,要那 10 個人給出分到米粒的奇偶。
下一層的 10×10=100 個人也不用自己逐一去數米,分給他他們的下家。
……
最後米粒肯定會分到某一層的時候 10 個人只有分到 1 粒米(奇數)或者 0 粒米(偶數)的時候,那時候就可以反向給上家彙報分到他們的奇偶性。
上家繼續向上彙報奇偶性。
……
最後奇偶性彙報到我這裡,我就可以推匯出整袋米粒的奇偶性了。
你看,整個過程中並沒有逐一數米,分米的時候也不用絕對平均,差不多平均別累著某些人就好,就算分米不平均也不影響結果正確性。
就和《三體》裡的秦始皇人肉計算機一樣,只要人夠多,就搞定了:-)
點選【閱讀原文】,看更多精彩回答