Muhammad al-xorazmiy nomidagi toshkеnt axborot tеxnologiyalari univеrsitеti qarshi filiali “ kompyuter injiniringi ” fakultеti
Soxta tasodifiy sonlar va tasodifiy sonlar ishlab chiqaruvchi
Download 0.64 Mb. Pdf ko'rish
|
MI 3
- Bu sahifa navigatsiya:
- PRNG-da takrorlanadigan bazi algoritmlar mavjud.
Soxta tasodifiy sonlar va tasodifiy sonlar ishlab chiqaruvchi
Tasodifiy narsalarni olish uchun bizga entropiya manbai kerak, biz tasodifiylikni yaratish uchun foydalanadigan ba'zi betartibliklar manbai. Ushbu manbadan entropiyani to'plash uchun foydalaniladi, keyinchalik undan dastlabki qiymat (urug ') olinadi, bu tasodifiy sonlar hosil qilish uchun zarur bo'lgan (RNG). Psevdo-tasodifiy sonlar ishlab chiqaruvchisi bitta urug 'ishlatadi, shuning uchun uning psevdo-tasodifiyligi, tasodifiy sonlar ishlab chiqaruvchisi esa har doim tasodifiy son hosil qiladi, boshida entropiyaning turli manbalaridan olingan yuqori sifatli tasodifiy o'zgaruvchiga ega. Entropiya buzilish o'lchovidir. Axborot entropiyasi - bu ma'lumotlarning noaniqligi yoki oldindan aytib bo'lmaydiganligi o'lchovidir. Ma'lum bo'lishicha, psevdo-tasodifiy ketma-ketlikni yaratish uchun bizga ma'lum bir formulaga asoslanib, ma'lum bir ketma-ketlikni yaratadigan algoritm kerak. Ammo bunday ketma-ketlikni taxmin qilish mumkin. Shunga qaramay, keling, agar bizda Math.random () bo'lmasa, qanday qilib o'z tasodifiy raqamlar generatorini yozishimiz mumkin. PRNG-da takrorlanadigan ba'zi algoritmlar mavjud. RNG har qanday shovqindan raqamlarni to'liq oladi, bu nolga moyilligini hisoblash qobiliyati. Shu bilan birga, RNG tarqatishni moslashtirish uchun ma'lum algoritmlarga ega. Agar siz 0 dan Ngacha va modul 2 ga o'tsangiz, siz 1 va 0 generatorini olasiz: Funktsiya * rand () (const n \u003d 100; const mod \u003d 2; i \u003d 0 bo'lsin; while (true) (rentabellik i% mod; agar (i ++\u003e n) i \u003d 0;)) i \u003d 0 bo'lsin; uchun (x ning rand ()) (agar (i ++\u003e 100) buzilsa; console.log (x);) Ushbu funktsiya biz uchun 01010101010101 ketma-ketligini yaratadi ... va siz uni hatto psevdo-tasodif deb ham atay olmaysiz. Jenerator tasodifiy bo'lishi uchun u keyingi bit uchun sinovdan o'tishi kerak. Ammo bizda bunday vazifa yo'q. Shunga qaramay, hech qanday sinovlarsiz ham biz navbatdagi ketma-ketlikni taxmin qilishimiz mumkin, demak, bunday algoritm boshga to'g'ri kelmaydi, lekin biz to'g'ri yo'nalishda bo'lamiz. Ammo ba'zi taniqli, ammo chiziqli bo'lmagan ketma-ketlikni olsak nima bo'ladi, masalan, PI raqami. Va modul uchun biz 2 emas, balki yana bir narsani qabul qilamiz. Hatto modulning o'zgaruvchan ma'nosi haqida o'ylashingiz mumkin. Pi sonidagi raqamlar ketma-ketligi tasodifiy hisoblanadi. Jeneratör noma'lum nuqtadan boshlab pi raqamlari yordamida ishlashi mumkin. PI asosidagi ketma-ketlikda va o'zgaruvchan modulda bunday algoritmga misol: Const vektori \u003d [... Math.PI.toFixed (48). Almashtirish (".", "")]; function * rand () (for (ruxsat bering i \u003d 3; i<1000; i++) { if (i > 99) i \u003d 2; uchun (n \u003d 0; n bo'lsin Ammo JS-da PI raqamini faqat 48 ta belgigacha ko'rsatish mumkin va bundan ortiq emas. Shuning uchun, bunday ketma-ketlikni taxmin qilish shunchaki oson va bunday generatorning har bir ishi har doim bir xil sonlarni hosil qiladi. Ammo bizning generatorimiz allaqachon 0 dan 9 gacha bo'lgan raqamlarni ko'rsatishni boshladi. Biz 0 dan 9 gacha bo'lgan raqamlar generatorini oldik, lekin taqsimot juda notekis va u har safar bir xil ketma-ketlikni hosil qiladi. Biz Pi sonini emas, balki raqamli tasvirdagi vaqtni olishimiz va bu raqamni raqamlar ketma-ketligi deb hisoblashimiz mumkin va ketma-ketlikni har safar takrorlamaslik uchun uni oxiridan o'qiymiz. Umuman olganda bizning PRNG algoritmimiz quyidagicha bo'ladi: Funksiya * rand () (let newNumVector \u003d () \u003d\u003e [... (+ new Date) + ""]. Reverse (); let vector \u003d newNumVector (); let i \u003d 2; while (true) (if ( i ++\u003e 99) i \u003d 2; n \u003d -1 bo'lsin; while (++ n< vector.length) yield (vector[n] % i); vector = newNumVector(); } } // TEST: let i = 0; for (let x of rand()) { if (i++ > 100) tanaffus; console.log (x)) Bu allaqachon psevdo-tasodifiy raqamlar generatoriga o'xshaydi. Va xuddi shu Math.random () - bu PRNG, biz bu haqda biroz keyinroq gaplashamiz. Bundan tashqari, har safar birinchi raqam har xil bo'ladi. Download 0.64 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling