Çevrimiçi rastgele sayı üreteci. İsimlerin, şifrelerin ve rastgele sayıların çevrimiçi oluşturucuları

  • 24.06.2019

Numaralar her yerde bize eşlik ediyor - ev ve apartman numaraları, telefon, araba, pasaport, plastik kart, tarihler, e-posta şifreleri. Bazı sayı kombinasyonlarını kendimiz seçiyoruz, ancak çoğunu rastgele alıyoruz. Bunu fark etmeden her gün rastgele oluşturulmuş sayıları kullanıyoruz. Pin kodları bulursak, şifrelere erişimi engelleyen güvenilir sistemler tarafından bir kredi veya maaş kartı için benzersiz kodlar oluşturulur. Rastgele sayı üreteçleri, işlem hızı, güvenlik ve bağımsız veri işleme gerektiren alanlarda koruma sağlar.

Sözde rasgele sayılar üretme süreci belirli yasalara tabidir ve örneğin piyango tutarken uzun süredir kullanılmaktadır. Yakın geçmişte, piyango davulları veya çekilişler kullanılarak çekilişler yapıldı. Şimdi, birçok ülkede, devlet piyangolarının kazanan numaraları, tam olarak bir dizi rastgele oluşturulmuş sayı tarafından belirlenir.

Yöntem avantajları

Bu nedenle, bir rasgele sayı üreteci, sayı kombinasyonlarını rasgele belirlemek için bağımsız bir modern mekanizmadır. Bu yöntemin benzersizliği ve mükemmelliği, sürece dış müdahalenin imkansızlığında yatmaktadır. Jeneratör, örneğin gürültü diyotları üzerine kurulmuş bir dizi programdır. Cihaz, mevcut değerleri sayılara dönüştürülen ve kombinasyonlar oluşturan bir rastgele ses akışı üretir.

Sayı üretmek anında sonuç sağlar - kombinasyonun tamamlanması birkaç saniye sürer. Piyangolardan bahsedersek, katılımcılar bilet numarasının kazanan ile aynı olup olmadığını hemen öğrenebilirler. Bu, çekilişlerin katılımcıların istediği sıklıkta yapılmasına izin verir. Ancak yöntemin ana avantajı, tahmin edilemezliği ve sayıları seçme algoritmasını hesaplamanın imkansızlığıdır.

Sözde rasgele sayılar nasıl oluşturulur?

Aslında, rastgele sayılar rastgele değildir - dizi belirli bir sayı ile başlar ve bir algoritma tarafından oluşturulur. Bir sözde rasgele sayı üreteci (PRNG veya PRNG - sözde rasgele sayı üreteci), genellikle tek biçimli olarak dağılmış, görünüşte ilgisiz sayıların bir dizisini üreten bir algoritmadır. Bilgisayar biliminde, sözde rasgele sayılar birçok uygulamada kullanılır: kriptografi, simülasyon, Monte Carlo, vb. Sonucun kalitesi PRNG'nin özelliklerine bağlıdır.

Üretim kaynağı, kozmik radyasyondan bir dirençteki gürültüye kadar fiziksel gürültü olabilir, ancak bu tür cihazlar ağ güvenliği uygulamaları tarafından neredeyse hiç kullanılmaz. Kriptografik uygulamalar, istatistiksel olarak rastgele olamayacak diziler oluşturan özel algoritmalar kullanır. Bununla birlikte, iyi seçilmiş bir algoritma, çoğu rastgelelik testini geçen bir dizi sayı elde etmenizi sağlar. Bu tür dizilerdeki tekrar periyodu, sayıların alındığı çalışma aralığından daha büyüktür.

Birçok modern işlemci, örneğin RdRand gibi bir PRNG içerir. Alternatif olarak, rastgele sayı kümeleri oluşturulur ve tek kullanımlık bir pedde (sözlük) yayınlanır. Bu durumda sayıların kaynağı sınırlıdır ve tam ağ güvenliği sağlamaz.

PRNG geçmişi

MÖ 3500'de Eski Mısır'da yaygın olan masa oyunu Senet, rastgele sayı üretecinin prototipi olarak kabul edilebilir. Koşullara göre, iki oyuncu katıldı, hamleler dört düz siyah beyaz çubuk atılarak belirlendi - o zamanın PRNG'sine benziyorlardı. Sopalar aynı anda fırlatıldı ve puanlar hesaplandı: biri beyaz tarafa düşerse, 1 puan ve fazladan bir hamle, iki beyaz - iki puan vb. En fazla beş puanlık skoru siyah tarafla dört sopa atan oyuncu elde etti.

Bu günlerde, ERNIE jeneratörü İngiltere'de piyango çekilişlerinde uzun yıllardır kullanılmaktadır. Kazanan sayılar üretmenin iki ana yöntemi vardır: doğrusal uyumlu ve toplamsal uyumlu. Bu ve diğer yöntemler, rastgelelik ilkesine dayanır ve sırasını tahmin etmek imkansız olan sonsuz sayıda sayılar üreten bir yazılım tarafından sağlanır.

PRNG, örneğin slot makinelerinde sürekli olarak çalışır. ABD yasalarına göre bu, tüm yazılım satıcılarının uyması gereken bir ön koşuldur.


İdeal olarak, rastgele sayıların dağılımının yoğunluk eğrisinin Şekil 1'de gösterilene benzeyeceğini unutmayın. 22.3. Yani, ideal durumda, her aralık aynı sayıda nokta içerir: n ben = n/k , nerede n- toplam puan sayısı, k- aralık sayısı, ben= 1,…, k .

Pirinç. 22.3. Düşen rastgele sayıların frekans diyagramı,
teorik olarak ideal bir jeneratör tarafından üretilen

Rastgele bir rastgele sayı üretmenin iki aşamadan oluştuğu unutulmamalıdır:

  • normalleştirilmiş bir rasgele sayı üretme (yani, 0'dan 1'e eşit olarak dağıtılmış);
  • normalleştirilmiş rasgele sayıları dönüştürme r ben rastgele sayılara x ben, gerekli kullanıcı (keyfi) dağıtım yasasına göre veya gerekli aralıkta dağıtılır.

