آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

قطعِ احتمالِ تولیدِ اعدادِ تصادفیِ تکراری

Programmer  11 سال پیش  11 سال پیش
0 0

سلام دوستان

با ()Math.random یک بازه ی اعداد مثلا بین 1 تا 8 تولید کردم.هروقت که این دستور اجرا میشه یک عدد تصادفی بین 1 تا 8 تولید میشه.بعضی وقت ها پیش میاد که در تولید عدد تصادفی چند عدد پشت سر هم تکرار میشه.
مثلا یکبار عدد تصادفی، 8 انتخاب میشه و بعد از اون دوبار دیگه باز هم عدد 8 انتخاب میشه.

میخوام توی این اعداد تصادفی یه کاری کنم که کل بازه ی بین 1 تا 8 یک بار حدس زده بشه و بعد دوباره بیاد از اول بین 1 تا 8 اعداد حدس زده بشه.نمیخوام یک عدد، 2 بار بصورت تصادفی پشت سر هم انتخاب بشه.

در واقع میخوام که احتمال تولید اعداد تصادفی تکراری رو به صفر برسونم.همچین چیزی امکان پذیر هست ؟

امیدوارم منظورم رو رسونده باشم.ممنونم از همکاریتون :)

+3 0
عدد تصادفی قبلی رو ذخیره کن. بعد داخل یک حلقه while تا وقتی عدد جدید و عدد قبلی برابر هستند روند تولید عدد تصادفی رو تکرار کن (11 سال پیش)
+1 0
شاید برای آیندگان مفید واقع شود : لینک (11 سال پیش)
0 0
شد همون حرف من :) ، باز مهدی ( Atras ) میگه نباید از آرایه استفاده کنیم :| (11 سال پیش)
0 0
استفاده از دیتابیس و ثبت به نظرم بهترین راه هست چون برای تولیدش کافیه در دیتابیس چک کنی ببینی هست یا نه اگه بود یکی دیگه تولید میکنه از سربار اضافی هم جلوگیری میشه (11 سال پیش)
0 0
دیتابیس خیلی دردسره < اصلا نیاز به دیتابیس نیست < از آرایه میتونی استفاده کنید < اما این طور که شما دارید میگید کافیه اخرین عدد تصادفی تولید شده رو ذخیره کنید و با عدد تصادفی جدید که تولید میشه چک کنید < اگر برابر بود دوباره عدد تصادفی تولید بشه < اگر برابر نبود دستوراتتون رو اجرا کنید و عدد جدید رو به عنوان متغیر ذخیره کنید و دوباره اون رو برای عدد بعدی مقایسه کنید (11 سال پیش)
0 0
ایشون می خوان عدد رندوم اصلا تکراری نشه اما اینی شما میگید برای عدد آخر بررسی میکنه نه همه اعداد تولید شده (11 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
سامان پاپی  11 سال پیش
0 0

دوستان سلام و خسته نباشید

این مشکل سال هاست در تمام مسابقات برنامه نویسی مطرح میشه و تقریبا همه باهاش مشکل دارن یک پاسخ راحت داره اونم حلقه وایله!

 while (counter != 7){
  randomNumber= ...Random.nextInt();
  if ([randomNumber % bitArray.length] != 0){
     print(randomNumber % bitArray.length)
     [randomNumber % bitArray.length]= 0;
     counter++
   }    

}
پاسخ به سوال 
مجتبی یگانه  11 سال پیش
+3 0

معلومه که امکان پذیر هست !

یک آرایه از اعدادی که قبلا تولید شده داشته باشید ، اگر عدد در آرایه بود ، دوباره عدد جدیدی تولید کنید

+1 0
مجتبی جان حرف شما درسته ولی اگر بازه این اعداد زیاد باشه میدونی چه پروسس زیادی اجرا میشه. تو زبان بیسیک یه کد هست که از این کار جلو گیری میکنه.حالا اگر بشه جور دیگه این کار رو انجام بدیم تا هم حافظه کمتر اشغال بشه هم پروسس کمتر خیلی بهتر میشه.البته اگر بشه راه دیگه ای پیدا کرد:) (11 سال پیش)
0 0
ما خیلی وقتها که باید نگران سربار و پردازش اضافه باشیم ، نیستم ! ، اما جاهایی که لازمه ، فکر میکنیم بی دلیل بوده ! ، بله من یادم هست که تو ویژوال بیسیک 6 ، یه خط کد اضافه میکردیم و دیگه عدد تکراری بهمون نمیداد ، اما فکر میکنی اون علم غیب داره که قبلا چه اعدادی تولید شده ؟! ، تفاوت اینجا هست که این کار توسط یک قطعه کد دیگه انجام می شد و ما نمی دیدیم :) (11 سال پیش)
0 0
نه مجتبی جان علم قیب نداره ولی خیلی حرفه ای تعریف شده که سربارو به حداقل میرسونه.ما میتونیم از آرایه استفاده کنیم ولی باید یه الگریتم بازگشتی تعریف کنیم که سربارش کمتر از الگریتم های دیگه باشه.اینجوری هم مشکل حل میشه هم سربار اظافی کم میشه.! (11 سال پیش)
0 0
متوجه نمیشم ربط این موضوع با الگوریتم های بازگشتی رو تو چی میبینی ! ، الگوریتم بازگشتی self Calling Algorytm ها هستند ، الگوریتم هایی که خودشون رو صدا میزنند ، پس اینجا اصلا الگوریتم بازگشتی اصطلاح مناسبی واسه متدی که نوشتیم نیست ، متد ما یک for each خیلی سادست ، بحث حرفه ای نوشتن و اینها هم نیست ! ، درسته مقایسه ی خوبی نیست ، ولی شما که با vb6 کار میکنی الان یه نمونه بنویس بعد زمان اجراش رو بگیر (مثلا برای تولید 100 عدد غیر یکسان) و بعد با جاوا و for each این کار رو انجام بده ، متوجه حرف من میشید :) (11 سال پیش)
0 0
اگر ساختمان داده پاس کرده باشی و قشنگ موضوعو گرفته باشی متوجه میشی که الگریتم های بازگشتی الگریتم هایی هستند که تابع زمانی یک الگریتم رو نسبت به الگریتم های دیگه به حداقل میرسونه(البته استسنا هم داریم).و اگر مطالعه در مورد این موضوع داشته باشی متوجه میشی که الگریتم جستجو در آرایه بهترینش که تابع زمانیشم نسبت به الگریتم های عادی بهترباشه اگریتم بازگشتی این جستجو هست.امیدوارم ربطشو قشنگ متوجه شده باشی:) (11 سال پیش)
0 0
مهدی هر وقت فرصت کردی یک نمونه کد با این چیزایی که میگی پیاده کن ، بحث رو ادامه میدیم ، اون وقت هست که میشه در این مورد توضیحات عملی داد نه تئوری ! ، حالا یه الگوریتم شما بازگشتی هست و زمان اش مناسبه ، یا این که الگوریتم بازگشتی برای این مورد بدرد نمیخوره و میشه حرف من ، من منتظرم (11 سال پیش)
پاسخ به سوال 
ATRAS  11 سال پیش
+1 0

هرچی بازه اعداد بیشتر باشه احتمال اومدن اعداد تصادفی که تکراری باشه کم تر میشه.

به عنوان مثال:اعداد تصادفی  از 1 تا 10 رو در نظر بگیرید.در این بازه احتمال اینکه عدد 4 چند بار بیاد خیلی خیلی بیشتر از اینه که عدد 4 در بازه های 1 تا 1000 بیاد.

خب یه مثال دیگه:احتمال اومدن عدد 4 در بازه اعداد 1 تا 10 باز هم بیشتر از اینه که ما چند تا عدد رندم از 1 تا 10 انتخاب کنیم بعد از بین این اعداد رندم یک عدد رندم انتخاب کنیم.

با حرفایی که در بالا زدم قصد داشتم جمله زیر رو بگم.

ما به جای اینکه بیایم از تابع رندم خود زبان برنامه نویسی استفاده کنیم و برای اینکه اعداد تکراری بهمون نده بیام یک آرایه تعریف کنیم و سربار های زیادی رو به برناممون محول کنیم،بیایم یک تابع رندوم خودمون بنویسیم و قواعدی مثل قواعد بالا رو توش پیاده کنیم تا احتمال اومدن یک عدد رندوم تکراری رو تا حداقل ممکن کم کنیم.

البته من این تابع رو تا یه جاهایی تعریف کردم و نتیجه خوبی هم داشته ولی دارم تلاش میکنم این  درصد تکرارو باز هم کاهش بدم.حتی در بازه اعداد 1 تا 10.

0 0
(11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .