Math :: Runde :: Messe

Rundungsfehler fair verteilen
Jetzt downloaden

Math :: Runde :: Messe Ranking & Zusammenfassung

Anzeige

  • Rating:
  • Lizenz:
  • Perl Artistic License
  • Preis:
  • FREE
  • Name des Herausgebers:
  • Marc Mims
  • Website des Verlags:
  • http://search.cpan.org/~mmims/

Math :: Runde :: Messe Stichworte


Math :: Runde :: Messe Beschreibung

Verteilen Sie Rundungsfehler ziemlich Math :: :: Round Fair ist ein Perl-Modul, die eine einzige, exportierbare Funktion liefert, round_fair, die einen ganzzahligen Wert zuordnet, gerecht zu verteilen errors.round_fair Runden Aufrunden oder unten, zufällig, wo die Wahrscheinlichkeit aus Rundungs gleich die Fraktion zu runden. Zum Beispiel wird round_fair 0,5 bis 1,0 mit einer Wahrscheinlichkeit von 0,5 abzurunden. Es wird rund 0,3 bis 1,03 aus 10-mal und auf Null 7 von 10-mal, am average.Consider das Problem ein unteilbares Element verteilen, zum Beispiel einen Penny, über drei gleichmäßig gewichtet Konten, A, B und C. Mit einem naiven Ansatz, keines der Konten wird eine Zuteilung erhalten, da der zugewiesenen Teil zu jeweils 1/3 und 1/3 Runden auf Null. Wir mit 1 nicht zugeordneten item.Another Ansatz bleiben ist die Basis bei jedem Schritt anzupassen. Wir beginnen mit 1 Punkt auf 3 Konten zuzuordnen. 1/3 Runden auf 0, Konto so A keine Zuteilung erhält, und wir fallen sie aus der Betrachtung. Jetzt haben wir zwei Konten und ein Element zuzuordnen. 1/2 Runden auf 1, so dass wir 1 Punkt vergeben keine Zuordnung berücksichtigen B. Konto C bekommt, da es nichts zu allocate.But übrig ist, was passiert, wenn wir ein Element zum gleichen zuteilen drei Konten 10.000 Mal? Idealerweise sollten zwei Konten mit 3.333 Artikeln enden und man soll mit 3334 items.Using dem naiven Ansatz am Ende alle drei Konten bei jeder Runde keine Zuteilung erhalten, da die Zuweisung 1/3, welche Runden auf Null. Unter Verwendung der zweiten Methode Konto A und Konto C keine Zuteilung erhalten, und Konto B eine Gesamtzuweisung von 10.000 Artikeln erhalten. Account B erhält immer der Nutzen des Rundungsfehlers der zweiten method.round_fair unter Verwendung verwendet einen Algorithmus, mit dem Zufall eine faire Verteilung von Rundungsfehlern zu gewährleisten. In unserem Beispiel Problem, wir mit 1 Punkt zu vergeben starten. Wir berechnen Konto A-Aktie, 1/3. Da es weniger als ein Element ist, geben wir ihm eine 1/3 Chance Aufrundung (und daher eine 2/3 Chance Abrunden). Es gewinnt die Zuteilung 1/3 der Zeit. 2/3 der Zeit, die wir nach B weiter berechnen wir B Zuteilung als 1/2 (da es nur zwei Konten verbleiben und ein Element zuordnen). B Runden bis 1/2 von 2/3 (oder 1/3) der Zeit und ab 1/2 von 2/3 (oder 1/3) der Zeit. Wenn weder A noch B abrundet (die 2/3 * 1/2 auftritt, oder 1/3 der Zeit), ist C die Zuordnung als 1/1 berechnet, da wir ein Element haben zuzuordnen und nur ein Konto zu ordnen es . Also, 1/3 der Zeit C empfängt den Vorteil der Rundungsfehler. Wir beenden nie auf mit allen nicht zugewiesenen items.This Arbeiten für eine beliebige Anzahl von gewichteten allocations.round_fair-Algorithmus ($ value, @weights) Gibt eine Liste von Integer-Werten, die Summe auf $ Wert, bei dem jeder Rückgabewert ein Teil von $ Wert zugewiesen ist durch die jeweiligen Gewichte in @weights. Die Anzahl der Rückgabewerte ist gleich der Anzahl der Elemente in @weights $ Wert eines integer.SYNOPSIS Verwendung Math :: Round :: Fair round_fair sein muss; my $ Cent = 7; Mein @weights = (1, 2, 3, 2, 1); mein @allocation = round_fair ($ cents, @weights); print @allocation ; # Ausgang wird einer der folgenden sein: # 01 32 1 # 02 22 1 # 02 31 1 # 02 32 0 # 11 22 1 # 11 31 1 # 11 32 0 # 12 21 1 # 12 22 0 meine @total; für (1..900) {@allocation = round_fair ($ cents, @weights); @total + = @allocation für 0 .. $ # Zuteilung;} drucken @total ; # Ausgegeben wird * in der Nähe von * 700140021001400700, z.B .: # 698141120961418677 Voraussetzungen: · Perl.


Math :: Runde :: Messe Zugehörige Software