Rastgele sayı üreteçleri aşağıdakilere ayrılır:

  • fiziksel;
  • tablo;
  • algoritmik.

Fiziksel RNG

Fiziksel RNG'lerin örnekleri şunlardır: bir madeni para (tura - 1, tura - 0); zar; sayılarla sektörlere ayrılmış oklu bir tambur; gürültülü bir termal cihaz olarak kullanılan donanım gürültü üreteci (HS), örneğin bir transistör (Şekil 22.4-22.5).

Pirinç. 22.4. Rasgele sayılar üretmek için donanım yönteminin şeması
Pirinç. 22.5. Donanım yöntemiyle rastgele sayılar elde etme şeması
"Bir bozuk para kullanarak rastgele sayılar üretme" görevi

0'dan 1'e eşit olarak dağıtılmış rastgele 3 basamaklı bir sayı oluşturmak için bir bozuk para kullanın. Kesinlik üç ondalık basamaktır.

Sorunu çözmenin ilk yolu
Bir madeni parayı 9 kez çevirin ve madeni para tura gelirse "0", tura ise "1" yazın. Diyelim ki deney sonucunda 100110100 rastgele bir dizi elde ettik.

0'dan 1'e bir aralık çizin Sayıları soldan sağa sırayla okuyun, aralığı ikiye bölün ve her seferinde bir sonraki aralığın parçalarından birini seçin (0'dan düşerse, düşerse soldakini seçin. 1, sonra doğru olan). Böylece aralıktaki herhangi bir noktaya istediğiniz kadar doğru bir şekilde ulaşabilirsiniz.

Yani, 1 : aralık yarıya indirilir - ve, - sağ yarı seçilir, aralık daraltılır:. Sonraki sayı, 0 : aralık yarıya indirilir - ve, - sol yarı seçilir, aralık daraltılır:. Sonraki sayı, 0 : aralık yarıya indirilir - ve, - sol yarı seçilir, aralık daraltılır:. Sonraki sayı, 1 : aralık yarıya indirilir - ve, - sağ yarı seçilir, aralık daraltılır:.

Sorunun doğruluğu koşuluyla çözüm bulundu: aralıktan herhangi bir sayı, örneğin 0.625.

Prensip olarak, eğer katı bir şekilde yaklaşırsanız, o zaman aralıkların bölünmesi, bulunan aralığın sol ve sağ sınırları üçüncü ondalık basamağa kadar ÇIKARILANA kadar devam etmelidir. Yani, doğruluk açısından, üretilen sayı, bulunduğu aralıktaki herhangi bir sayıdan artık ayırt edilemeyecektir.

Sorunu çözmenin ikinci yolu
Elde edilen 100110100 ikili dizisini üçe bölelim: 100, 110, 100. Bu ikili sayıları ondalık sayıya dönüştürdükten sonra elde ederiz: 4, 6, 4. Önde "0" yerine koyarsak: 0.464 elde ederiz. Bu yöntem kullanılarak yalnızca 0,000 ila 0,777 arasındaki sayılar elde edilebilir (çünkü üç ikili basamaktan çıkarılabilecek maksimum sayı 111 2 = 7 8'dir) - yani aslında bu sayılar sekizli sayı sisteminde temsil edilir. Çeviri için sekizli sayılar ondalık temsili uygulayacağız:
0.464 8 = 4 · 8 –1 + 6 · 8 –2 + 4 · 8 –3 = 0.6015625 10 = 0.602 10.
Yani, gerekli sayı şuna eşittir: 0.602.

Tablo RNG

Tablolu RNG'ler, rasgele sayıların kaynağı olarak, doğrulanmış korelasyonsuz, yani birbirinden bağımsız sayıları içeren özel olarak derlenmiş tablolar kullanır. Tablo 22.1, böyle bir tablonun küçük bir parçasını gösterir. Tabloyu soldan sağa yukarıdan aşağıya doğru hareket ettirerek, 0'dan 1'e gerekli sayıda ondalık basamakla eşit olarak dağıtılmış rastgele sayılar elde edebilirsiniz (örneğimizde, her sayı için üç ondalık basamak kullanıyoruz). Tablodaki sayılar birbirine bağlı olmadığından, tablo farklı şekillerde, örneğin yukarıdan aşağıya veya sağdan sola doğru hareket ettirilebilir veya örneğin çift konumlu sayıları seçebilirsiniz.

Tablo 22.1.
Rastgele sayılar. eşit
0'dan 1'e rastgele sayılar dağıtıldı
Rastgele sayılar Eşit dağıtılmış
0'dan 1'e rastgele sayılar
9 2 9 2 0 4 2 6 0.929
9 5 7 3 4 9 0 3 0.204
5 9 1 6 6 5 7 6 0.269
… …

Bu yöntemin avantajı, tablo doğrulanmış ilişkisiz sayılar içerdiğinden, gerçekten rastgele sayılar vermesidir. Yöntemin dezavantajları: çok sayıda rakamı saklamak çok fazla bellek gerektirir; bu tür tabloların oluşturulmasında ve kontrol edilmesinde büyük zorluklar, bir tabloyu kullanırken tekrarlar artık sayısal dizinin rastgeleliğini ve dolayısıyla sonucun güvenilirliğini garanti etmemektedir.

500 kesinlikle rastgele doğrulanmış sayı içeren bir tablo var (I. G. Venetsky, V. I. Venetskaya "Ekonomik analizde temel matematiksel ve istatistiksel kavramlar ve formüller" kitabından alınmıştır).

algoritmik RNG

Bu RNG'ler kullanılarak oluşturulan sayılar her zaman sözde rastgeledir (veya yarı rastgele), yani sonraki her oluşturulan sayı bir öncekine bağlıdır:

r ben + 1 = F(r ben) .

Bu tür sayılardan oluşan diziler döngüler oluşturur, yani zorunlu olarak sonsuz sayıda tekrar eden bir döngü vardır. Tekrar eden döngülere periyot denir.

RNG verilerinin avantajı hızdır; jeneratörler pratik olarak bellek kaynakları gerektirmezler, kompakttırlar. Dezavantajları: Sayılar tamamen rastgele olarak adlandırılamaz, çünkü aralarında bir bağımlılık olduğu kadar, yarı rastgele sayılar dizisindeki dönemlerin varlığı da vardır.

Bir RNG elde etmek için birkaç algoritmik yöntem düşünün:

  • orta kareler yöntemi;
  • ara ürünler yöntemi;
  • karıştırma yöntemi;
  • lineer uyumlu yöntem.

ortalama kare yöntemi

dört basamaklı bir sayı var r 0. Bu sayının karesi alınır ve r 1. İleride r 1 orta (dört orta basamak) - yeni bir rasgele sayı - alınır ve yazılır r 0. Ardından prosedür tekrarlanır (bkz. şekil 22.6). Aslında, rastgele bir sayı olarak almanın gerekli olmadığını unutmayın. gij, a 0.gij- sola atanmış bir sıfır ve ondalık nokta ile. Bu gerçek, Şekil 1'deki gibi yansıtılmaktadır. 22.6 ve sonraki benzer şekillerde.

Pirinç. 22.6. Ortalama kareler şeması

Yöntemin dezavantajları: 1) eğer bir yinelemede sayı r 0 sıfıra eşit olur, ardından jeneratör dejenere olur, bu nedenle başlangıç ​​değerinin doğru seçimi önemlidir. r 0; 2) jeneratör diziyi baştan sona tekrarlayacaktır. m n adımlar (en iyi ihtimalle), nerede n- rakam kapasitesi r 0 , m- sayı sisteminin temeli.

