Sahte rasgele sayı üretecimin süresini nasıl belirleyebilirim?


14

Diyelim ki lineer kongruential pseudo-random sayı üreteci (PRNG) kullanıyorum. Bir tohum , çarpma faktörü (a), kaydırma faktörü (c) ve modül faktörü (m) göz önüne alındığında , PRNG süremi nasıl belirleyebilirim? Bunu deneme / kalıp algılama algoritmalarıyla mı belirleyebilirim, yoksa süresini hesaplamak için doğrudan bir formül var mı? x0

Sorum her ne kadar doğrusal doğrusal yöntemle ilgili olsa da, diğer PRNG'ler için de pratikte dönemlerin nasıl hesaplandığı hakkında daha fazla bilgi sahibi olmaya açıkım.



BTW, eğer LFSR kullanıyorsanız, o zaman geri besleme polinomu ilkel ise süre maksimumdur . Böyle bir durumda, nokta AFAIK (bana teklif yoktur; zaman programı notlar kazıp çok yavaş) olan burada geri bildirim polinom arasında derece ve katsayılar alanının boyutudur. qnp(x)Fq[x]nq

2
Floyd'un döngü algılama algoritmalarının yanı sıra Brent'in döngü algılama algoritmalarının her ikisi de döngüleri tespit etmenin etkili yoludur. Her ikisi de dönemin birden fazla L'sini döndürür ve buna sahip olduğunuzda L'yi çarpanlarına ayırabilir ve hangisinin bir dönem olan en küçük faktör olduğunu görebilirsiniz.
xdavidliu

Yanıtlar:


12

Kendinizi tam döngü LCG PRNG'lerle sınırlarsanız , cevap kolaydır, tanım gereği .m

Belirli bir tohum için tam zamanlı olmayan bir LCG PRNG süresini bulmak için, tohum değerini bir kez daha üretene kadar PRNG'nin tekrar sayısını saymanız yeterlidir.

Başvurulan wikipedia sayfasından :

Dönem uzunluğu

Dönem genel LCG en fazla olan ve bundan çok daha az bazı seçimler için. Kaydıyla sıfırdan farklı olduğu, LCG tüm tohum değerleri için tam bir süre var olacak ancak ve ancak :mc

  • c ve olan göreceli asal ,m
  • a1 tüm bölünemeyen asal faktörlerin arasındam
  • a1 , , 4'ün katı ise 4'ün katlarıdır.m

LCG'ler uygun sahte sayılar üretebilirken , bu , ve parametrelerinin seçimine son derece duyarlıdır .cma

Tarihsel olarak, zayıf seçimler LCG'lerin etkisiz uygulamalarına yol açmıştı. Bunun özellikle örnektir Randu yaygın 1970'lerin başında kullanılan ve şu anda çünkü bu kötü LCG kullanımının sorguya çekiliyor birçok sonuçlara yol oldu.

Neden tam zamanlı bir jeneratör kullanmak istiyorsunuz?

Kendinizi tam zamanlı LCG PRNG'lerle kısıtlamıyorsanız, büyük bir risk alıyorsunuz demektir .

Eğer yoksa biliyorum belirli bir LCG tam döngü sonra olduğunu olabileceğin bazıları karşılıklı olarak farklı dizilerin, keyfi bir sayı ile bir jeneratör ile bitebileceğini utanç verici rezil daha muhtemelen daha da kötü, küçük ve korkunç rastlantısallığını var Randu jeneratör .

Uygulamanız için yeterince uzun bir sıra oluşturduğundan emin olmak için olası her tohum değerini kontrol etmek istemezsiniz.

daha fazla okuma

Sahte rasgele sayı üreteçlerinde mükemmel bir astar için , Rasgele Sayılar'daki Sayısal Tarifler bölümünü okumanızı şiddetle tavsiye ederim .


Bu doğru, ama kendimi tam dönem LCG PRNG'lerle kısıtlamıyorum ... Tam periyodu elde etmeyen rasgele akışlar olacak şekilde a, c ve m'nin zayıf seçimlerini merak ediyorum. Zamanın kaçınılmaz olarak ne olacağı konusunda önceden a, c ve m verildiğini bilmek istiyorum. Üst sınırın m ile sınırlı olduğunu biliyorum, ama bundan daha iyisini yapıp kesin dönemi elde edip edemeyeceğimizi merak ediyordum.
Paul

Bunun kılları bir teknikliğe böldüğünü sanmıyorum: soru "bir LCG'nin süresini rastgele parametrelerle nasıl belirleyeceğimiz" iken, bu cevap "keyfi LCG'leri kullanma, her zaman tam zamanlı LCG'leri kullanma, ve bunu yaptığınızı varsayarsak , sorunun cevabı tanım gereği mümkün olan en uzun süre olacaktır ". Bu cevapta ortaya konan tam dönem LCF'leri kullanma argümanı mükemmel bir şekilde ikna edicidir, ancak sorun şu ki, sorunun sorusu hiç de bu değildir.
xdavidliu

Üzgünüz @ xdavidliu ama yeni yorumunuzun cevabımı geliştirmeme nasıl yardımcı olduğunu görmüyorum. Soruyu gerçekten cevaplamadığımma dikkatimi çektin, cevabımı düzeltmek için düzenledim ve sonra seni gülümsetebileceğini düşündüğüm bir şekilde (bir Futurama hayranıysan) bildir. Daha fazla bir şey söylenmesi gerektiğini görmüyorum.
Mark Booth

Yığın değişiminde, yorumların Hesaplamalı Bilim Sohbeti'ni kullanması için genişletilmiş tartışmalar için tasarlanmadığını unutmayın . Yorumlar, soruları ve cevapları geliştirmeye yardımcı olmak içindir ve dikkat dağıtıcıdır, bu yüzden bunları minimumda tutmaya çalışıyoruz. Yorumlar kısa ömürlü, artık etkin bir soru geliştirmek veya cevap istediği zaman silinebilir yardımcı herhangi bir yorum düşünülmelidir çeki düzen bir yazı.
Mark Booth
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.