ฉันจะกำหนดระยะเวลาของตัวสร้างตัวเลขสุ่มหลอกได้อย่างไร


14

สมมติว่าฉันกำลังใช้ตัวสร้างตัวเลขแบบสุ่มหลอกเชิงเส้น (PRNG) เมื่อได้รับเมล็ดตัวคูณการคูณ (a) ตัวเลื่อน (c) และตัวประกอบโมดูลัส (m) ฉันจะกำหนดระยะเวลาของ PRNG ได้อย่างไร ฉันจะตรวจสอบได้โดยอัลกอริธึมการทดสอบ / การตรวจจับรูปแบบหรือมีสูตรโดยตรงสำหรับการคำนวณระยะเวลาหรือไม่ x0

แม้ว่าคำถามของฉันเป็นเรื่องเกี่ยวกับวิธีการเชิงเส้นตรง แต่ฉันก็เปิดรับรู้มากขึ้นเกี่ยวกับการคำนวณระยะเวลาในทางปฏิบัติสำหรับ PRNG อื่น ๆ เช่นกัน


เกี่ยวข้อง: en.wikipedia.org/wiki/…

BTW ถ้าคุณกำลังใช้LFSRแล้วงวดเป็นสูงสุด IFF พหุนามข้อเสนอแนะคือดั้งเดิม ในกรณีเช่นนี้ช่วงเวลา AFAIK (อย่าพูดฉันขี้เกียจเกินกว่าที่จะขุดบันทึกหลักสูตรของฉัน) คือโดยที่ความคิดเห็นพหุนามp ( x ) F q [ x ]ขององศาnและqคือขนาดของ สาขาค่าสัมประสิทธิ์ qnp(x)Fq[x]nq

2
อัลกอริธึมการตรวจจับรอบของฟลอยด์เช่นเดียวกับอัลกอริธึมการตรวจจับรอบของเบรนท์เป็นวิธีที่มีประสิทธิภาพในการตรวจจับรอบ ทั้งสองจะคืนค่า L หลายช่วงเวลาและเมื่อคุณมีแล้วคุณสามารถแยกตัวประกอบ L และดูว่าอะไรคือปัจจัยที่เล็กที่สุดที่เป็นจุด
xdavidliu

คำตอบ:


12

หากคุณ จำกัด ตัวเองให้ครบวงจร LCG PRNG s แล้วคำตอบคือง่ายโดยความหมายก็เพียงเมตรm

ในการหาช่วงเวลาของวัฏจักรที่ไม่ครบวงจร LCG PRNG สำหรับเมล็ดที่กำหนดคุณเพียงแค่ต้องนับจำนวนการวนซ้ำของ PRNG จนกว่าจะสร้างค่าเมล็ดอีกครั้ง

จากหน้าวิกิพีเดียอ้างอิง:

ระยะเวลา

mc

  • cm
  • a1m
  • a1m

cma

ในอดีตตัวเลือกที่ไม่ดีได้นำไปสู่การใช้งานที่ไม่ได้ผลของ LCGs ตัวอย่างที่เป็นตัวอย่างโดยเฉพาะของเรื่องนี้คือRANDUซึ่งใช้กันอย่างแพร่หลายในต้นปี 1970 และนำไปสู่ผลลัพธ์มากมายที่กำลังถูกสอบสวนเนื่องจากการใช้ LCG ที่ไม่ดีนี้

ทำไมคุณต้องการใช้เครื่องกำเนิดรอบเต็ม

หากคุณไม่ได้บังคับตัวเองให้ทำวงจร LCG PRNG อย่างเต็มที่แสดงว่าคุณกำลังมีความเสี่ยงสูง

หากคุณไม่ทราบว่า LCG ที่กำหนดนั้นเป็นวัฏจักรเต็มแล้วคุณสามารถลงท้ายด้วยตัวกำเนิดที่มีลำดับที่แตกต่างกันโดยพลการบางอันอาจมีขนาดเล็กน่าอายและมีการสุ่มที่น่าตกใจยิ่งกว่าเครื่องกำเนิดRANDU ที่น่าอับอาย.

คุณไม่ต้องการตรวจสอบทุกค่าที่เป็นไปได้เพื่อให้แน่ใจว่ามันสร้างลำดับที่ยาวพอสำหรับแอปพลิเคชันของคุณ

อ่านเพิ่มเติม

สำหรับไพรเมอร์ที่ยอดเยี่ยมเกี่ยวกับเครื่องกำเนิดเลขสุ่มหลอกฉันขอแนะนำให้คุณอ่านบทสูตรตัวเลขในตัวเลขสุ่ม


นั่นเป็นความจริง แต่ฉันไม่ได้บังคับให้ตัวเองเต็มช่วงเวลาของ LCG PRNG ... ฉันอยากรู้เกี่ยวกับตัวเลือกที่ไม่ดีของ a, c และ m เช่นนั้นกระแสสุ่มที่ไม่บรรลุผลเต็มช่วง ฉันต้องการที่จะสามารถรู้ล่วงหน้าได้รับ a, c และ m บางช่วงเวลาจะเป็นอย่างหลีกเลี่ยงไม่ได้ ฉันรู้ว่ามันเป็นขอบเขตสูงสุดโดย m แต่ฉันสงสัยว่าถ้าเราสามารถทำได้ดีกว่านั้นและรับช่วงเวลาที่แน่นอน
เปาโล

ฉันไม่คิดว่านี่จะเป็นการแยกเส้นขนในเรื่องทางเทคนิคเลยคำถามคือ "วิธีการกำหนดระยะเวลาของ LCG ด้วยพารามิเตอร์ตามอำเภอใจ" ในขณะที่คำตอบนี้บอกว่า "อย่าใช้ LCG โดยพลการเสมอใช้ LCG แบบเต็มช่วงเวลาเสมอ และถ้าคุณทำอย่างนั้นคำตอบสำหรับคำถามของคุณจะเป็นช่วงเวลาที่เป็นไปได้สูงสุดตามคำจำกัดความ " อาร์กิวเมนต์สำหรับการใช้ LCF แบบเต็มเวลาที่วางไว้ในคำตอบนี้น่าเชื่ออย่างสมบูรณ์แบบ แต่ปัญหาก็คือนั่นไม่ใช่สิ่งที่คำถามถาม
xdavidliu

ขออภัย @xdavidliu แต่ฉันไม่เห็นว่าความคิดเห็นใหม่ของคุณจะช่วยปรับปรุงคำตอบของฉันได้อย่างไร คุณให้ความสนใจว่าฉันไม่ได้ตอบคำถามจริง ๆ ฉันได้แก้ไขคำตอบของฉันเพื่อแก้ไขปัญหานั้นแล้วแจ้งให้คุณทราบในแบบที่ฉันคิดว่าอาจทำให้คุณยิ้มได้ (ถ้าคุณเป็นแฟนฟูราม่า) ฉันไม่เห็นว่าจะต้องพูดอะไรอีก
Mark Booth

โปรดทราบว่าในการแลกเปลี่ยนสแต็ค, ความเห็นไม่ได้มีไว้สำหรับการอภิปรายขยายสำหรับการใช้งานที่วิทยาศาสตร์การพูดคุย ความคิดเห็นมีไว้สำหรับช่วยในการปรับปรุงคำถามและคำตอบและทำให้เสียสมาธิดังนั้นเราจึงพยายามให้ความสำคัญน้อยที่สุด ความคิดเห็นควรได้รับการพิจารณาชั่วคราวความคิดเห็นใด ๆ ที่ไม่ช่วยแก้ไขคำถามหรือคำตอบอาจถูกลบได้ตลอดเวลาเพื่อจัดระเบียบโพสต์
Mark Booth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.