Örneğin, Şekil. 22.6: eğer sayı r 0 ikili sistemde temsil edilecek, daha sonra sözde rasgele sayılar dizisi 2 4 = 16 adımda tekrarlanacaktır. İlk sayı iyi seçilmezse dizinin tekrarının daha erken gerçekleşebileceğini unutmayın.

Yukarıda açıklanan yöntem, John von Neumann tarafından önerildi ve 1946'ya kadar uzanıyor. Bu yöntem güvenilmez olduğu için hızla terk edildi.

Orta ürünler yöntemi

Sayı r 0 ile çarpılır r 1, elde edilen sonuçtan r 2 ortasını çıkarın r 2 * (bu başka bir rastgele sayıdır) ve ile çarpılır r 1. Sonraki tüm rastgele sayılar bu şema kullanılarak hesaplanır (bkz. Şekil 22.7).

Pirinç. 22.7. Orta ürünler yöntemi

karıştırma yöntemi

Karıştırma yöntemi, bir hücrenin içeriğini döngüsel olarak sola ve sağa kaydırmak için işlemleri kullanır. Yöntemin fikri aşağıdaki gibidir. Hücrenin tohumu saklamasına izin ver r 0. Hücrenin içeriğini döngüsel olarak hücre uzunluğunun 1/4'ü kadar sola kaydırarak yeni bir sayı elde ederiz. r 0 *. Aynı şekilde, bir hücrenin içeriğini döngüsel olarak değiştirmek r 0 hücre uzunluğunun 1 / 4'ü kadar sağa, ikinci sayıyı alırız r 0 **. sayıların toplamı r 0 * ve r 0 ** yeni bir rastgele sayı verir r 1. Daha öte r 1 girilir r 0 ve tüm işlem dizisi tekrarlanır (bkz. Şekil 22.8).


Pirinç. 22.8. Karıştırma yöntemi şeması

Lütfen toplamdan elde edilen sayının r 0 * ve r 0 **, hücreye tam olarak sığmayabilir r 1. Bu durumda, alınan numaradan fazladan rakamlar atılmalıdır. Bunu Şekil için açıklayalım. 22.8, burada tüm hücreler sekiz ikili basamakla temsil edilir. İzin vermek r 0 * = 10010001 2 = 145 10 , r 0 ** = 10100001 2 = 161 10 , sonra r 0 * + r 0 ** = 100110010 2 = 306 10 ... Gördüğünüz gibi, 306 sayısı (ikili sayı sisteminde) 9 rakamı kaplar ve hücre r 1 Beğeni r 0) maksimum 8 bit tutabilir. Bu nedenle, değeri girmeden önce r 1 306 sayısından en soldaki bit olan bir "ekstra" çıkarmak gerekir, bunun sonucunda r 1 artık 306 değil, 00110010 2 = 50 10 olacak. Ayrıca Pascal gibi dillerde, bir hücre taştığında ekstra bitlerin "kesilmesi", belirtilen değişken türüne göre otomatik olarak yapılır.

Doğrusal uyumlu yöntem

Doğrusal uyumlu yöntemi, rastgele sayıları simüle etmek için en basit ve en yaygın kullanılan prosedürlerden biridir. Bu yöntem modu kullanır ( x, y), bu, ikinciye bölünen ilk bağımsız değişkenin kalanını döndürür. Sonraki her rastgele sayı, aşağıdaki formül kullanılarak bir önceki rastgele sayıya göre hesaplanır:

r ben+ 1 = mod ( k · r ben + B, m) .

Bu formül kullanılarak elde edilen rastgele sayılar dizisine denir. lineer uyumlu dizi... Birçok yazar, doğrusal uyumlu bir dizi olarak adlandırır. B = 0 çarpımsal uyumlu yöntem, ve B ≠ 0 — karışık uyumlu yöntem.

Kaliteli bir jeneratör için uygun katsayıları seçmeniz gerekir. sayı olması zorunludur m oldukça büyüktü, çünkü dönem daha fazla olamaz m elementler. Öte yandan, bu yöntemde kullanılan bölme işlemi oldukça yavaş bir işlemdir, bu nedenle ikili bir bilgisayarın seçmesi mantıklı olacaktır. m = 2 n, çünkü bu durumda bölmenin kalanını bulmak bilgisayarın içinde ikili mantıksal bir "VE" işlemine indirgenir. En büyük asal sayının seçimi de yaygındır m 2'den az n: özel literatürde, bu durumda elde edilen rastgele sayının en az anlamlı bitlerinin olduğu kanıtlanmıştır. r ben+ 1, bir bütün olarak rasgele sayı dizisinin tamamı üzerinde olumlu bir etkiye sahip olan, eskileri kadar rasgele davranır. Bir örnek biridir Mersenne numaraları 2 31 - 1'e eşittir ve böylece m= 2 31 - 1.

Doğrusal uyumlu diziler için gereksinimlerden biri, periyot uzunluğunun mümkün olduğu kadar büyük olmasıdır. Dönemin uzunluğu değerlere bağlıdır m , k ve B... Aşağıda sunduğumuz teorem, belirli değerler için bir maksimum uzunluk periyoduna ulaşmanın mümkün olup olmadığını belirlememizi sağlar. m , k ve B .

teorem... Sayılarla tanımlanan doğrusal uyumlu dizi m , k , B ve r 0, bir uzunluk periyoduna sahiptir m ancak ve ancak:

  • sayılar B ve m karşılıklı basit;
  • k- 1 çoklu P her basit için P hangisi bölen m ;
  • k- eğer 4'ün 1 katı m 4'ün katı.

Son olarak, rasgele sayılar üretmek için lineer uyumlu yöntemi kullanmanın birkaç örneğini verelim.

Örnek 1'deki verilerden üretilen bir dizi sözde rasgele sayının her seferinde tekrarlanacağı bulundu. m/ 4 numara. Sayı Q hesaplamalara başlamadan önce keyfi olarak ayarlanır, ancak serinin büyük için rastgele olduğu izlenimi verdiği akılda tutulmalıdır. k(bunun anlamı Q). Sonuç, aşağıdaki durumlarda biraz iyileştirilebilir: B tuhaf ve k= 1 + 4 Q - bu durumda, satır her seferinde tekrarlanacaktır. m sayılar. Uzun bir aramadan sonra k araştırmacılar 69069 ve 71365 değerlerine karar verdiler.

Örnek 2'deki verileri kullanan bir rasgele sayı üreteci, 7 milyon periyotlu rasgele tekrarlanmayan sayılar üretecektir.

Sözde rasgele sayılar üretmek için çarpma yöntemi, 1949'da D. H. Lehmer tarafından önerildi.

Jeneratörün kalitesini kontrol etme

Tüm sistemin kalitesi ve sonuçların doğruluğu RNG'nin kalitesine bağlıdır. Bu nedenle, RNG tarafından üretilen rastgele dizi bir dizi kriteri karşılamalıdır.

Yapılan kontroller iki tiptir:

  • dağılımın tekdüzeliğini kontrol eder;
  • istatistiksel bağımsızlığı kontrol eder.

Dağıtım tekdüzelik kontrolleri

1) RNG, tek tip bir rastgele yasanın karakteristiği olan aşağıdaki istatistiksel parametre değerlerine yakın üretmelidir:

2) Frekans testi

Frekans testi, aralığa kaç sayı düştüğünü bulmanızı sağlar. (m r – σ r ; m r + σ r) , yani (0,5 - 0,2887; 0,5 + 0,2887) veya nihayetinde (0,2113; 0,7887). 0.7887 - 0.2113 = 0.5774 olduğundan, iyi bir RNG'de bırakılan tüm rastgele sayıların yaklaşık %57.7'sinin bu aralığa düşmesi gerektiği sonucuna varırız (bkz. Şekil 22.9).

Pirinç. 22.9. İdeal bir RNG'nin frekans diyagramı
bir frekans testi için kontrol edilmesi durumunda

Ayrıca, aralıktaki (0; 0,5) sayı sayısının, aralıktaki (0,5; 1) sayı sayısına yaklaşık olarak eşit olması gerektiği unutulmamalıdır.

3) Ki-kare testi

Ki-kare testi (χ 2 testi) en ünlü istatistiksel testlerden biridir; diğer kriterlerle birlikte kullanılan ana yöntemdir. Ki-kare testi, 1900 yılında Karl Pearson tarafından önerildi. Dikkat çekici çalışması, modern matematiksel istatistiklerin temeli olarak kabul edilir.

Bizim durumumuz için ki-kare testi, gerçek RNG, RNG standardına yakındır, yani düzgün dağılım şartını karşılayıp karşılamadığı.

Frekans diyagramı referans RNG, Şekil 2'de gösterilmektedir. 22.10. Referans RNG'nin dağılım yasası tek tip olduğundan, (teorik) olasılık P ben sayıları vurmak ben th aralığı (tüm bu aralıklar k) eşittir P ben = 1/k ... Ve böylece, her birinde k aralıklar düşecek düzüzerinde P ben · n sayılar ( nÜretilen sayıların toplam sayısıdır).

Pirinç. 22.10. Referans RNG'nin frekans diyagramı

Gerçek bir RNG, dağıtılmış (ve mutlaka eşit olması gerekmez!) k aralıklar ve her aralık şunları içerecektir n ben sayılar (toplamda n 1 + n 2 + ... + n k = n ). Test edilen RNG'nin ne kadar iyi olduğunu ve referansa ne kadar yakın olduğunu nasıl belirleriz? Alınan sayı sayısı arasındaki farkların karelerini dikkate almak oldukça mantıklıdır. n ben ve "referans" P ben · n ... Onları ekleyelim ve sonuç olarak şunu elde ederiz:

χ 2 exp. = ( n 1 - P 1 · n) 2 + (n 2 - P 2 n) 2 + ... + ( n k – P k · n) 2 .

Bu formülden, her bir terimdeki fark ne kadar küçükse (ve dolayısıyla χ 2 exp. değeri ne kadar küçükse), gerçek RNG tarafından üretilen rasgele sayıların dağılım yasasının o kadar güçlü olduğu sonucu çıkar.

