İlk algoritma çok eşit aralıklı sayılar üretir
Ayrıca bkz . Düşük tutarsızlık serisi .
[ 0 ; 1 ] aynı anda büyük 0,5'ten küçüktür: . Yaklaşımınızla şans 0'dır. Dolayısıyla verileriniz tekdüze değildir .
(Belirtildiği gibi, bu, örneğin tabakalaşma için istenen bir özellik olabilir. Halton ve Sobel gibi düşük tutarsızlık serileri do onların kullanım durumları vardır.)
Uygun ama pahalı bir yaklaşım (gerçek değerler için)
... beta dağıtılmış rasgele sayılar kullanmaktır. Düzgün dağılımın sıralama düzeni istatistiği beta dağılımlıdır. En küçük çizimleri rastgele çizmek için bunu kullanabilirsiniz , sonra ikinci en küçük, ... tekrar .
[ 0 ; 1 ]Beta [ 1 , n ]n1 - X∼ Beta [ n , 1 ]- ln( 1 - X) ∼ Üstel [ n ]- ln( U[ 0 ; 1 ] )n
- ln( 1 - x )1 - xx= - ln( 1 - u )n= u1n= 1 - u1n
Hangi aşağıdaki algoritmayı verir:
x = a
for i in range(n, 0, -1):
x += (b-x) * (1 - pow(rand(), 1. / i))
result.append(x)
Sayısal dengesizlikler olabilir pow
ve her nesne için hesaplama ve bölme, sıralamadan daha yavaş olabilir.
Tamsayı değerleri için farklı bir dağıtım kullanmanız gerekebilir.
Sıralama inanılmaz derecede ucuz, bu yüzden sadece kullanın
O ( n günlüğün )
R
. Tekdüze bir aralıkta n rasgele sayı kümesi kümesi oluşturmak için [ a , brand_array <- replicate(k, sort(runif(n, a, b))