Das Folgende wird bereitgestellt von Die Kolumne „Golang-Tutorial“ stellt Golang vor, wie er den Double-Mean-Algorithmus und die Methode zum Ergreifen roter Umschläge implementiert. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!
Jeder kennt sicherlich das Ergreifen roter Umschläge, aber haben Sie jemals darüber nachgedacht, wie das Ergreifen roter Umschläge gelingt?
Zuerst müssen wir die Anforderungen und die Randbedingungen der Anforderungen klären. Es gibt drei Hauptbeschränkungen für rote Umschläge: a. Der Gesamtbetrag ist die Gesamtmenge der roten Umschläge, nicht mehr oder weniger. b Der Mindestwert beträgt 0,01 Yuan, das heißt, jeder hat einen Anteil
c. Die Anzahl der roten Umschläge, die jede Person ergreift, sollte so gleichmäßig wie möglich sein
Nehmen wir an, dass der Gesamtbetrag M Yuan beträgt, N Personen, der Betrag jeder Ergreifung = (0, (M/N) *2), Zum Beispiel wurden die gleichen Bedingungen zuvor erwähnt, der Betrag ist 100, die Anzahl der Personen ist 10,
Der Betrag, den die erste Person gepackt hat, ist (0, 20) und der erfasste Wert sollte gemäß der Normalverteilung bei etwa 10 liegen, was viel niedriger ist als Die Wahrscheinlichkeit von 10 ist sehr klein, und die Summe der Wahrscheinlichkeit, viel größer als 10 zu sein, ist auch hier sehr klein Wir gehen davon aus, dass der Wert, den die erste Person ergreift, 10 ist;
Der Betrag, den die zweite Person ergreift, ist (0,90/9 *2)= (0,20), derselbe wie die erste Person, die zweite Der Betrag des roten Umschlags einer Person sollte ebenfalls etwa 10 betragen;
Der Rest der Leute und so weiter.
Ich habe „Architektonisches Design der roten WeChat-Umschläge“ überprüft und diese Methode wird darin verwendet. Dieser Algorithmus ist jedoch nicht perfekt. Wenn die erste Person 15 erreicht, beträgt der Bereich der zweiten Person (0,18,89). Wenn die zweite Person einen hohen Wert erreicht, ist dies schädlich für die Personen dahinter >Schauen wir uns an, wie es in golang geht. Implementieren Sie diesen Double-Mean-Algorithmus p>
package mainimport ( "fmt" "math/rand" "time")func main() { //10个人 抢10000分 也就是10个人抢100块钱 count,amount := int64(10),int64(10000) remain := amount sum := int64(0) for i := int64(0);i<count;i++ { x := DoubleAverage(count-i, remain) remain -= x sum += x fmt.Println(i+1,"=",float64(x)/float64(100),", ") } fmt.Println() fmt.Println("总和是:",sum)}//提前定义能抢到的最小金额1分var min int64 = 1//二倍均值算法func DoubleAverage(count,amount int64) int64 { if count == 1 { return amount } //计算出最大可用金额 max := amount - min*count //计算出最大可用平均值 avg := max / count //二倍均值基础上再加上最小金额 防止出现金额为0 avg2 := 2 * avg + min //随机红包金额序列元素,把二倍均值作为随机的最大数 rand.Seed(time.Now().UnixNano()) x := rand.Int63n(avg2) + min return x}Nach dem Login kopierenSehen Sie sich die Ergebnisse an:
Das obige ist der detaillierte Inhalt vonGolang implementiert den Double-Mean-Algorithmus und die Methode zum Erfassen roter Umschläge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!