ايران ويج

نسخه‌ی کامل: عمليات Random در کامپیوتر بر چه پایه ای انجام میشه؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
عمليات Random در کامپیوتر بر چه پایه ای انجام میشه؟
veyskarami نوشته است:عمليات Random در کامپیوتر بر چه پایه ای انجام میشه؟
سه تا موضوع هست .
اول اينكه خودت مي توني پايش رو انتخاب كني . يعني بگي كه چطوري يه چيز تصادفي توليد بشه .
دوم اينكه بري و مدار منطقي الكترونيكيش رو ياد بگيري كه خيلي هم سادس.

چهارم . اينكه خودت رو راضي كني . رندم واقعا يك تابع تصادفي نيست و بر اساس كسري از زمان توليد ميشه .

به هر حال فرقي نمي كنه . چون همشون يه چيز تصادفي به ما ميدن .
اول نوع تابع Random رو مشخص کن بعد همه چیز رو خودت می فهمی .
مثلا Randomize چه چیزی ؟؟
ولی اون سه مورد بالا اصول بیشتر توابع رندم هستش. :wink:
مثل اينكه منظورم رو خوب توضيح ندادم.
ببين من مي خوام بدونم وقتي كه از دستور رندوم استفاده مي كني كامپيوتر چه جوري يه عدد تصادفي بهت مي ده يه اصولي داره ديگه آدم كه نيست يه عدد يا ... رو شناسي بهت بگه بر پايه يه اصولي اين كار رو مي كنه مي خوام بدونم چه چيزي باعث ميشه كه اين اتفاق بيفته
نمي دونم خوب توضيح دادم يا نه :roll:
veyskarami نوشته است:مثل اينكه منظورم رو خوب توضيح ندادم.
ببين من مي خوام بدونم وقتي كه از دستور رندوم استفاده مي كني كامپيوتر چه جوري يه عدد تصادفي بهت مي ده يه اصولي داره ديگه آدم كه نيست يه عدد يا ... رو شناسي بهت بگه بر پايه يه اصولي اين كار رو مي كنه مي خوام بدونم چه چيزي باعث ميشه كه اين اتفاق بيفته
نمي دونم خوب توضيح دادم يا نه :roll:

بابا خوب من كه بهت همين رو توضيح دادم.
قبول داري سرعت ماشين از انسان بيشتره يا نه ؟؟

وقتي كه از تابع رندم استفاده مي كنم . مي تونه به صورت عمومي دوتا اتفاق بيفته .

يكي از مدار مجتمع منطقي (مجموعي از گيت ها) استفاده كنيم .
كه اين مدار هرچي بخواي برات عدد در مبناي دو ايجاد مي كنه . كه اصلا دست من تو نيست .
و با كنار هم گذاشتنشون مثل (01011011101100) به مبناي كه دلمون مي خواد مي بريم.
و يا اينكه بيام و از زمان براي ايجاد يك عدد تصادفي استفاده كنيم . كه در اين صورت هرچه زمانسنج دقيق تر باشه . عدد تصادفيمون هم تصادفي تره

فكر كنم ساده ترين مداري كه توي الكترونيك براي توليد يه چيز تصادفي باشه فيلپ فلاپه :arrow:
ويبي رو تا اونجا كه مي دونم از يه جدول استفاده مي كنه يعني يه جدول تصادفي داره كه اول از زمان براي انتخاب اولين عدد استفاده مي كنه بعد از اين عدد به دست اومده براي انتخاب عدد دوم استفاده مي كنه و همين طور الي آخر
البته مي توني در ابتدا از زمان استفاده نكني كه اعدادت تكراري مي شن Amaze چون از يه جدولن ديگه اگه ديده باشي تابع RND يه عدد هم مي گيره كه از همون عدد براي انتخاب از تو جدول استفاده مي كنه اگه ندي از عدد قبلي استفاده مي كنه البته اگه اشتباه نفهميده باشم
من شنیدم از روی ساعت دقیق سیستم این کار رو میکنه(صدم یا هزارم ثانیه رو هم در نظر میگیره)
به نظر من از یک فرمول ریاضی استفاده میکنه .
نمیدونم با زمان چه جوری میشه اینکارو کرد ولی آخه یه کمی عجیب
به نظر میرسه فرض کنید ما میخواهیم یک عدد بین 50 و 1 به ما بدهد
یک بار عدد 27 و دفعه دیگر به ما 2 را بدهد . دوستان گفته بودند با صدم
ثانیه ولی وقتی فکر میکنم توی اعداد بزرگ عملیات کسر چه جوری انجام
میشه .
روی چه حسابی نمیدونم .
ولی هر کی پا باهاش میتونم تو شبیه سازی اون فرمول ریاضی با هم
همکاری کنیم. اون یه کمی کمتر عجیبه .
تاحالا فکر کردین تابع Rnd عدد تصادفی رو از کجا می یاره ؟؟؟ یه کم فکر کنین ... کامپیوتر که عقل و قدرت انتخاب نداره به ظاهر باید یه عدد دلخواه تولید کنه...

تابع Rnd حتما باید یه عدد به صورت ورودی داشته باشه . به اون عدد seed میگن . وقتی سید رو می گیره می یاد مثلا اون رو در ۳ ضرب میکنه و ... و هزار تا کار روش انجام میده و بعد اونو به عنوان عدد تصادفی به شما میده .

وقتی شما می زنین Randomize Timer تعداد ثانیه های گذشته از نیمه شب به عنوان سید به تابع ارسال میشه ...

اما اینکه واقعا چه طوری سید به یه عدد تصادفی تبدیل میشه ممکنه متفاوت باشه . اما یه راه که هم یه مدت متداول بوده و هم اسونه و هم یه بار سوال مسابقه ای-سی-ام بوده اینه :

The algorithm to generate a sequence of integers, where each integer is between 0 and

B . 1 inclusive, is as follows:

1. Start with any number (the seed) in base B. This number can contain hundreds of base

B digits.

2. The last digit (least significant) is output as the next element of the sequence.

3. Create a new number by writing down the sum of all neighbouring digits from left to

right. E.g., with B = 10, the number 845 would yield the number 129 (since 8 + 4 = 12

and 4 + 5 = 9).

4. Repeat steps 2 and 3 as many times as needed, or until the number has only one base

B digit. You get one more pseudo-random digit between 0 and B . 1 each time.

If we have B = 10 and the seed number is 845, then the next numbers will be 129, 311

(1 + 2 = 3, 2 + 9 = 11), 42 (3 + 1 = 4, 1 + 1 = 2), and 6 (4 + 2 = 6). As 6 is a single digit base

10 number, the algorithm terminates. The pseudo-random digits generated are 5, 9, 1, 2 and

البته اين مطالب من نيست بلكه مطالب آقا امينه
الگوريتم هايي براي توليد دنباله اعداد تصادفي هستند كه
BBS مورد مناسبيه . و امن تر از بقيه هم هست
البته Pseudo Random نه Random.
ويليام استالينگ در كتاب معروف خودش , در مورد BBS اينطور ميگه :
It has perhaps the strongest public proof of it's cryptographic strength.
ضمنا BBS مخفف اين عبارته : Blum.Blum.Shub
البته الگوريتم هاي ديگري هم هستند كه پياده سازيشون نسبت به اين خيلي راحتره .
مثل الگوريتم Lehmer يا اسم رسميش : Linear Congruential Method