Önceki ifadede, terimlerin her birine aynı ağırlık (1'e eşit) atanmıştır, bu aslında gerçeğe karşılık gelmeyebilir; bu nedenle ki-kare istatistiği için her birini normalize etmek gerekir. ben-th terimi, onu bölerek P ben · n :

Son olarak, ortaya çıkan ifadeyi daha kompakt bir şekilde yazıp sadeleştiriyoruz:

için ki-kare testinin değerini elde ettik. deneysel veri.

Tablo 22.2 verildi teorik ki-kare değerleri (χ 2 teorisi), nerede ν = n- 1, serbestlik derecesi sayısıdır, P RNG'nin tek tip dağıtım gereksinimlerini ne kadar karşılaması gerektiğini gösteren kullanıcı tanımlı güven düzeyi mi, yoksa P — bu, χ 2 exp deneysel değerinin olasılığıdır. tablolaştırılmış (teorik) χ 2 teorisinden daha az olacaktır. ya da ona eşit.

Tablo 22.2.
χ 2 dağılımının bazı yüzde puanları
p = %1 p = %5 p = %25 p = %50 p = %75 p = %95 p = %99
ν = 1 0.00016 0.00393 0.1015 0.4549 1.323 3.841 6.635
ν = 2 0.02010 0.1026 0.5754 1.386 2.773 5.991 9.210
ν = 3 0.1148 0.3518 1.213 2.366 4.108 7.815 11.34
ν = 4 0.2971 0.7107 1.923 3.357 5.385 9.488 13.28
ν = 5 0.5543 1.1455 2.675 4.351 6.626 11.07 15.09
ν = 6 0.8721 1.635 3.455 5.348 7.841 12.59 16.81
ν = 7 1.239 2.167 4.255 6.346 9.037 14.07 18.48
ν = 8 1.646 2.733 5.071 7.344 10.22 15.51 20.09
ν = 9 2.088 3.325 5.899 8.343 11.39 16.92 21.67
ν = 10 2.558 3.940 6.737 9.342 12.55 18.31 23.21
ν = 11 3.053 4.575 7.584 10.34 13.70 19.68 24.72
ν = 12 3.571 5.226 8.438 11.34 14.85 21.03 26.22
ν = 15 5.229 7.261 11.04 14.34 18.25 25.00 30.58
ν = 20 8.260 10.85 15.45 19.34 23.83 31.41 37.57
ν = 30 14.95 18.49 24.48 29.34 34.80 43.77 50.89
ν = 50 29.71 34.76 42.94 49.33 56.33 67.50 76.15
ν > 30 ν + kare (2 ν ) · x P+ 2/3 x 2 P- 2/3 + Ö(1 / kare ( ν ))
x P = –2.33 –1.64 –0.674 0.00 0.674 1.64 2.33

Kabul edilebilir olarak kabul edildi P %10'dan %90'a.

Eğer χ 2 exp. χ 2 teorisinden çok daha fazlası. (yani P- büyük), ardından jeneratör tatmin etmiyor tekdüze dağılım gereksinimi, çünkü gözlenen değerler n ben teorikten çok uzaklaşmak P ben · n ve rastgele kabul edilemez. Başka bir deyişle, güven aralığı o kadar büyüktür ki sayılar üzerindeki kısıtlamalar çok gevşer, sayılar üzerindeki gereksinimler zayıflar. Bu durumda, çok büyük bir mutlak hata gözlemlenecektir.

D. Knuth bile "The Art of Programming" adlı kitabında χ 2 deneyime sahip olduğunu kaydetti. küçük de genel olarak iyi değil, ilk bakışta tekdüzelik açısından harika görünse de. Gerçekten de, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, ... sayılarından oluşan bir dizi alın - bakış açısından idealdirler. tekdüzelik ve χ 2 exp. pratikte sıfır olacaktır, ancak bunları rastgele olarak tanımanız pek olası değildir.

Eğer χ 2 exp. χ 2 teorisinden çok daha az. (yani P- küçük), sonra jeneratör tatmin etmiyor gözlemlenen değerler olduğundan, rastgele bir düzgün dağılımın gerekliliği n ben teorik olarak çok yakın P ben · n ve rastgele kabul edilemez.

Ama eğer χ 2 exp. χ 2 teoreminin iki değeri arasında belirli bir aralıkta yer alır. karşılık gelen, örneğin, P= %25 ve P= %50, o zaman sensör tarafından üretilen rastgele sayıların değerlerinin tamamen rastgele olduğunu varsayabiliriz.

Ayrıca, tüm değerlerin akılda tutulması gerekir. P ben · n yeterince büyük, örneğin 5'ten fazla olmalıdır (deneysel olarak bulunur). Ancak o zaman (yeterince büyük bir istatistiksel örnekle) deney koşulları tatmin edici olarak kabul edilebilir.

Bu nedenle, doğrulama prosedürü aşağıdaki gibidir.

İstatistiksel bağımsızlık testleri

1) Bir dizideki bir basamağın oluşma sıklığını kontrol edin

Bir örneğe bakalım. Rastgele sayı 0.2463389991, 2463389991 rakamlarından oluşur ve 0.5467766618 sayısı 5467766618 rakamlarından oluşur. Rakam dizilerini birleştirdiğimizde: 24633899915467766618.

Açıktır ki teorik olasılık P ben serpintiler ben-inci basamak (0'dan 9'a kadar) 0,1'dir.

2) Aynı sayı dizilerinin görünümünü kontrol etme

ile belirtelim n L ardışık uzunluk basamaklarının dizi sayısı L... Her şeyin kontrol edilmesi gerekiyor L 1'den m, nerede m Kullanıcı tarafından belirlenen bir sayıdır: bir dizide meydana gelen maksimum aynı basamak sayısı.

"24633899915467766618" örneğinde 2 dizi uzunluk 2 (33 ve 77) bulunmuştur, yani n 2 = 2 ve 2 seri 3 uzun (999 ve 666), yani n 3 = 2 .

uzunluğundaki bir serinin olma olasılığı L eşittir: P L= 9 10 - L (teorik). Yani, bir karakter uzunluğunda bir dizi olasılığı: P 1 = 0,9 (teorik). İki karakter uzunluğunda bir dizi olasılığı: P 2 = 0,09 (teorik). Üç karakter uzunluğunda bir çizginin olasılığı: P 3 = 0,009 (teorik).

Örneğin, bir karakter uzunluğundaki bir dizinin olasılığı P L= 0.9, çünkü 10 karakterden sadece biri ile karşılaşılabilir ve toplamda 9 karakter vardır (sıfır sayılmaz). Ve iki özdeş "XX" sembolünün bir satırda ortaya çıkma olasılığı 0.1 · 0.1 · 9'dur, yani, "X" sembolünün ilk konumda görünmesi 0.1 olasılığı, aynı sembolün 0.1 olasılığı ile çarpılır. ikinci "X" konumunda görünür ve bu tür kombinasyonların sayısı ile çarpılır 9.

