如何高效地計算 2 億多個 0 到 INT MAX 隨機數的平均值?

時間 2021-05-31 02:37:38

1樓:hellojukay

我又想到一種方法,每次2000數字求一次平均數,平均數帶小數點0.5,則把這個平均數放在檔案A中,平均數不帶小數點則放在檔案B中,這樣分別對兩個檔案中的檔案數平均數,這要遞迴下去,最後再歸併回來求平均數,就可以保證求的的平均數沒有誤差。

2樓:Hilon

資料量過大,資料處理需要先分組了.先求與INT_MAX/2的差值,然後分組求平均值.每個組個數不超過65535個(非均勻分布不會越界),然後各組之間求平均值.

每組內求和可以用32位變數,這樣處理的會稍快一些.我記得好像是對32位計算有優化的,這個你可以跟做CPU架構的確認一下.

每組間求平均數記得換成Double.按照你說的量不會超過65535組,用Double也可以了.

3樓:

如果禁止使用所有其他資料型別的話,建議

每個數減去INT_MAX/2;

從小到大排序;

交替求和;(最小的數加上最大的數,結果為正就加次小的數,結果為負就加上次最大的數...)

求平均值;

平均值+INT_MAX/2

提公升效能的方法

不必嚴格排序, 只需要把正數和負數分開就可以了,相當於QuickSort的第一次迭代。複雜度為O(n)。

求和不找最小和最大。 和為正就不斷加負數,和為負就不斷加正數。

4樓:Milo Yip

如INT_MAX是2^31-1,2億大約是2^27.6,2億個INT_MAX之和也僅是2^58.6。

用64位整數計算和,再轉換成double計算除數。這樣除數會有一些精度損失,可改用long double(有些平台是80位,這樣有63位mantissa),或使用128位的浮點數除法實現。

如果個數剛好是2的冪,就能完全精確地把那個和以定點數表示平均數。

上述的做法都是O(n),一般64位平台上效能不做成問題,而且較使用浮點數「穩定」(這裡指結果不受資料次序影響)。

5樓:

沒必要把求得的平均數放到別的檔案去。。

你可以開2個大小為1k的緩衝區。

sometype buf[2][20000]讀進來的數先試圖填充buf[0],然後當buf[0]滿了之後就求和然後推到buf[1]。。

至於sometype就取決於你最後所需要的精度了。。

應該如何高效地對比閱讀多個不同版本的教材?

蟹妖題主沒講是哪一類的教材,那我就拋個板磚引個搬磚大漢好了。舉個例子 工科類的教材,比如理論力學。內容大同小異,這裡我說的大同小異是指所介紹的知識點基本相似,偶爾有不同或是擴充,那真是太少了,可以忽略不計。不包括編寫人的解說方式 表達風格等 好了,回到正題上來。我個人認為最高效也是我挑書最重要的乙個...

如何安全高效地拉架?

w88h88y88 牧豬小民 朋友打架不用猛拉,都是點到為止。不過要是朋友和陌生人衝突,自己又不想太牽扯進去,可以試試拉偏架 摁住和朋友打架的人,對朋友大喊 別打了,你咋打他頭,你別踢他啊 實質上則是給朋友提供輸出空間。萬一出事了,可以和警察說 我先控制住了有暴力傾向 主動攻擊的一方,又語言勸阻了失...

高中如何高效地背書

記憶學堂 銘銘老師 這個不難的,高度認可快速記憶法的學生,學會掌握了記憶方法,可以輕輕鬆鬆記住難記的知識點,快速記住歷史政治語文等文章知識點。 wzy 我給你看乙個鏈結,也許有幫助。 橙子西瓜菠蘿 哈哈來啦!背書小能手上線!背書實在是做學生繞不過去的基本面,基本功。不論側文還是側理,你就算現在不背了...