如果每個數據元素只出現一次,而且只出現在某一臺機器中,那么可以采取以下步驟統計出現次數TOP10的數據元素:
堆排序:在每臺電腦上求出TOP10,可以采用包含10個元素的堆完成(TOP10小,用最大堆,TOP10大,用最小堆,比如求TOP10大,我們首先取前10個元素調整成最小堆,如果發現,然后掃描后面的數據,并與堆頂元素比較,如果比堆頂元素大,那么用該元素替換堆頂,然后再調整為最小堆。最后堆中的元素就是TOP10大)。
求出每臺電腦上的TOP10后,然后把這100臺電腦上的TOP10組合起來,共1000個數據,再利用上面類似的方法求出TOP10就可以了。 但如果同一個元素重復出現在不同的電腦中呢,如下例子所述, 這個時候,你可以有兩種方法:
1. 遍歷一遍所有數據,重新hash取摸,如此使得同一個元素只出現在單獨的一臺電腦中,然后采用上面所說的方法,統計每臺電腦中各個元素的出現次數找出TOP10,繼而組合100臺電腦上的TOP10,找出最終的TOP10。
2. 或者,暴力求解: 直接統計統計每臺電腦中各個元素的出現次數,然后把同一個元素在不同機器中的出現次數相加,最終從所有數據中找出TOP10。