亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 求大數(shù)平均數(shù) [打印本頁]

作者: xunen    時間: 2010-11-18 09:47
標(biāo)題: 求大數(shù)平均數(shù)
本帖最后由 xunen 于 2010-11-23 10:39 編輯

一問題,100 萬個隨機(jī)分布在 0~2^31之間的int 類型整數(shù),如果求其平均數(shù)?


13樓有解答。
作者: liexusong    時間: 2010-11-18 09:53
每次求兩個數(shù)的平均值,到最后就是所有的平均值
作者: bladmin    時間: 2010-11-18 10:24
回復(fù) 2# liexusong


    精度不能保證吧

   3 8 10 2 7


   就這5個數(shù),你兩個兩個求平均值,似乎很難得到滿意的結(jié)果吧
作者: ecjtubaowp    時間: 2010-11-18 10:40
高精度的話,精度高,但是不夠快。
作者: zzyong08    時間: 2010-11-18 13:14
100 萬個隨機(jī)分布在 0~2^31之間的int 類型整數(shù),這些數(shù)存放在哪里?
如果已經(jīng)在內(nèi)存里了,那么直接全部相加求和,再除總數(shù)也沒啥性能問題。
如果不在內(nèi)存里,100萬個int也就4M。還是全讀進(jìn)內(nèi)存。IO肯定比cpu更耗時。
作者: cjaizss    時間: 2010-11-18 14:01
1.累和,除法.
2.用的是什么分布?在紙上把它的數(shù)學(xué)期望算出來,作為平均值
作者: zylthinking    時間: 2010-11-18 14:11
求和, 在溢出前記載和及參與相加的個數(shù), 然后剩下的數(shù)重復(fù)這個過程。 第一遍完后, 假設(shè)生成的結(jié)果任意兩個相加都溢出, 對每一個結(jié)果與之前記載的參與相加的個數(shù)想除取整, 找出所有想除后獲得的最小, 對第一步生成的結(jié)果都減去這個平均后取整的數(shù)字 × 參與個數(shù); 返回第一步; 持續(xù)下去

可以否?
作者: xunen    時間: 2010-11-18 14:22
100 萬個隨機(jī)分布在 0~2^31之間的int 類型整數(shù),這些數(shù)存放在哪里?
如果已經(jīng)在內(nèi)存里了,那么直接全部相加 ...
zzyong08 發(fā)表于 2010-11-18 13:14


這些數(shù)不在內(nèi)存里,還能放在那里?

“如果已經(jīng)在內(nèi)存里了,那么直接全部相加 ...”? 不懂
作者: zzyong08    時間: 2010-11-18 22:28
回復(fù) 8# xunen


    還可能在文件里,在數(shù)據(jù)庫里。我的意思是,用最簡單的邏輯,sum(100萬個數(shù))/100萬,得出平均值。這個直接計算,并不慢。
    倒是求和溢出,是個問題,使用uint64_t表示和數(shù),可以避免溢出。
作者: xunen    時間: 2010-11-23 10:30
如果是不支持 uint64_t 類型的機(jī)器呢?
作者: cjaizss    時間: 2010-11-23 10:31
如果是不支持 uint64_t 類型的機(jī)器呢?
xunen 發(fā)表于 2010-11-23 10:30



    如果沒有這樣的整形直接在C語言里支持,那么就去模擬一個,不難
作者: tgl10    時間: 2010-11-23 10:37
求的平均數(shù)也是整數(shù)吧,如果是浮點數(shù)有浮點數(shù)算法庫
作者: xunen    時間: 2010-11-23 10:39
哦,謝謝。那基本上 這題可以這樣解答了:

使用uint64_t表示和數(shù),可以避免溢出。如果機(jī)器不支持 uint64_t 類型,可以去模擬一個。

如果 數(shù)很大,精度要求不是很高,可以每次求兩個數(shù)的平均值(注意溢出問題),到最后就是所有的平均值。
作者: zongyaotang    時間: 2010-11-23 15:19
本帖最后由 zongyaotang 于 2010-12-05 15:24 編輯

回復(fù) 3# bladmin

本算法要預(yù)先知道數(shù)據(jù)的個數(shù)。
逐個取數(shù),
到剛大于數(shù)據(jù)個數(shù)時就除出商來
累加商,余數(shù)繼續(xù)和取數(shù)相加,
重復(fù)該過程
累加商就是結(jié)果,最后的余數(shù)即結(jié)果的余數(shù)


#!/bin/bash
# 求 sam 文件中值的平均

BL="1 3 7 4 6 23 45 67"

echo $BL | tr ' ' '\n' > sam
CX=`wc -l sam | awk '{print $1}'`
awk -v CNT=$CX 'BEGIN { res=0; acc=0}
{       res += $1
        if(res >= CNT)
        {       m = res % CNT
                acc += ((res - m) / CNT)
                res = m
        }
}END{ printf("有 %d 個數(shù)        均值=%d 余數(shù)=%d\n", CNT, acc, res)}' < sam
exit
作者: jhui66    時間: 2010-12-05 11:18
在線等算法達(dá)人出現(xiàn)




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2