Serilerin oluşma sıklığı, değerler kullanılarak daha önce analiz edilen "ki-kare" formülüne göre hesaplanır. P L .

Not: Jeneratör birçok kez kontrol edilebilir, ancak kontroller tamamlanmamıştır ve jeneratörün rastgele sayılar ürettiğini garanti etmez. Örneğin, 12345678912345 ... dizisini yayınlayan bir üreteç, kontroller sırasında ideal olarak kabul edilecektir ve bu açıkça tamamen doğru değildir.

Sonuç olarak, Donald E. Knuth'un "Programlama Sanatı" (cilt 2) kitabının üçüncü bölümünün tamamen rastgele sayıların incelenmesine ayrıldığını not ediyoruz. Rastgele sayılar üretmek için çeşitli yöntemleri, rasgelelik için istatistiksel kriterleri ve düzgün dağılmış rasgele sayıların diğer rasgele değişken türlerine dönüştürülmesini araştırır. Bu materyalin sunumuna iki yüzden fazla sayfa ayrılmıştır.

Bilgisayarda rastgelelik nedir? Rastgele sayı üretimi nasıl yapılır? Bu yazımızda bu sorulara basit cevaplar vermeye çalıştık.

Yazılımda ve genel olarak teknolojide, tekrarlanabilir rastgeleliğe ihtiyaç vardır: Rastgele görünen sayılar ve resimler aslında belirli bir algoritma tarafından üretilir. Buna sözde rastgelelik denir ve sözde rastgele sayılar yaratmanın basit yollarına bakacağız. Makalenin sonunda, bu rastgele sayıları oluşturmak için basit bir teorem formüle edeceğiz.

Tam olarak neyin rastgele olduğunu belirlemek göz korkutucu bir görev olabilir. Size bir dizinin ne kadar rastgele olduğuna dair kesin bir ölçüm verebilecek testler (Kolmogorov karmaşıklığı gibi) vardır. Ancak zahmet etmeyeceğiz, sadece birbiriyle alakasız görünecek bir sayı dizisi oluşturmaya çalışacağız.

Çoğu zaman, yalnızca bir sayıya değil, sürekli olarak oluşturulan birkaç rastgele sayıya ihtiyacınız vardır. Bu nedenle, başlangıç ​​değeri verildiğinde, başka rasgele sayılar oluşturmamız gerekir. Bu başlangıç ​​değeri denir tohum ve nasıl alacağımızı daha sonra göreceğiz. Şimdilik, diğer rastgele değerler oluşturmaya odaklanalım.

Tohumdan rasgele sayılar üretme

Bir yaklaşım, bir tohuma çılgın bir matematiksel formül uygulamak, ardından çıktının tahmin edilemez görünmesi için onu çarpıtmak ve ardından bir sonraki yineleme için bir tohum olarak almak olabilir. Tek soru, bu bozulma işlevinin nasıl görünmesi gerektiğidir.

Bu fikri deneyelim ve bizi nereye götürdüğünü görelim.

Bozulma işlevi bir değer alır ve başka bir değer döndürür. R diyelim.

R (Giriş) -> Çıkış

Tohumumuzun değeri 1 ise, R 1, 2, 3, 4, ... şeklinde bir satır oluşturacaktır. Şimdi R'nin 1 yerine bir sabit eklemesine izin verin.

R(x) = x + c

Eğer c, örneğin 7'ye eşitse, o zaman 1, 8, 15, 22, ... satırını alırız. Hâlâ aynı değil. Açıkçası, eksik olduğumuz şey, sayıların sadece artmaması, aynı zamanda bir aralığa dağılmış olmaları gerektiğidir. Dizimizin başa dönmesini istiyoruz - bir sayı çemberi!

Sayı çemberi

Saat kadranına bakalım: sıramız 1'den başlıyor ve 12'ye kadar bir daire içinde gidiyor. Ama bir bilgisayarla çalıştığımız için 12 yerine 0 olsun.

Şimdi 1'den başlayarak tekrar 7'yi ekleyeceğiz. İlerleme! 12'den sonra hangi tarihten başlarsak başlasın sıramızın kendini tekrar etmeye başladığını görüyoruz.

Burada çok önemli bir özellik elde ederiz: eğer döngümüz n elemandan oluşuyorsa, o zaman tekrar etmeye başlamadan önce alabileceğimiz maksimum eleman sayısı n'dir.

Şimdi R fonksiyonunu mantığımıza uyacak şekilde yeniden yazalım. Modül operatörünü veya modül operatörünü kullanarak bir döngünün uzunluğunu sınırlayabilirsiniz.

R (x) = (x + c)% m

R (x) = (x + c)% m

Bu noktada bazı sayıların c için uygun olmadığını fark edebilirsiniz. c = 4 ise ve 1 ile başlasaydık dizimiz 1, 5, 9, 1, 5, 9, 1, 5, 9, ... olurdu ki bu elbette bize uymaz çünkü bu dizi kesinlikle doğru değildir. rastgele. Döngü uzunluğu ve atlama uzunluğu için seçtiğimiz sayıların özel bir şekilde ilişkilendirilmesi gerektiği ortaya çıkıyor.

Birkaç farklı değer denerseniz, bir özellik görebilirsiniz: m ve c asal olmalıdır.

Şimdiye kadar toplama yaparak "zıplama" yapıyorduk, peki ya çarpma işlemini kullanırsak? Çarpmak NS bir sabit tarafından a.

R (x) = (ax + c)% m

R (x) = (ax + c)% m

Tam bir döngü oluşturmak için a'nın uyması gereken özellikler biraz daha spesifiktir. Doğru bir döngü oluşturmak için:

  1. (a - 1) tüm m asal çarpanlarına bölünebilmelidir
  2. (a - 1) m 4'e bölünebiliyorsa 4'e bölünebilir olmalıdır

Bu özellikler, m ve c'nin asal olması gerektiği kuralıyla birlikte Hall-Dobelle teoremini oluşturur. Kanıtını dikkate almayacağız, ancak farklı sabitler için bir sürü farklı değer aldıysanız, aynı sonuca varabilirsiniz.

