Préface
Maintenant, les applications ne font que monter après une pluie et planent. Expérimentés, inexpérimentés, qualifiés et non qualifiés veulent tous démarrer une entreprise. Plus de 90% des entrepreneurs doivent créer une application, ce qui semble être devenu la configuration standard de l'entrepreneuriat.
Une fois que vous avez créé une application, vous devez la promouvoir. Comment le promouvoir? L'envoi de coupons est la chose la plus indispensable. Désormais, de nombreux produits ou opérations exigent que le montant des coupons soit émis au hasard, mais il ne peut pas être trop aléatoire. Tous les coupons sont-ils envoyés? L'argent des investisseurs, non?
Par conséquent, en quantité générée aléatoirement, il est nécessaire que la probabilité de petites quantités soit plus élevée et que la probabilité de grandes quantités soit plus petite. Par exemple, 70% de 3 yuans, 25% de 5 yuans et 5% de 10 yuans. Que dois-je faire si je génère des coupons avec ce type de probabilité?
Pour les questions ci-dessus, il ne suffit pas d'utiliser notre Random.Next (plage entière); directement. Parce que ce pseudo-aléatoire n'est pas pondéré, la probabilité de 3, 5 et 10 apparaissant est la même.
Idées de mise en œuvre
Prenons l'exemple ci-dessus. La probabilité de 3 apparaissant est de 70%. Nous lui attribuons un poids de 70. La probabilité de 5 apparaissant est de 25. Nous lui attribuons un poids de 25. La probabilité de 10 apparaît est de 5%. Nous lui attribuons un poids de 5.
Nous calculons la somme des poids dans l'ordre, utilisons la valeur avant la somme des poids qui apparaissent dans le nombre actuel comme valeur de point de départ de sa plage de poids, et utilisons la valeur après la somme comme valeur de point final de sa plage de poids.
De cette façon, nous pouvons utiliser Random.Next (100) pour faire des nombres aléatoires, puis juger de la plage dans laquelle les nombres aléatoires tombent, puis mappent à la valeur de coupon correspondante.
Implémentation Java
Package com.nggirl.test.weight.random; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.random; public class pesertrandom {public static main Main (string [] args) {peserrandom wr = newsprandom (); wr.inTight (new String [] {"1", "2", "3", "4"}, nouvel entier [] {100,100,200,600}); random r = new random (); for (int i = 0; i <10; i ++) {entier rv = R.Nextint (wr.getMaxrandomValue ()); System.out.println (RV); System.out.println (wr.getElementByrandomValue (RV) .getKey () + "" + RV);} hashmap <string, keycnt. 0); keyCount.put ("2", 0); keyCount.put ("3", 0); keyCount.put ("4", 0); for (int i = 0; i <10000; i ++) {Integer rv = r.nextint (wr.getMaxrandomValue ()); string key = wr.getElementByRandomValue (rv) .getKey (); keyCount.put (key, keyCount.get (key) .intvalue () + 1);} system.out.println ("");} liste privée <Eightelement> WeightElements; Init Void Public (String [] Keys, intégration [] Weights) {if (keys == Null | poids = poids | keys.length! = weats.length) {return;} lourdements = new ArrayList <Eightelement> (); for (int i = 0; i <keys.length; i ++) {WeightElements.add (new Weightelement (keys [i], poids [i]));} plageweightElemns (); printvs ();} private void plageweightElemnst () {if (WeightElements.size () == 0) {return;} WeightElement ele0 = WeightElements.get (0); ele0.setThresholdLow (0); ele0.setThresholdHigh (ele0.getweight ()); pour (int i = 1; i <weightElements.Size (); i ++) {weighteLelement cueilation = weightElements) Weightelements.get (i); poids pré-element = weights.get (i - 1); CUREMENT. La plage de poids est incrémentée de manière ordonnée, elle peut être changée en une recherche binaire pour (poids de poids e: poids de poids) {if (rv> = e.getThresholdLow () && rv <e.getThresholdHigh ()) {return e;}} return null;} public Integer getMaxrandomValue () {if (Weightelement 0) {return null;} return weatselements.get (Weightements.size () - 1) .getThresholdHigh ();} public void printrvs () {for (Weightelement e: WeightElements) {System.out.println (e.tostring ());}} classage static lourdet {/ ** * élément tag * / private String key; Poids entier; / ** * Le poids correspond à la plage de nombres aléatoires basses lignes * / thresholdlow entier privé; / ** * Le poids correspond à la plage de nombres aléatoires High Lines * / private entier thresholdhigh; public lourdement () {} public weteltelement (poids entier) {this.key = weight.toSTring (); this. poids = poids;} Public WeighteLelement (String. poids) {this.key = key; this.weight = poids;} public String getKey () {return key;} public void setKey (string key) {this.key = key;} public Integer getweight () {return Weight;} public void setweight (entier poids) {this.weight = poids;} public Integer GetThosholdLow () {return threreshLow; setThresholdlow (entier thresholdlow) {this.Thresholdlow = thresholdlow;} public Integer getThresholdHigh () {return thresholdhigh;} public void SetThresholdHigh (Public String Tostring () ")" + this.weight + "Low:" + this.Thresholdlow + "Height:" + this.ThresholdHigh;}}}résultat:
2 1028764 876
Mise en œuvre de la dichotomie
Public WeightElement getElementByRandomValue (entier RV) {if (rv <0 || rv> getMaxrandomValue () - 1) {return null;} // À l'heure 1; int index = weatselements.size () / 2; while (true) {if (rv <weatselements.get (index) .getThresholdLow ()) {end = index - 1;} else if (rv> = weightsElements.get (index) .getTheRsholdHigh ()) {start = index + 1;} else {return weightements.get (index);} index = index + 1;} else {return etelements.get (index);} index = (start + fin) / 2;}}Partageons un autre exemple ci-dessous pour renforcer la compréhension des algorithmes aléatoires de poids et soyez en place à la fois!
L'algorithme aléatoire de poids est largement utilisé dans des systèmes tels que la loterie, la planification des ressources, etc. Il s'agit d'une simple implémentation aléatoire selon le poids. Le poids est le rapport des hits de plusieurs objets aléatoires (catégorisés). Plus le réglage du poids est élevé, plus les coups sont plus faciles et la somme des coups ne peut pas être égale à 100;
Le code d'implémentation simple est le suivant:
Importer java.util.arraylist; import java.util.list; import java.util.random; public class wedertrandom {static list <eightCategory> catégories = new ArrayList <eightCategory> (); private static aléosh = new random (); public static void Initdata () {WeightCategory wc1 = newedcategory ("a", 60); wc2 = new WeightCategory ("b", 20); WeightCategory wc3 = new WeightCategory ("C", 20); catégories.add (wc1); catégories.Add (wc2); catégories.add (wc3);} public static void Main (String [] args) {initdata (); Integer WeightSum = 0; For (weightCatte {Weightsum + = wc.Getweight ();} if (Weightsum <= 0) {System.err.println ("Error: Weightsum =" + Weightsum.ToString ()); return;} entier n = random.nextint (Weightsum); // n dans [0, Weightsum) enter n <m + wc.Getweight ()) {System.out.println ("Cette catégorie aléatoire est" + wc.GetCategory ()); Break;} m + = wc.Getweight ();}}} classe WeightCategory {Private String Catégorie {super (); this.setCategory (catégorie); this.setweight (poids);} public Integer getweight () {return Weight;} public void setwexe (Integer Weight) {this.weight;} public String GetCategory (this.category = catégorie;}résultat:
Résumer
Ce qui précède est le contenu complet de cet article sur la mise en œuvre de l'algorithme aléatoire de poids en langue java. J'espère que ce sera utile à tout le monde. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!