Günlük hayatımızda kimi durumlarda zar atmak, kura çekmek, yazı tura için para atmak gibi çeşitli faaliyetlerde bulunuruz. Bu faaliyetler farklı olasılıklar sonucu rastgele bir biçimde gelişir. Örneğin zar attığınızda düşeş gelme olasılığı 21 farklı olasılıktan bir tanesi olup rastgele bir şekilde gerçekleşmiş bir olaydır. Fakat iş programlama dillerine geldiğinde rastgelelik pek de rasgele olmuyor. Birçok programlama dili farklı sözde rastgele sayı dizisi üretme metodları vardır. Bu metodlar şu şekilde işlerler:
- Adım: Giriş olarak bir başlangıç değeri ya da daha önceden alınmış bir veri kullan.
- Adım: Bu değeri uygulanan metoda göre çeşitli matematiksel işlemlerden geçir.
- Adım: Elde edilen değeri tekrardan kullanmak için hafızada tut.
- Adım: İstenilen uzunluğa ulaşana kadar aynı algoritmayı kullanmaya devam et.
Yani rastgelelik algoritması için kullanılan belirli bir formül vardır ve bu formül belirli bir giriş değeriyle başlayıp bu giriş değerinden alınan çıktıyı bir sonraki çıktıya ulaşmak için formüle girdi olarak kullanır. İlk çıktıdan sonraki her girdi bir önceki işlemin çıktısıdır.
Günümüzdeki en popüler programlama dillerinden birinden olan Python rastgele bir sayı veya harf seçmek için gerekli fonksiyonlarını bulunduran Random kütüphanesinde Mersenne sayılarını kullanır. Bu sayı dizisi 219937-1’lik bir periyoda sahiptir. Bu sayı dizisi sözde rastgele sayı oluşturucular arasında en popülerlerindendir. Ancak deterministik bir yapıya sahip olduğu için kriptoloji gibi alanlarda kullanılmaz.
Yine popüler bir programlama dili olan Java’ya baktığımızda doğrusal eşlenik üretici adı verilen bir sayı dizisi üretme metodu kullanılır. 1949 yılında matematikçi Lehmer tarafından oluşturulmuş bu method ile üretilen sayı dizileri ile aynı kaynaktan iki dizi örneği oluşturulursa ve her biri için aynı yöntem çağrıları yapılırsa, aynı sayı dizilerini üretecekler ve döndüreceklerdir. Bu özelliği garanti etmek için Java’nın içerisindeki Random kütüphanesi için belirli algoritmalar belirtilmiştir. Java uygulamalarının, Java kodunun mutlak taşınabilirliği adına burada Random sınıfı için gösterilen tüm algoritmaları kullanması gerekir. Bununla birlikte, tüm yöntemler için genel sözleşmelere uydukları sürece, Random sınıfının alt sınıflarının başka algoritmaları kullanmasına izin verilir.
Kaynakça:
https://docs.python.org/3/library/random.html
https://www.sciencedirect.com/science/article/pii/B9780128093627500108
https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#next-int-