الگوریتم تولید اعداد تصادفی در کامپیوتر (مقالات آموزشی)

اعدادی تصادفی به معنی اعدادی است که غیرقابل پیشبینی و نامعلوم بوده و نظر افراد در تولید آن دخالت نداشته باشد احتمال انتخاب هر عدد با اعداد دیگر برابر باشد از زمان‌های قدیم روش هایی برای تولید این اعداد وجود داشته‌است از جمله پرتاب تاس، پرتاب سکه و برهم زدن کارت‌ها که همچنان در بازی‌ها مورداستفاده قرار می‌گیرند تولید یک عدد کاملا تصادفی ترکیبی از علوم کامپیوتر ریاضی و فیزیک است و آنچنان که در ابتدا ساده به نظر می رسد نیست چرا همون طور که همه می دونند کامپیوتر ماشینی است که با گرفتن ورودی . خروجی معینی رو تولید می کند حالا این وسط کامپیوتر می خواهد یک عدد تصادفی از کجا به ما بده عجیب است
اعداد تصادفی یک مبحث بزرگ و پر کاربرد کامپیوتر است از جمله موارد نیاز به اعداد تصادفی موارد زیر است

  • شبیه سازی دنیای واقعی و نادانسته ها (که از کارهای اصلی کامپیوتر است)
  • رمزگذاری اطلاعات
  • نمونه برداری تصادفی به جای سرشماری
  • تست کارایی برنامه ها و کد ‌های کامپیوتری با ورودی های تصادفی



55663256.gif


دو روش کلی برای تولید اعداد تصادفی وجود دارد:

  1. استفاده از یک سخت افزار برای پیگیری تغییرات یک رفتار طبیعی و کاملا تصادفی و ارسال نتایج به کامپیوتر. به عنوان مثال برخی پدیده‌های فیزیکی از جمله واپاشی رادیواکتیوی دارای رفتاری کاملاً تصادفی هستند که با استفاده از این روش لیستی از اعداد به واقع تصادفی تولید خواهند شد ولی تولید اعداد تصادفی با این روش به دلیل نیاز به تجهیزاتی که تقریبا در هیچ کامپیوتری نصب نیست خیلی به ندرت انجام می گیرد
  2. اعداد شبه تصادفی که با استفاده از فرمول های خاص تولید می شوند و شباهت زیادی به اعداد تصادفی دارند این اعداد برای هر فردی که از فرمول مطلع نباشد کاملا تصادفی جلوه می کنند البته هر روشی مورد قبول نیست و اعداد تولید شده نباید به صورت گردشی تکرار شوند احتمال تولید شدن هر عدد برابر سایر اعداد باشد و همچنین اعداد تولیدی قابل پیشبینی نباشند مگر اینکه شما از فرمول و عددی که به عنوان مقدار آغازین انتخاب شده است اگاه باشید

تابعی در زبان سی برای تولید اعداد تصادفی:
CODE int rand()
{
random_seed = random_seed * 1103515245 +12345;
return (unsigned int)(random_seed / 65536) % 32768;
}

با این روش هر عدد شبه تصادفی به مقدار آغازین خود بستگی دارد به طوری که با اجرای یک فرمول با مقدار آغازین ثابت و به دفعات زیاد نتایج یکسانی به دست خواهد آمد برای تولید اعداد شبه تصادفی که غیر قابل پیشبینی باشند باید مقدار آغازین یک عدد کاملا تصادفی باشد برای این مساله در دنیای کامپیوتر معمولا از تاریخ و زمان به عنوان مقدار آغازین استفاده می شود به این شکل که تعداد ثانیه های سپری شده از یک تاریخ خاص مثلا اول ژانویه 1970 محاسبه شده و به عنوان یک مقدار اغازین استفاده می شود تعداد ثاینه های سپری شده با هر بار اجرای برنامه و کد متفاوت خواهند بود که انتخاب خوبی برای تابع تولید اعداد شبه تصادفی می باشد روش دیگری که استفاده می شود کمک گرفتن از کاربر برای انتخاب مقدار آغازین است مثلا برنامه از کاربر می خواهد تا تعدادی از کلیدهای صفحه کلید را به صورت بی هدف فشار دهد یا اشاره گر ماوس را در صفحه ی نمایش حرکت دهد یا کاربر در میکروفون جمله ای را ادا کند و سپس برنامه ورودی را ترکیب کرده و عددی را برای آغاز تابع تولید اعداد تصادفی می سازد
زمانی که تولید عدد تصادفی مهم باشد مثل رمزگذاری اطلاعات می توان از ترکیب روشها استفاده کرد مثلا استفاده از کاربر زمان سیستم مدل قطعات سخت افزاری سیستم زمان روشن بودن کامپیوتر تاریخ نصب نرم افزارها تعداد بیتهای استفاده شده از رم و… استفاده کرد.





