1. تعريف المشكلة:
اسأل صفيف. التقاطع
على سبيل المثال:
نسخ رمز رمز على النحو التالي:
الوزن: 8 2 11 79
القيمة التي تم إرجاعها بالوزن: 0 1 2 3
2. تحليل المشكلة:
الفكرة 1: إنشاء مجموعة من حجم ووزن الحجم والوزن. يتم دفع الفئة بالترتيب.
ثم استخدم عدد عشوائي من الوزن والحجم لإنشاء أرقام عشوائية. يجب أن تشغل العيوب الكثير من الذاكرة.
الفكرة 2:
الوزن والمصفوفة مع [أنا] تخزين الوزن والتعقيد الزمني لجميع عناصر [0 ، أنا].
عشوائي [0 ، W [399]] انظر أي وقت ينخفض فيه الرقم العشوائي في أي وقت تعقيد O (Longn)
وبالتالي فإن التعقيد الإجمالي للوقت O (N) التعقيد المكاني O (N)
الكود الكاذب:
القمار الدوار ليس خيارًا جيدًا بشكل خاص ، ولكن من السهل تحقيقه.
بادئ ذي بدء ، من الضروري أن نفهم أنه بسبب المتقاطع والمشغلين وغيرهم من المشغلين ، لا يمكن التحكم في اتجاه التطور ، وبالتالي فإن المسؤولية الثقيلة للتطور هي على مشغل الاختيار.
إذا فهمت هذا ، فمن السهل القيام به.
القمار الدوار هو تجميع الاحتمال لتحقيق ذلك.
إذا كان: FIT هو تكييف المصفوفة ، فإن رمز رمز النسخ الإجمالي هو كما يلي:
لأني = 1 إلى م '
SUM = SUM+FIT (i)
التالي أنا
لأني = 1 إلى n 'n- كم عدد الأفراد الذين تريد توليده؟
temp = temp + fit (i)
إذا كان rnd <= temp / s
الإخراج أنا هو النتيجة
وظيفة الخروج
إنهاء إذا
التالي أنا
ثالثًا ، حل المشكلة:
نسخ رمز رمز على النحو التالي:
حزمة داتنة.
استيراد 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}}
*/
الطبقة العامة enterntest {
مزدوج الثابت الخاص [] {8.0 ، 2.0 ، 11.0،79.0} ؛
الفراغ الثابت العام الرئيسي (سلسلة [] args) {{
WENGTRANDOM WENGTRANDOM = NEW TENGRANDOM () ؛
الخريطة <double ، integer> stat = new hashmap <double ، integer> () ؛
لـ (int i = 0 ؛ i <2000000 ؛ i ++) {
int weightvalue = entertrandom.getWeightrandom (WeightArrays) ؛
if (WeightValue <0) {{
يكمل؛
}
System.out.println ("الرقم العشوائي الذي تم إرجاعه بواسطة الوزن:" + WeightValue) ؛
if (stat.get (WeightArrays [WeightValue]) == NULL) {
STAT.PUT (WeightArrays [WeightValue] ، 1) ؛
} آخر {
STAT.PUT (WeightArrays [WeightValue] ، Stat.get (WeightArrays [WeightValue])+1) ؛
}
}
System.out.println (STAT) ؛
}
}
فئة enterndom {
java.util.random r = new java.util.random () ؛
وزن مزدوج خاص (مزدوج [] الوزن) {{
الأوزان المزدوجة = 0 ؛
ل (وزن مزدوج: WeightArrays) {
الأوزان += وزن الوزن ؛
}
إرجاع الأوزان.
}
public int getweightrandom (double [] weightarrays) {{
الأوزان المزدوجة = WeightArraysum (WeightArrays) ؛
stepweightsum مزدوج = 0 ؛
لـ (int i = 0 ؛ i <wightarrays.length ؛ i ++) {
stepweightsum += weightarrays [i] ؛
if (math.random () <= stepweightsum/internsum) {
//system.out.println (i) ؛
العودة أنا ؛
}
}
System.out.println ("خطأ") ؛
العودة -1 ؛
}
}
رابعا ، ملخص ملخص:
المقامرة الجولة الروسية هي تجميع الاحتمال لتحقيق
جدولة الحمل التابعة ، إلخ.