Tohum seçimi

Şimdi eğlenceli kısım hakkında konuşma zamanı: ilk tohumun seçimi. Bunu sabit hale getirebiliriz. Bu, rastgele sayılara ihtiyaç duyduğunuz, ancak programı her çalıştırdığınızda aynı olmalarını istediğiniz durumlarda faydalı olabilir. Örneğin, her oyun için aynı haritayı oluşturmak.

Başka bir yol da, sistem saatinde olduğu gibi, program her başladığında yeni bir kaynaktan tohum almaktır. Bu, bir zar atma programında olduğu gibi, toplam rastgele bir sayıya ihtiyacınız olduğunda kullanışlıdır.

Son sonuç

Bir işlevi sonucuna birden çok kez uyguladığımızda, bir yineleme ilişkisi elde ederiz. Formülümüzü özyineleme kullanarak yazalım.

vb. ve hesap sahipleri tarafından topluluğa yeni izleyiciler çekmek için kullanılır.

Ödülün alıcısı rastgele belirlendiğinden, bu tür çekilişlerin sonucu genellikle kullanıcının şansına bağlıdır.

Bu belirleme için, çekiliş organizatörleri neredeyse her zaman çevrimiçi bir rastgele sayı üreteci veya ücretsiz olarak dağıtılan önceden yüklenmiş bir sayı üreteci kullanır.

Tercih

Oldukça sık, böyle bir jeneratörü seçmek zor olabilir, çünkü işlevleri oldukça farklıdır - bazıları için önemli ölçüde sınırlıdır, diğerleri için oldukça geniştir.

Oldukça fazla sayıda bu tür hizmetler uygulanmaktadır, ancak zorluk, kapsam bakımından farklılık göstermeleridir.

Örneğin birçoğu, işlevleriyle belirli bir sosyal ağa bağlıdır (örneğin, birçok oluşturucu uygulaması yalnızca bunun bağlantılarıyla çalışır).

Çoğu basit üreteç, belirli bir aralıktaki bir sayıyı rastgele belirler.

Bu, sonucu belirli bir gönderiyle ilişkilendirmediğinden kullanışlıdır; bu, sosyal ağ dışında oynarken ve çeşitli diğer durumlarda kullanılabileceği anlamına gelir.

Aslında, başka bir uygulamaları yok.

Tavsiye! En uygun jeneratörü seçerken hangi amaçla kullanılacağını dikkate almak önemlidir.

Özellikler

Rastgele sayılar üretmek için en uygun çevrimiçi hizmeti seçmenin en hızlı süreci için, aşağıdaki tablo bu tür uygulamaların ana teknik özelliklerini ve işlevselliğini göstermektedir.

Tablo 1. Rastgele bir sayı üretmek için çevrimiçi uygulamaların işleyişinin özellikleri
İsim Sosyal ağ Birden çok sonuç Numara listesinden seçme Site için çevrimiçi widget Aralık seçimi Tekrarları devre dışı bırakma
RandStuff Evet Evet Numara Evet Numara
Döküm Lotları Resmi web sitesi veya VKontakte Numara Numara Evet Evet Evet
rastgele sayı Resmi site Numara Numara Numara Evet Evet
rastgele Resmi site Evet Numara Numara Evet Numara
Rastgele sayılar Resmi site Evet Numara Numara Numara Numara

Tabloda tartışılan tüm uygulamalar aşağıda daha ayrıntılı olarak açıklanmaktadır.

RandStuff

Bu uygulamayı, resmi web sitesi http://randstuff.ru/number/ bağlantısını takip ederek çevrimiçi olarak kullanabilirsiniz.

Bu basit bir rastgele sayı üretecidir, hızlı ve istikrarlı performans ile karakterizedir.

Hem resmi web sitesinde ayrı bir bağımsız uygulama olarak hem de bir uygulama olarak başarıyla uygulanmaktadır.

Bu hizmetin özelliği, hem belirtilen aralıktan hem de sitede belirtilebilecek belirli bir numara listesinden rastgele bir sayı seçebilmesidir.

  • Kararlı ve hızlı çalışma;
  • Bir sosyal ağa doğrudan bağlantı eksikliği;
  • Bir veya birkaç numara seçebilirsiniz;
  • Yalnızca belirtilen numaralardan seçim yapabilirsiniz.

Bu uygulamanın kullanıcı yorumları şu şekildedir: “Bu hizmet aracılığıyla VKontakte gruplarındaki kazananları belirliyoruz. Teşekkür ederim "," Sen en iyisisin "," Sadece bu hizmeti kullanıyorum "

Döküm Lotları

Bu uygulama, resmi web sitesinde bir VKontakte uygulaması şeklinde uygulanan basit bir işlevsel jeneratördür.

Ayrıca sitenize yerleştirmek için bir jeneratör widget'ı da vardır.

Açıklanan önceki uygulamadan temel farkı, sonucun tekrarını devre dışı bırakmanıza izin vermesidir.

Çeşitli piyangolar, çekilişler vb. genellikle birçok grup veya halka açık yerlerde yapılır. sosyal ağlar, Instagram vb. hesap sahipleri tarafından topluluğa yeni izleyiciler çekmek için kullanılır.

Ödülün alıcısı rastgele belirlendiğinden, bu tür çekilişlerin sonucu genellikle kullanıcının şansına bağlıdır.

Bu belirleme için, çekiliş organizatörleri neredeyse her zaman çevrimiçi bir rastgele sayı üreteci veya ücretsiz olarak dağıtılan önceden yüklenmiş bir sayı üreteci kullanır.

Tercih

Oldukça sık, böyle bir jeneratörü seçmek zor olabilir, çünkü işlevleri oldukça farklıdır - bazıları için önemli ölçüde sınırlıdır, diğerleri için oldukça geniştir.

Oldukça fazla sayıda bu tür hizmetler uygulanmaktadır, ancak zorluk, kapsam bakımından farklılık göstermeleridir.

