Kata pengantar
Sekarang aplikasi baru saja muncul setelah hujan, dan melonjak keluar. Semua yang berpengalaman, tidak berpengalaman, berkualitas, dan tidak memenuhi syarat semua ingin memulai bisnis. Lebih dari 90% pengusaha perlu membuat aplikasi, yang tampaknya telah menjadi konfigurasi standar untuk kewirausahaan.
Setelah membuat aplikasi, Anda harus mempromosikannya. Bagaimana cara mempromosikannya? Mengirim kupon adalah hal yang paling diperlukan. Sekarang banyak produk atau operasi yang mengharuskan jumlah kupon dikeluarkan secara acak, tetapi tidak bisa terlalu acak. Apakah semua kupon dikirim? Uang investor, bukan?
Oleh karena itu, dalam jumlah yang dihasilkan secara acak, diperlukan bahwa probabilitas jumlah kecil harus lebih besar, dan probabilitas jumlah besar harus lebih kecil. Misalnya, 70% dari 3 yuan, 25% dari 5 yuan, dan 5% dari 10 yuan. Apa yang harus saya lakukan jika saya menghasilkan kupon dengan probabilitas semacam ini?
Untuk pertanyaan di atas, tidak cukup menggunakan acak kami (rentang integer); secara langsung. Karena pseudo-acak ini tidak tertimbang, probabilitas 3, 5, dan 10 muncul sama.
Ide Implementasi
Mari kita ambil contoh di atas. Probabilitas 3 penampilan adalah 70%. Kami menetapkan berat 70. Probabilitas 5 yang muncul adalah 25. Kami menetapkan berat 25. Probabilitas 10 muncul adalah 5%. Kami menetapkan berat 5.
Kami menghitung jumlah bobot secara berurutan, menggunakan nilai sebelum jumlah bobot yang muncul dalam angka saat ini sebagai nilai titik awal dari kisaran beratnya, dan menggunakan nilai setelah jumlah sebagai nilai titik akhir dari kisaran beratnya.
Dengan cara ini, kita dapat menggunakan acak.
Implementasi Java
Paket com.nggirl.test.weight.random; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.random; weildrandom kelas public {public static main (string [] args) {weil weildandom WR. String [] {"1", "2", "3", "4"}, integer baru [] {100.100.200.600}); acak r = acak baru (); untuk (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, Integer> keyCount = new HashMap<String, Integer>();keyCount.put("1", 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 = r.nextInt (wr.getmaxrandomValue ()); string key = r.nextInt (wr.getmaxrandomValue ()); string key = r.nextInt (wr.getmaxrandomValue ()); wr.getElementByRandomValue(rv).getKey();keyCount.put(key, keyCount.get(key).intValue()+1);}System.out.println("");}private List<WeightElement> weightElements;public void initWeight(String[] keys, Integer[] weights){if(keys == null || weights == null || Keys.length! = Weights.length) {return;} weightelements = new ArrayList <BOODELEMENT> (); for (int i = 0; i <keys.length; i ++) {weightelements.add (bobotelement baru (i], weights [i]));} rangeweightelement (Keys [i], weights [i]));} rangeWeightelemnts (Keys [i], weights [i]));} rangeWeightelemnts (), prinrts (i]; rangeWeightElemnts () {if (weighteLements.size () == 0) {return;} weightelement ele0 = weightelements.get (0); ele0.setThresholdlow (0); ele0.setThresholdhigh (eLe0.get weight ()); for (int i = 1; i <bobotelserementhighhigh (eLe0.get weight ()); for (int i = 1; i <boboteelserementhighhigh (eLe0.get weight ()); for (int i = 1; i <boboteelserements (eLe0.get weight ()); for (int i = 1; i <boboteels weightelements.get (i); bobotelement preelement = weightelements.get (i - 1); Curelement.setThresholdLow (preelement.getThresholdHigh ()); Curelement.setThresholdHigh (Curelement.getThresholdlow () + Curelement.getweight ());}} {{{{{) Curelement (); {{{{{{) {{{{{{) {{{{{{{) Publice () Kisaran berat badan bertambah dengan cara yang tertib, dapat diubah menjadi pencarian biner untuk (bobotelement e: bobotelements) {if (rv> = e.getThresholdlow () && rv <e.getThresholdHigh ()) {return e;}} return null;} null null null; null null; i {i {i {{null null. 0) {return null;} return weightelements.get (weighteLements.size () - 1) .getThresholdHigh ();} public void printrvs () {for (bobotelement e: bobotelements) {System.out.println (e.toString ());}} static class class bobotel {e.toString ());}} static class class class boboteler {e.toString ()); Bobot integer;/*** Berat sesuai dengan kisaran angka acak garis rendah*/thresholdlow integer pribadi;/*** Berat sesuai dengan kisaran angka acak lini tinggi*/private integer thresholdhighHigh; bobotelement publik () {} bobotelement publik (bobot integer) {this.key = bobote.tostring (); bobotelement publik (bobot public) {this.key = weight.tostring (); weight){this.key = key;this.weight = weight;}public String getKey() {return key;}public void setKey(String key) {this.key = key;}public Integer getWeight() {return weight;}public void setWeight(Integer weight) {this.weight = weight;}public Integer getThresholdLow() {return thresholdLow;}public void setThresholdLow (integer thresholdlow) {this.thresholdlow = thresholdlow;} public integer getThresholdHigh () {return thresholdhigh;} void setThresholdHigh (oMerPreshigh (thresholdhigh (thresholdhigh) {theshresholdHigh = thresholdhigh;} publypy ({this.thresholdHigh = thresholdhigh;} publypy ({this.thresholdHigh = thresholdhigh; +this.weight+"Low:"+this.thresholdlow+"Height:"+this.thresholdHigh;}}}hasil:
2 1028764 876
Implementasi dikotomi
public WeightElement getElementByRandomValue(Integer rv){if(rv < 0 || rv > getMaxRandomValue()-1){return null;}//At this time, rv must be in the range of 0 - getMaxRandomValue()-1, // That is, it must be able to hit a certain value int start = 0, end = weightElements.size() - 1; int index = bobotElements.size ()/2; while (true) {if (rv <weighteLements.get (index) .getThresholdLow ()) {end = index - 1;} lain jika (rv> = bobotelements.get (index) .getThresholdHigh ()) {start = index = 1;} {index) .getThresholdhigh ()) {start = index = 1;} {index) .getRresholdHigh ()) {start = index = ower +} {indeks) .getElements. akhir)/2;}}Mari kita bagikan contoh lain di bawah ini untuk memperkuat pemahaman tentang algoritma acak berat, dan berada di tempatnya sekaligus!
Algoritma acak berat banyak digunakan dalam sistem seperti lotre, penjadwalan sumber daya, dll. Ini adalah implementasi acak sederhana sesuai dengan berat. Berat adalah rasio hit dari beberapa objek acak (dikategorikan). Semakin tinggi pengaturan berat, semakin mudah hit, dan jumlah hit tidak dapat sama dengan 100;
Kode implementasi sederhana adalah sebagai berikut:
Impor java.util.arraylist; impor java.util.list; impor java.util.random; kelas publik weighttrandom {statis daftar <weightcategory> kategori = new arraylist <weightcategory> (); private static acak = new acak (); public static void initdata () {) {boboter private static random = new random (); public static void initdata () {) {bobotker private static = new random (); public static void initiData () {) {bobotk Kategori Weight ("A", 60); Weightcategory WC2 = Newkategori baru ("B", 20); Kategori Weight WC3 = Kategori Berat Besar Baru ("C", 20); Categorys.Add (WC1); Kategori. 0; for (Weightcategory WC: Categories) {Weightsum + = wc.getweight ();} if (weightsum <= 0) {System.err.println ("Kesalahan: Weightsum =" + Weightsum.tostring ()); return;} integer n = random.nextint (weightsum); //// return;} integer n = random.nextint (weightsum);/// return;} integer n = random. : Kategori) {if (m <= n && n <m +wc.getweight ()) {System.out.println ("Kategori acak ini adalah" +wc.getCategory ()); break;} m += wc.getweight ();}} {private string Category; publicing; publicing; publicing publicing (public publicing () {private String Category; private Integore (); category, Integer weight) {super();this.setCategory(category);this.setWeight(weight);}public Integer getWeight() {return weight;}public void setWeight(Integer weight) {this.weight = weight;}public String getCategory() {return category;}public void setCategory(String category) {this.category = category;}}hasil:
Meringkaskan
Di atas adalah konten lengkap dari artikel ini tentang implementasi algoritma acak bobot bahasa Java. Saya harap ini akan membantu semua orang. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!