1. Определение проблемы:
Спросите массив. Пересечение
Например:
Код кода копирования следующим образом:
Вес: 8 2 11 79
Значение возвращается весом: 0 1 2 3
2. Анализ проблемы:
Идея 1: Создайте массив размера и веса размера и веса. Категория подталкивается по порядку.
Затем используйте случайное количество веса и размера для генерации случайных чисел. Недостатки должны занимать слишком много памяти.
Идея 2:
Вес и массив W [i] хранить сложность веса и времени всех элементов [0, i].
Случайный [0, W [399]]] Смотрите, какое время падает случайное число, в какое время O (Longn)
Таким образом, общая сложность сложности времени o (n) пространственная сложность o (n)
псевдокод:
Вращение азартных игр не является особенно хорошим вариантом, но их легко достичь.
Прежде всего, необходимо понять, что из -за перекрестной и других операторов направление эволюции нельзя контролировать, поэтому сильная ответственность за эволюцию лежит на операторе отбора.
Если вы это понимаете, это легко сделать.
Вращение азартных игр состоит в том, чтобы накапливать вероятность его достижения.
Если: FIT - это адаптация массива, общий код M -копии заключается в следующем:
для i = 1 до м '
Sum = sum+fit (i)
Далее я
Ибо i = от 1 до n 'n- сколько людей вы хотите генерировать?
Temp = temp + fit (i)
Если rnd <= temp / s
Вывод I - результат
Выходная функция
Конец, если
Далее я
В -третьих, решить проблему:
Код кода копирования следующим образом:
пакет данных;
Импортировать java.util.hashmap;
Импортировать java.util.map;
/**
Вес случайное число:
Если вес: 8 2 11 79
Значение возвращается весом: 0 1 2 3
@author ajian005 [email protected]
2014-2-16 21:12
Результаты выходных данных: {2,0 = 184128, 11,0 = 348551, 79,0 = 1308100, 8,0 = 159221}}
*/
открытый класс весом
Частный статический двойной [] weatherarrays = {8.0, 2.0, 11,0,79.0};
Public static void main (string [] args) {{
Весошь ввесе = новое взвешивание ();
Карта <двойной, целый integer> stat = new Hashmap <Double, Integer> ();
для (int i = 0; i <2000000; i ++) {
int weathervalue = woswtrandom.getWeightrandom (Weethararrays);
if (weetsvalue <0) {{{
продолжать;
}
System.out.println («Случайное число возвращается весом:» + weetsvalue);
if (stat.get (weatherarrays [weetsvalue]) == null) {
Stat.put (weatherarrays [weetsvalue], 1);
} Еще {
stat.put (weatherarrays [weetsvalue], stat.get (weethrarrays [weetsvalue])+1);
}
}
System.out.println (stat);
}
}
класс Вестерндом {
java.util.random r = new java.util.random ();
Приватный двойной watcharraysum (двойной [] watcharrays) {{
двойная веса = 0;
Для (двойной весовой кости: weetararrays) {
Веса += WeightValue;
}
Вернуть веса;
}
Public int getweightrandom (двойной [] watcharrays) {{{
двойная веса = weatherarraysum (weatherarrays);
Double Spearweensum = 0;
для (int i = 0; i <watedarrays.length; i ++) {
Степень веса += weatherarrays [i];
if (math.random () <= Степень веса/веса) {
//System.out.println (i);
Вернуть я;
}
}
System.out.println ("ошибка");
Возврат -1;
}
}
В -четвертого, резюме:
Российские круглые азартные игры - это накапливать вероятность достижения
Запланирование зависимой нагрузки и т. Д.