How can a totally logical machine like a computer generate a random number

There are two ways that computers can generate random numbers:
You can create some sort of device that monitors a completely random natural event and sends its results to the computer. For example, you could place a piece of radioactive material in front of a Geiger counter and connect the Geiger counter to a computer. Since radioactive decay is random, the Geiger counter would create truly random numbers. This approach is pretty rare, because not many people have Geiger counters connected to their machines.

You can create a formula that generates a pseudo-random number. When designing the formula, the idea is for it to produce a string of numbers that would look random to anyone who did not know what the formula is. Characteristics of a good formula include:
No repetition: The sequence does not cycle around and repeat itself.
Good numeric distribution: If the formula is producing random numbers between 0 and 9, the number of zeros, ones, twos, etc. that it produces should be roughly equal over a long period of time.
Lack of predictability: You have no way to predict what the next number will be unless you know the formula and the seed (the initial value).

Here's an example of a simple random-number formula from the book "The C Programming Language," by Kernighan and Ritchie:

int rand()
{
random_seed = random_seed * 1103515245 +12345;
return (unsigned int)(random_seed / 65536) % 32768;
}


This formula assumes the existence of a variable called random_seed, which is initially set to some number. The random_seed variable is multiplied by 1,103,515,245 and then 12,345 gets added to the product; random_seed is then replaced by this new value. This is actually a pretty good pseudo-random number generator. It has a good distribution and it is non-repeating. If you use it to produce random numbers between 0 and 9, here are the first 20 values that it produces if the seed is 10:

4
4
6
0
7
4
2
3
5
0
5
6
6
4
5
6
7
6
7
4

If you have it produce 10,000 values between 0 and 9, here's the distribution:

0 - 1015
1 - 1024
2 - 1048
3 - 996
4 - 988
5 - 1001
6 - 996
7 - 1006
8 - 965
9 - 961


Any pseudo-random number formula depends on the seed value to start the sequence. If you start with the same seed, you will get the same sequence of values from the formula. So if you give the rand() function shown above the seed of 10 on one computer and look at the stream of numbers it produces, it will be identical to the stream of numbers produced on any computer that runs it with a seed of 10. In the case of the Global Positioning System, this reproducibility is used as a way to give each satellite a predictable but different pattern of values that the GPS receiver can track.
To create a random and unpredictable sequence, the seed must be a truly random number. To get this truly random number for the seed, most programs use the current date and time, converted to an integer value (for example, converted to the number of seconds that have elapsed since January 1, 1970). Since this is a different number every time you start the program, it makes a good seed.









CODE http://computer.howstuffworks.com/question697.htm
و
CODE http://egza.wordpress.com/2008/12/19/how-computers-generate-random-numbers


مطالب مشابه :


باشگاه مشتریان کارگزاری بانک سامان

کتاب کلوب یا جمله عواملی هستند که موجب پویایی این باشگاه و دریافت پاداش برای اعضا می




کروب

در این نسخه جدید از سایت کلوب شما با مفهوم جدیدی و یا سرویس جستجوی پیشرفته اعضا ، با کسر




چگونه باور کنیم دیگر مهدی باز نخواهد گشت !!!

گزارش ژاندارمری منطقه شامونیکس فرانسه از عملیات جستجوی آقای مهدی اعضا هیات مدیره کلوب




نظريات مشورتي اداره کل امور حقوقي و تدوين قوانين قوه قضائيه در امور کيفري » در ديه اعضا

کل امور حقوقي و تدوين قوانين قوه قضائيه در امور کيفري » در ديه اعضا - شماره ثبت :




شورای شهر و شهرداری نباید تبدیل به نهاد حمایتی شوند

قوچان - شورای شهر و شهرداری نباید تبدیل به نهاد حمایتی شوند - شهرستان قوچان-اخبار-خبر جدید




الگوریتم تولید اعداد تصادفی در کامپیوتر (مقالات آموزشی)

جستجوی آسان فایل های pdf تعداد اعضا : 360 ماتریکس در کلوب:




سوالات متداول طراحی سایت و وبلاگ سری2

راهنمای جستجوی ویدئو دسترسی فقط برای اعضا ! سوال در مورد سایت کلوب




تن فروشی اینترنتی

با یک جستجوی ساده چیزی حدود های دقیق اعضا و کارمندان کلوب می رسد، کلوب را




تماس مجدد آیدین بزرگی با تهران در ساعت 30و13 و ادامه عملیات تجسس

ضمن اینکه کماکان جستجوی دو باربر ارتفاع پاکستانی در حدود اعضا هیات کلوب




برچسب :