Rastgele sayı üreteci aynı tohumlar verildiğinde farklı çıktılar üretebilir mi?


10

Başlık özetliyor. DateTime.Now veya ışık sensörü vb. Gibi bir sayı için rasgele diğer kaynaklara dayanmadan aynı giriş verilen değişken çıktı üretebilen bir algoritma olup olmadığını bilmek ilgilendi. Ayrıca, algoritma çalıştırılamaz sırayla, farklı çıktı üreten sadece iki ayrı, ilgisiz çalışma.


Bahsettiğiniz şey, spesifik olarak, bir rasgele rasgele sayı üretecidir.
Marcel

Çoğu dil , tohumu belirtmek zorunda kalmadan rastgele bir sayı üretecinin başlatılmasına izin verir, böylece tohum da "rastgele" olur. Tohumların kullanılmasının bir nedeni vardır.
Neil

1
@Neil: bu durumlarda, hala bir tohum var, sadece örtük, genellikle sistem zamanı.
Michael Borgwardt

@MichaelBorgwardt, tohumun rastgele olacağını söyledim. Tabii ki hiçbir şey gerçekten rastgele değildir, ancak genellikle sistem zamanı iyi bir tohum sağlar, ancak bir tohumdan geçmeden rastgele bir sayı üretecini başlatmazsanız, bu durumda aynı tohum "rastgele" tohumunu iki kez alabilirsiniz.
Neil

İstatistiksel olarak iyi tanımlanmış bir yanlışlığa sahip olan yanlış donanıma ilişkin ilginç bir araştırma alanı var. Potansiyel fayda, daha düşük güç kullanımıdır. Sadece 2.0 + 2.0böyle bir sistemi hesaplamak aynı sonuçları vermez. Başka bir rastgelelik kaynağına ihtiyaç duymaz.
MSalters

Yanıtlar:


15

DateTime.Now veya ışık sensörü vb. Gibi rasgele için diğer kaynaklara dayanmadan aynı girdi verilen değişken çıktı üretebilen bir algoritma olup olmadığını bilmek ilgilendi.

Hayır, bu temel olarak imkansızdır, çünkü bir algoritmanın tanımı, iyi tanımlanmış ve deterministik olmasıdır, yani aynı girdiye bakıldığında her zaman aynı çıktıyı üretecektir. Rasgeleleştirilmiş algoritmalar vardır, ancak girdi olarak rasgelelik gerektirirler.

Dahası, determinizmdir bilgisayar donanımı en önemli tasarım hedefi. Aynı giriş verildiğinde aynı çıkışı üretmeyen bir CPU çoğu amaç için tamamen işe yaramaz.


14

Hayır, sözde rasgele sayı üretme algoritması her zaman aynı tohum verildiği için aynı çıktıyı üretecektir (dolayısıyla sözde rasgele).

"Program" yerine "algoritma" terimini kullandığınızı ilginç buluyorum. Bu, belirli bir evet yanıtı sınıfını (RAM'deki yumuşak hatalar, çok iş parçacıklı bir RNG'deki farklı iş parçacığı aralamaları, vb.) Hariç tutar. Algoritmanızın her çalışmasının her yinelemede aynı girdiyi aldığını, rasgele olmadan iyi belirtildiğini kabul ederseniz, her çalıştırmada aynı çıktıyı üretecektir.

Bununla birlikte, CPU sıcaklığı gibi temel şeyler bile uygun şekilde normalleştirilirlerse entropi kaynağı olarak hareket edecek kadar öngörülemez. Bu nedenle, bunun ne zaman çalıştırıldığını biliyorsanız "kriptografik olarak güvenli" rastgele sayı üretecinin tahmin edilebileceğini ima ettiğini düşünmeyin; birçoğu sistem tarafından oluşturulan entropi beslemesinden yararlanır.


Algoritma doğru kelimeydi :) Özellikle dış entropi kaynaklarını, bellek hatalarını, iplik sırasını, ışık kaynağı gibi öngörülemeyen girdileri ortadan kaldırmaya çalışıyorum. Sanırım sorum rastgele algoritmaları anlamadığım ve belki de Soruyu daha genel yapabilirdim. Gerçekten aynı giriş (tüm entropi kaynakları dahil) verilen farklı sonuçlar döndüren herhangi bir işlev oluşturmak mümkün olup olmadığını merak ediyorum. Cevap hayır gibi görünüyor
ConditionRacer

7

İnsanların aynı tohum verildiğinde her seferinde aynı rastgele sayı dizisinin üretildiğinden emin olmak için çok çalıştıklarını biliyor muydunuz? Bu, Monte Carlo simülasyonu gibi şeyler için arzu edilen bir özelliktir, çünkü sonuçların tamamen tekrarlanabilir olduğu anlamına gelir. Çekirdeği belirtmezseniz, zaman gibi bir şey kullanılır, ancak tam olarak tekrarlanabilirlik istenir.

Bu gerçekten istenmeyen yalnızca RNG'ler bu kriptografi için kullanılan, ve bu tipik olarak (normal koşullarda ve altında sarılabilir değildir işletim sisteminin kendi rasgele sayı kaynağı kullanarak elde edilebilir , tohum sağlamak için fantezi donanım kullanımı).


Evet, ne dediğini anlıyorum. Yeni bir şey uygulamaya çalışmıyorum, bu sadece gece geç saatlerde bir meraktı.
ConditionRacer

1

Eğer algoritmayı farklı donanım platformlarına uyguladıysanız ve orta N bitlerini bir tamsayıdan almak gibi teknikler kullandıysanız, tamsayı kodlaması farklıysa (büyük / küçük / orta-endian) muhtemelen farklı cevaplar alabilirsiniz. Ayrıca, kayan noktalı sayıları manipüle ediyorsanız, FPU'lu makinelerde çalışan sorunlara karşı da karşılaşabilirsiniz. Muhtemelen masaüstü sınıfı makinelerde bir sorun değil, telefonlarda bir sorun olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.