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
bet10/26
Sana18.06.2023
Hajmi0.64 Mb.
#1577767
1   ...   6   7   8   9   10   11   12   13   ...   26
Bog'liq
MI 3

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:
1   ...   6   7   8   9   10   11   12   13   ...   26




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling