Prefácio
Agora, os aplicativos estão apenas surgindo depois de uma chuva e estão subindo. Experiente, inexperiente, qualificado e não qualificado, todos desejam iniciar um negócio. Mais de 90% dos empreendedores precisam criar um aplicativo, o que parece ter se tornado a configuração padrão para o empreendedorismo.
Depois de fazer um aplicativo, você precisa promovê -lo. Como promovê -lo? Enviar cupons é a coisa mais indispensável. Agora, muitos produtos ou operações exigem que a quantidade de cupons seja emitida aleatoriamente, mas não pode ser muito aleatória. Todos os cupons são enviados? O dinheiro dos investidores, certo?
Portanto, na quantidade gerada aleatoriamente, é necessário que a probabilidade de pequenas quantidades seja maior e a probabilidade de grandes quantidades seja menor. Por exemplo, 70% de 3 yuan, 25% de 5 yuan e 5% de 10 yuan. O que devo fazer se gerar cupons com esse tipo de probabilidade?
Para as perguntas acima, não basta usar nosso aleatório. diretamente. Como esse pseudo-aleatório não é ponderado, a probabilidade de 3, 5 e 10 aparecendo é a mesma.
Idéias de implementação
Vamos dar o exemplo acima. A probabilidade de 3 aparecer é de 70%. Atribuímos a ele um peso de 70. A probabilidade de 5 aparecer é 25. Atribuímos a ele um peso de 25. A probabilidade de 10 aparece é de 5%. Nós atribuímos um peso de 5.
Calculamos a soma dos pesos em ordem, usamos o valor antes da soma dos pesos que aparecem no número atual como o valor do ponto de partida de sua faixa de peso e usamos o valor após a soma como o valor do ponto final de sua faixa de peso.
Dessa forma, podemos usar aleatoriamente.next (100) para criar números aleatórios e, em seguida, julgar o intervalo em que os números aleatórios caem e depois mapearem o valor do cupom correspondente.
Implementação de Java
pacote com.nggirl.test.weight.random; importar java.util.arraylist; importar java.util.hashmap; importar java.util.list; importar java.util.random; public class WrnTrandom {public static void main ([] args) {pesagem wratrand = peskTrandom {public static void main ([] args) {pesagem wr = wratrand) String [] {"1", "2", "3", "4"}, novo inteiro [] {100.100.200.600}); aleatório r = new Random (); para (int i = 0; i <10; i ++) {Integer rv = r.NextInt (wr.getMaxRandomValue ()); System.out.println (rv); System.out.println (wr.getElementByRandomValue (rv) .getKey () + "" + rv);} hashmap <string) keycount = new (string); 0); keyCount.put ("2", 0); keyCount.put ("3", 0); keycount.put ("4", 0); para (int i = 0; i <10000; i ++) {keyer rv = r.NextInt (wr.getMaxRandomValue ()); keycount.get (key) .IntValue ()+1);} System.out.println ("");} Lista privada <EightElement> weightElements; public void initweight (String [] teclas, inteiro [] pesos! ArrayList <EightElement> (); para (int i = 0; i <keys.length; i ++) {weightElements.add (novo peso (chaves [i], pesos [i]));} rangeweightEnMents (); peso (pondeia); (pondeia); = weightElements.get (0); ele0.setthresholdLow (0); ele0.setthresholdhigh (ele0.getweight ()); para (int i = 1; i <weightElements.size (); i ++) {weightElement curaLement = weightElements.get (i); pesos; 1); cUreLement.SetThresholdLow (preelement.gethresholdhigh ()); curelement.setthresholdhigh (currelement.gethresholdlow () + currelement.getweight ();}}} ponderação pública getElementbyMentByMent (Integer RV); (WeightElement E: WeightElements) {if (rv> = e.getthresholdLow () && rv <e.getthresholdHigh ()) {return e;}} retorna null;} public integer getMaxRandomValue () {if (peso -refert) Return; WeightElements.get (WeightElements.size () - 1) .gethresholdHigh ();} public void Printrvs () {for (WeightElement E: WeightElements) {System.out.println (e.toString ()); alcance de números aleatórios linhas baixas*/limite inteiro privado;/***O peso corresponde ao intervalo de números aleatórios altos linhas*/inteiro privado limite de altura; public weightElement () {} public weightElement (peso inteiro) {thisKey.Key = weight.ToString () mais. peso;} public string getKey () {return key;} public void setKey (string key) {this.key = key;} public integer getWeight () {return weight;} public void Setweight (peso inteiro) {this.weight = peso;} public integherrShresholdLow () {Returnwollow {this.ThresholdLow = limiarolllow;} public integer getthresholdHigh () {retorna limiteholdhigh;} public void setthresholdhigh (limite inteiro de altura) {this.ThresholdHigh = limholdhigh; Baixa: "+this.thresholdlow+" altura: "+this.thresholdhigh;}}}resultado:
2 1028764 876
Implementação de dicotomia
public WeightElement getElementByRandomValue (Inteiro RV) {if (rv <0 || rv> getMaxRandomValue () - 1) {return null;} // Neste momento, o RV deve estar no intervalo de 0 - getMaxrandomValue () - 1, // isto é, deve ser o que deve ser o que deve ser o que deve ser o que deve ser o que é o número de 1; weightElements.size ()/2; while (true) {if (rv <weightElements.get (index) .gethresholdLow ()) {end = index - 1;} else if (rv> = weightElements.get (index) .getthholdhigh ()) {start = 1;} else {returnents.get).Vamos compartilhar outro exemplo abaixo para fortalecer o entendimento dos algoritmos aleatórios de peso e estar em vigor de uma só vez!
O algoritmo aleatório de peso é amplamente utilizado em sistemas como loteria, programação de recursos, etc. É uma implementação aleatória simples de acordo com o peso. O peso é a proporção de acertos de vários objetos aleatórios (categorizados). Quanto maior a configuração de peso, mais fáceis os acertos e a soma dos acertos não podem ser iguais a 100;
O código de implementação simples é o seguinte:
importar java.util.ArrayList; importar java.util.list; importar java.util.random; public class Weightrandom {Lista estática <EstemCategory> categorias = novo ArrayList <Eightcategory> (); Categoria de peso ("A", 60); categoria de peso wc2 = nova categoria de peso ("b", 20); categoria de peso wc3 = nova categoria de peso ("c", 20); categorys.add (wc1); categorys.add (wc2); categorias.add (wc3); hots; 0; para (categoria de peso WC: categorias) {WeightSum + = wc.getweight ();} if (peso <= 0) {System.err.println ("erro: peso =" + weightSum.toString ()); retornar;} integger n = Random.nextInt (peso); WC: categorias) {if (m <= n && n <m +wc.getweight ()) {System.out.println ("Esta categoria aleatória é" +wc.getCategory ()); break;} m += private inteiro inteiro; Weightcategory (categoria de sequência, peso inteiro) {super (); this.setCategory (categoria); this.setweight (peso);} public integer getWeight () {return weight;} public void Setweight (peso inteiro) {this.weight = weight;} public string getCateory () {Returny; categoria;}}resultado:
Resumir
O exposto acima é o conteúdo completo deste artigo sobre a implementação do algoritmo aleatório do peso da linguagem Java. Espero que seja útil para todos. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!