Örneğin birçoğu, işlevleriyle belirli bir sosyal ağa bağlıdır (örneğin, VKontakte'deki birçok jeneratör uygulaması yalnızca bu sosyal ağdan gelen bağlantılarla çalışır).

Çoğu basit üreteç, belirli bir aralıktaki bir sayıyı rastgele belirler.

Bu, sonucu belirli bir gönderiyle ilişkilendirmediğinden kullanışlıdır; bu, sosyal ağ dışında oynarken ve çeşitli diğer durumlarda kullanılabileceği anlamına gelir.

Aslında, başka bir uygulamaları yok.

<Рис. 1 Генератор>

Tavsiye! En uygun jeneratörü seçerken hangi amaçla kullanılacağını dikkate almak önemlidir.

Özellikler

Rastgele sayılar üretmek için en uygun çevrimiçi hizmeti seçmenin en hızlı süreci için, aşağıdaki tablo bu tür uygulamaların ana teknik özelliklerini ve işlevselliğini göstermektedir.

Tablo 1. Rastgele bir sayı üretmek için çevrimiçi uygulamaların işleyişinin özellikleri
İsim Sosyal ağ Birden çok sonuç Numara listesinden seçme Site için çevrimiçi widget Aralık seçimi Tekrarları devre dışı bırakma
RandStuff Evet Evet Numara Evet Numara
Döküm Lotları Resmi web sitesi veya VKontakte Numara Numara Evet Evet Evet
rastgele sayı Resmi site Numara Numara Numara Evet Evet
rastgele Resmi site Evet Numara Numara Evet Numara
Rastgele sayılar Resmi site Evet Numara Numara Numara Numara

Tabloda tartışılan tüm uygulamalar aşağıda daha ayrıntılı olarak açıklanmaktadır.

<Рис. 2 Случайные числа>

RandStuff

<Рис. 3 RandStuff>

Bu uygulamayı, resmi web sitesi http://randstuff.ru/number/ bağlantısını takip ederek çevrimiçi olarak kullanabilirsiniz.

Bu basit bir rastgele sayı üretecidir, hızlı ve istikrarlı performans ile karakterizedir.

Hem resmi web sitesinde ayrı bir bağımsız uygulama olarak hem de VKontakte sosyal ağında bir uygulama olarak başarıyla uygulanmaktadır.

Bu hizmetin özelliği, hem belirtilen aralıktan hem de sitede belirtilebilecek belirli bir numara listesinden rastgele bir sayı seçebilmesidir.

Artıları:

  • Kararlı ve hızlı çalışma;
  • Bir sosyal ağa doğrudan bağlantı eksikliği;
  • Bir veya birkaç numara seçebilirsiniz;
  • Yalnızca belirtilen numaralardan seçim yapabilirsiniz.

eksileri:

  • VKontakte çekilişi yapamama (bu, ayrı bir başvuru gerektirir);
  • VKontakte uygulamaları tüm tarayıcılarda başlatılmaz;
  • Yalnızca bir hesaplama algoritması kullanıldığından sonuç bazen tahmin edilebilir görünebilir.

Bu uygulamanın kullanıcı yorumları şu şekildedir: “Bu hizmet aracılığıyla VKontakte gruplarındaki kazananları belirliyoruz. Teşekkür ederim "," Sen en iyisisin "," Sadece bu hizmeti kullanıyorum "

Döküm Lotları

<Рис. 4 Cast Lots>

Bu uygulama, resmi web sitesinde bir VKontakte uygulaması şeklinde uygulanan basit bir işlevsel jeneratördür.

Ayrıca sitenize yerleştirmek için bir jeneratör widget'ı da vardır.

Açıklanan önceki uygulamadan temel farkı, sonucun tekrarını devre dışı bırakmanıza izin vermesidir.

Yani, bir seansta arka arkaya birkaç nesil yürütürken, sayı tekrarlanmayacaktır.

  • Bir web sitesine veya bloga yerleştirmek için bir widget'ın varlığı;
  • Sonucun tekrarını devre dışı bırakma yeteneği;
  • Aktivasyonundan sonra seçim algoritmasının değiştiği "daha fazla rastgelelik" fonksiyonunun varlığı.

Olumsuz:

  • Aynı anda birkaç sonucu belirlemenin imkansızlığı;
  • Belirli bir sayı listesinden seçim yapamama;
  • Kamuoyunda bir kazanan seçmek için ayrı bir VKontakte widget'ı kullanmalısınız.

Kullanıcı yorumları şu şekildedir: “Kararlı çalışıyor, kullanımı oldukça uygun”, “Kullanışlı işlevsellik”, “Sadece bu hizmeti kullanıyorum”.

rastgele sayı

<Рис. 5 Случайное число>

Bu hizmet http://rastgele sayı.rf/ adresinde bulunur.

Basit jeneratör minimum işlevler ve ek özellikler.

Belirli bir aralıkta rastgele sayılar üretebilir (maksimum 1'den 99999'a kadar).

Sitenin herhangi bir grafik tasarımı yoktur ve bu nedenle sayfanın yüklenmesi kolaydır.

Sonuç tek bir tuşa basılarak kopyalanabilir veya indirilebilir.

Olumsuz:

  • VKontakte için bir widget eksikliği;
  • Berabere kalma olasılığı yoktur;
  • Sonucu bir bloga veya web sitesine eklemenin bir yolu yoktur.

Kullanıcılar bu hizmet hakkında şunları söylüyor: "Kötü bir jeneratör değil, ancak yeterli işlev yok", "Çok az özellik", "Gereksiz ayarlar olmadan hızlı sayı üretimi için uygun."

rastgele

<Рис. 6 Рандомус>

Bu rastgele sayı üretecini http://randomus.ru/ adresinde kullanabilirsiniz.

Bir tane daha, yeterince basit, ama fonksiyonel rastgele sayı üreteci.

Hizmet, rastgele sayıları belirlemek için yeterli işlevselliğe sahiptir, ancak çekiliş ve diğer daha karmaşık işlemler için uygun olmayacaktır.

Olumsuz:

  • Bir gönderinin gönderileri için çizim tutmanın imkansızlığı vb.
  • VKontakte için uygulama veya site için widget yok;
  • Yinelenen sonuçlar kapatılamıyor.