Math :: Rond :: Fair

Distribueer afrondfouten eerlijk
Download nu

Math :: Rond :: Fair Rangschikking & Samenvatting

Advertentie

  • Rating:
  • Vergunning:
  • Perl Artistic License
  • Prijs:
  • FREE
  • Naam uitgever:
  • Marc Mims
  • Uitgever website:
  • http://search.cpan.org/~mmims/

Math :: Rond :: Fair Tags


Math :: Rond :: Fair Beschrijving

Distribueer de afrondingsfouten eerlijk Math :: Round :: Fair is een Perl-module die een enkele, exporteerbare functie, round_fair biedt, die een geheel getal-waarde toewijst, redelijk verspreidende afrondingsfouten. Rond, willekeurig, waar de kans op afronding op en neer is de fractie tot rond. Round_fair zal bijvoorbeeld 0,5 tot 1,0 rondlopen met een kans van 0,5. Het zal 0,3 tot 1,03 van de 10 keer rondlopen en tot nul 7 van de 10 keer, gemiddeld het probleem van het distributie van een ondeelbaar item, bijvoorbeeld een cent, in drie gelijkmatig gewogen rekeningen, A, B en C. Met behulp van een naïeve benadering ontvangt geen van de rekeningen een toewijzing, aangezien het toegewezen gedeelte aan elk 1/3 en 1/3 rondes naar nul is. We zijn achtergelaten met 1 niet-toegewezen artikel. Andere benadering is om de basis bij elke stap aan te passen. We beginnen met 1 item om toe te wijzen aan 3 accounts. 1/3 rondes tot 0, dus account A ontvangt geen toewijzing, en we vallen het van overweging. Nu hebben we 2 accounts en één item om toe te wijzen. 1/2 rondes naar 1, dus wij wijzen 1 item toe aan Account B. Account C krijgt geen toewijzing, omdat er niets meer is om toe te wijzen. Maar wat er gebeurt als we een artikel 10.000 keer aan dezelfde drie rekeningen toewijzen? Idealiter moeten twee rekeningen eindigen met 3,333 items en men zou moeten eindigen met 3,334 items. Gebruik van de naïeve aanpak, ontvangen alle drie de rekeningen geen toewijzing, omdat in elke ronde de toewijzing 1/3 is die naar nul ronden. Met behulp van de tweede methode ontvangt rekening A en Account C geen toewijzing en ontvangt rekening B een totale toewijzing van 10.000 items. Account B krijgt altijd het voordeel van de afrondingsfouten met behulp van de tweede methode.Round_fair gebruikt een algoritme met willekeurig om een eerlijke verdeling van afrondingsfouten te garanderen. In ons voorbeeldprobleem beginnen we met 1 item om toe te wijzen. We berekenen account A's aandeel, 1/3. Omdat het minder dan één artikel is, geven we het een 1/3 kans om af te ronden (en daarom een 3/3 kans om af te ronden). Het wint de toewijzing 1/3 van de tijd. 2/3 van de tijd die we doorgaan met B. We berekenen B's toewijzing als 1/2 (omdat er nog maar 2 rekeningen zijn en één item om toe te wijzen). B ronden 1/2 van 2/3 (of 1/3) van de tijd op en neer op 1/2 van 2/3 (of 1/3) van de tijd. Als noch een noch b-ronden (die 2/3 * 1/2 of 1/3 van de tijd optreedt), wordt C's-toewijzing berekend als 1/1, aangezien we één item hebben om het toe te wijzen aan het toe te wijzen aan . Dus, 1/3 van de tijd C ontvangt het voordeel van de afrondingsfout. We eindigen nooit met een niet-toegewezen items. Dit algoritme werkt voor een willekeurig aantal gewogen toewijzingen.Round_fair ($ -waarde, @weights) retourneert een lijst met integerwaarden die zoom tot $ waarde wanneer elke retourwaarde een deel van de toegewezen retourwaarde is de respectieve gewichten in @weights. Het aantal retourwaarden is gelijk aan het aantal elementen in @weights $ -waarde moet een integer.synopsis zijn. Gebruik Math :: Round :: Fair 'Round_Fair'; mijn $ cent = 7; mijn @weights = (1, 2, 3, 2, 1); mijn @Aldocation = round_fair ($ cents, @weights); Print "@Allocatie "; # Uitgang is een van de volgende: # 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 Mijn @Total; voor (1..900) {@Allocatie = rond_fair ($ cents, @weights); @total + = @Allocatie voor 0 .. $ # toewijzing;} print "@total "; # Uitgang is * in de buurt van * 700140021001400700, bijvoorbeeld: # 698141120961418677 Vereisten: · Perl


Math :: Rond :: Fair Gerelateerde software