อัลกอริทึมสำหรับการทำงานของตัวสร้างตัวเลขสุ่ม เครื่องกำเนิดตัวเลขสุ่ม วิธีสมภาคเชิงเส้น

ตัวเลขสุ่มเป็นองค์ประกอบง่ายๆ ของการเข้ารหัสที่ได้รับการพูดถึงน้อยที่สุด แต่ก็มีความสำคัญไม่แพ้ส่วนที่เหลือ ระบบรักษาความปลอดภัยคอมพิวเตอร์เกือบทั้งหมดที่ใช้การเข้ารหัสต้องใช้ตัวเลขสุ่ม - สำหรับคีย์ หมายเลขเฉพาะในโปรโตคอล ฯลฯ - และความปลอดภัยของระบบดังกล่าวมักจะขึ้นอยู่กับการสุ่มของ ตัวเลขสุ่ม- หากตัวสร้างตัวเลขสุ่มไม่น่าเชื่อถือ ระบบทั้งหมดจะพัง

การสร้างตัวเลขสุ่มอาจดูเล็กน้อยหรือเป็นไปไม่ได้ ขึ้นอยู่กับว่าคุณคุยกับใคร ตามทฤษฎีแล้วสิ่งนี้เป็นไปไม่ได้ จอห์น ฟอน นอยมันน์ บิดาแห่งคอมพิวเตอร์กล่าวว่า “ใครก็ตามที่เชื่อว่ามีวิธีทางคณิตศาสตร์ในการสร้างตัวเลขสุ่มถือเป็นบาปอย่างแน่นอน” เขาหมายความว่าเป็นไปไม่ได้ที่จะได้อะไรแบบสุ่มเข้ามา ในทุกแง่มุมคำพูดเป็นผลลัพธ์ของสัตว์ร้ายที่กำหนดได้เช่นคอมพิวเตอร์ นี่เป็นเรื่องจริง แต่โชคดีที่มีบางสิ่งที่เราสามารถทำได้ สิ่งที่เราต้องการจากเครื่องสร้างตัวเลขสุ่มไม่ใช่ว่าตัวเลขนั้นสุ่มอย่างแท้จริง แต่ไม่สามารถคาดเดาและทำซ้ำได้ หากเราปฏิบัติตามเงื่อนไขทั้งสองนี้ เราก็สามารถบรรลุความปลอดภัยได้

ในทางกลับกัน ถ้าเราฝ่าฝืนเงื่อนไขทั้งสองนี้ ก็จะไม่มีการรักษาความปลอดภัย ในปี 1994 มีการติดตั้งเครื่องสร้างตัวเลขสุ่มสำหรับลอตเตอรี่ในคาสิโนในมอนทรีออล ผู้เล่นสังเกตการณ์คนหนึ่งที่ใช้เวลาส่วนใหญ่ในคาสิโนสังเกตเห็นว่าหมายเลขที่ชนะจะเท่ากันทุกวัน เขาประสบความสำเร็จในการแจ็กพอตสามรางวัลติดต่อกันและได้รับเงินรางวัล 600,000 ดอลลาร์ (หลังจากบีบมือ ขบเขี้ยวเคี้ยวฟัน และสำรวจทุกอย่าง คาสิโนก็จ่ายเงินรางวัล)

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

เครื่องกำเนิดตัวเลขสุ่มบางตัวติดตามการเคลื่อนไหวแบบสุ่มของผู้ใช้ โปรแกรมอาจขอให้ผู้ใช้พิมพ์อักขระจำนวนมากบนแป้นพิมพ์ สามารถใช้ลำดับของอักขระหรือแม้แต่เวลาระหว่างการกดแป้นพิมพ์เพื่อสร้างตัวเลขสุ่ม โปรแกรมอื่นสามารถกำหนดให้ผู้ใช้เลื่อนเมาส์ไปมาหรือตะโกนใส่ไมโครโฟนได้อย่างง่ายดาย

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

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

ปรากฏการณ์ทั้งหมดที่เกิดขึ้นกับเรามีสองประเภท - แบบสุ่มและเป็นธรรมชาติ ตัวอย่างเช่น คุณมีเงินไม่เพียงพอที่จะซื้อเครื่องบันทึกเทป และคุณตัดสินใจซื้อเครื่องเล่น - เช่น การกระทำเป็นไปตามตรรกะและคาดหวัง แต่เมื่อเดินไปที่ร้านคุณจะพบจำนวนเงินที่ต้องการซึ่งเปลี่ยนแผนแบบสุ่ม การทำงานของเครื่องสร้างตัวเลขสุ่มนั้นขึ้นอยู่กับกลไกที่ระบุในโอเปอเรเตอร์ ดังนั้นตัวเลขทั้งหมดที่ออกจะเป็นการสุ่มเทียมในเหตุการณ์ปัจจุบัน ผู้ประกอบการที่กลับมา ตัวเลขสุ่มอ้างถึงเวลาคือเวลาของระบบ เหล่านั้น. ทั้งในโลกและในการเขียนโปรแกรมไม่มีอะไรที่ครบถ้วนสมบูรณ์

ฟังก์ชันแรนด์

ในการเขียนโปรแกรม C ตัวดำเนินการในตัวถูกประดิษฐ์ขึ้นเพื่อให้ได้ค่าสุ่ม ซึ่งให้ผลลัพธ์ที่ต้องการแก่เรา ดังนั้นหากต้องการสร้างตัวเลขสุ่มให้ใช้ ฟังก์ชันแรนด์, ที่ ตัวดำเนินการแรนด์ใช้เพื่อรับตัวเลขสุ่มที่ส่งคืนช่วงตั้งแต่ 0 ถึงค่าคงที่ที่แน่นอน นอกจากนี้ ค่าคงที่นี้จะถูกประกาศในคำสั่งของระบบ “stdlib.h” โดยที่ฟังก์ชัน rand นี้ใช้เป็นหลัก ไวยากรณ์ของฟังก์ชันนี้เรียบง่าย: int m= rand(); เหล่านั้น. ส่งคืนจำนวนเต็ม หลังจากทดสอบโอเปอเรเตอร์ในทางปฏิบัติแล้ว คุณจะเห็นว่าตัวเลขที่ปรากฏขึ้นเมื่อเริ่มแอปพลิเคชันนั้นเหมือนกัน การควบคุมดูแลคือตัวดำเนินการ rand ทำงานกับเวลาระบบเดียวกัน ซึ่งได้รับการสงวนไว้ในระหว่างการคอมไพล์ ตัวสร้างตัวเลขสุ่มนี้เชื่อมโยงกับอัลกอริธึมสำหรับการเปลี่ยนเวลาของโปรแกรม แต่ทุกอย่างทำงานไม่ถูกต้อง

ตอนนี้เกี่ยวกับ srand และสุ่ม

สำหรับปัญหานี้ ฟังก์ชันที่จะรีเซ็ตเวลาในตัวให้เป็นศูนย์ทุกครั้งที่มีการเรียกตัวดำเนินการ rand นั้นเป็นสิ่งที่ขาดไม่ได้ และนักพัฒนาซอฟต์แวร์ก็ทำ ฟังก์ชันสแตรนด์- การดำเนินการอนุญาตให้ฟังก์ชัน rand เข้าถึงในแต่ละครั้งไม่ใช่ตัวจับเวลาที่ติดตั้ง แต่เป็นตัวจับเวลาในตัวปัจจุบันซึ่งเปิดโอกาสให้เครื่องกำเนิดทำงานได้อย่างถูกต้อง - เพื่อสร้างค่าสุ่ม เมื่อเร็ว ๆ นี้ในการเขียนโปรแกรม C++ กลไกในการออกตัวเลขสุ่มได้รับการปรับปรุงเนื่องจากมีลักษณะเป็นไมโครวินาที นอกจากนี้ช่วงของค่ายังขยายออกไปและนวัตกรรมปัจจุบันทั้งหมดได้ถูกเปลี่ยนให้เป็นฟังก์ชันแบบสุ่ม

ทุกคนโดยไม่คำนึงถึงระดับของการพนันและการผจญภัย ต้องเผชิญกับแนวคิดเช่นลอตเตอรีไม่ทางใดก็ทางหนึ่ง และมีเพียงไม่กี่คนที่ถามตัวเองว่าการกระจายตัวแบบสุ่มเกิดขึ้นได้อย่างไร ชุดค่าผสมที่ชนะตัวเลข หมายเลขนี้หรือหมายเลขนั้นออกมาได้อย่างไร? อะไรทำให้ระดับทิปไปสู่ผู้ชนะ? ลองดูรายละเอียดนี้กัน

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

แนวคิดของเครื่องกำเนิดตัวเลข

เครื่องสร้างตัวเลขสุ่มสำหรับลอตเตอรีคืออุปกรณ์บางอย่างหรือโปรแกรมที่กำหนดซึ่งสร้างตัวเลขที่อยู่ในช่วงเวลาที่กำหนดในลำดับแบบสุ่ม (ถูกต้องกว่าคือสุ่มหลอก) สำหรับลอตเตอรี่บางประเภท เช่น "Sportloto" จะมีการสร้างตัวเลขที่อยู่ในช่วงตั้งแต่ 1 ถึง 49

มีเครื่องกำเนิดหมายเลขฮาร์ดแวร์และซอฟต์แวร์สำหรับลอตเตอรี่ ภาษาการเขียนโปรแกรมใดๆ มีฟังก์ชัน RAND() ซึ่งมีหน้าที่สร้างตัวเลขสุ่มหลอกในช่วงที่กำหนด

เหตุใดจึงระบุว่าผลลัพธ์ที่ให้มาเป็นการสุ่มหลอกและเครื่องสร้างหมายเลขลอตเตอรีทำงานบนหลักการนี้ทุกประการ

ฟังก์ชัน RAND: แนวคิดและวิธีการใช้งาน

ฟังก์ชัน RAND() คือโปรแกรมหรืออุปกรณ์ที่มีอัลกอริธึมที่กำหนดซึ่งจะแสดงผลลัพธ์เดียวกันอย่างต่อเนื่องภายใต้เงื่อนไขที่ระบุเดียวกัน แต่เพื่อให้เงื่อนไขของลำดับสุ่มที่แท้จริงคงอยู่นั้น จะต้องไม่มีการพึ่งพา เงื่อนไขเริ่มต้นหรือพารามิเตอร์ ดังนั้นเพื่อหลีกเลี่ยง กรณีที่คล้ายกันมีการใช้ขั้นตอน RANDOMIZE พิเศษเพิ่มเติม ซึ่งจะลบความสามารถในการคาดเดาของเงื่อนไขเริ่มต้น และทำให้เป็นแบบสุ่ม

นอกเหนือจากหลักการสร้างที่เราทราบแล้ว ยังมีการใช้เครื่องกำเนิดลอตเตอรีอีกประเภทหนึ่งอีกด้วย ลองดูที่ด้านล่าง

เครื่องกำเนิดตัวเลข 6 จาก 45

เครื่องกำเนิดตัวเลขสำหรับลอตเตอรี 6 จาก 45 - โปรแกรมที่ใช้ในการรับ ตัวเลขนำโชค- ในกรณีนี้สามารถตั้งค่าได้ ตัวเลือกพิเศษเพื่อให้ได้ผลลัพธ์ที่ดีขึ้น

คุณสามารถระบุเกณฑ์การเลือกได้ เช่น:

  • ปริมาณ หมายเลขที่ชนะซึ่งจะต้องได้รับในผลลัพธ์สุดท้าย
  • ระบุช่วงตัวเลขที่จะทำการคัดเลือก
  • ตัวเลขสามารถเรียงลำดับจากน้อยไปหามากหรือจากมากไปหาน้อย
  • เลือกประเภทและวิธีการแยก
  • ลบรายการที่ซ้ำกันหรือปล่อยส่วนที่เลือกไว้โดยไม่เรียงลำดับ
  • คัดลอกลิงก์ไปยังผลลัพธ์และวางไว้บนหน้าใน ในเครือข่ายโซเชียลเพื่อวัตถุประสงค์ในการเผยแพร่ผล

เครื่องกำเนิดตัวเลข: คำแนะนำสำหรับการใช้งาน

  • ผลลัพธ์เริ่มต้นคือตัวเลขห้าตัว เมื่อเปลี่ยนการตั้งค่า คุณจะได้รับชุดค่าผสมที่ชนะแบบสุ่มมากถึง 250 ชุด
  • เรากำหนดช่วง มาตรฐานคือตั้งแต่ 0 ถึง 36 แต่คุณสามารถระบุได้สูงสุด 9,999,999,999
  • เราเลือกการเรียงลำดับที่จำเป็นสำหรับประเภทลอตเตอรี่ของเรา: จากน้อยไปหามาก จากมากไปน้อย หรือวางหมายเลขตามลำดับแบบสุ่ม
  • ขั้นตอนต่อไปคือการระบุว่าตัวเลขจะแยกออกจากกันอย่างไร - ลูกน้ำ, จุด, ช่องว่าง, อัฒภาค
  • เราจะกำจัดการสุ่มซ้ำที่เกิดขึ้นระหว่างกระบวนการสุ่มตัวอย่าง

ด้วยวิธีนี้ เราจึงได้หมายเลขคุณภาพสูงที่เลือกมา ซึ่งสามารถเป็นหมายเลขที่โชคดีที่สุดและถูกรางวัลได้


โปรดทราบว่าตามหลักการแล้ว เส้นโค้งความหนาแน่นของการแจกแจงของตัวเลขสุ่มจะมีลักษณะดังแสดงในรูปที่ 1 22.3. นั่นคือ ในกรณีที่เหมาะสม แต่ละช่วงเวลาจะรวมไว้ด้วย หมายเลขเดียวกันคะแนน: เอ็น ฉัน = เอ็น/เค , ที่ไหน เอ็น — จำนวนทั้งหมดคะแนน เคจำนวนช่วงเวลา ฉัน= 1, , เค .

ข้าว. 22.3. แผนภาพความถี่ของตัวเลขสุ่ม
สร้างขึ้นตามทฤษฎีโดยเครื่องกำเนิดในอุดมคติ

ควรจำไว้ว่าการสร้างตัวเลขสุ่มตามอำเภอใจประกอบด้วยสองขั้นตอน:

  • การสร้างตัวเลขสุ่มที่ทำให้เป็นมาตรฐาน (นั่นคือ การกระจายอย่างสม่ำเสมอตั้งแต่ 0 ถึง 1)
  • การแปลงตัวเลขสุ่มที่ทำให้เป็นมาตรฐาน ฉันสู่ตัวเลขสุ่ม x ฉันซึ่งเผยแพร่ตามกฎหมายการแจกจ่าย (โดยพลการ) ที่ผู้ใช้กำหนดหรือตามระยะเวลาที่กำหนด

เครื่องกำเนิดตัวเลขสุ่มตามวิธีการรับตัวเลขแบ่งออกเป็น:

  • ทางกายภาพ;
  • ตาราง;
  • อัลกอริทึม

RNG ทางกายภาพ

ตัวอย่างของ RNG ทางกายภาพอาจเป็น: เหรียญ (“หัว” 1, “ก้อย” 0); ลูกเต๋า- กลองที่มีลูกศรแบ่งออกเป็นภาคที่มีตัวเลข เครื่องกำเนิดสัญญาณรบกวนฮาร์ดแวร์ (HS) ซึ่งใช้อุปกรณ์ระบายความร้อนที่มีเสียงดังเช่นทรานซิสเตอร์ (รูปที่ 22.422.5)

ข้าว. 22.4. แผนผังวิธีการฮาร์ดแวร์สำหรับการสร้างตัวเลขสุ่ม
ข้าว. 22.5. แผนภาพการรับตัวเลขสุ่มโดยใช้วิธีฮาร์ดแวร์
ภารกิจ “สร้างตัวเลขสุ่มโดยใช้เหรียญ”

สร้างตัวเลขสามหลักแบบสุ่มโดยแจกแจงสม่ำเสมอในช่วงตั้งแต่ 0 ถึง 1 โดยใช้เหรียญ ความแม่นยำเป็นทศนิยมสามตำแหน่ง

วิธีแรกในการแก้ปัญหา
โยนเหรียญ 9 ครั้ง และถ้าเหรียญตกบนหัว ให้เขียนลงไปว่า "0" ถ้าตกบนหัว ให้เขียนลงไปว่า "1" สมมติว่าผลการทดลองเราได้รับลำดับสุ่ม 100110100

วาดช่วงเวลาจาก 0 ถึง 1 อ่านตัวเลขตามลำดับจากซ้ายไปขวา แบ่งช่วงเวลาออกเป็นครึ่งหนึ่ง และแต่ละครั้งให้เลือกส่วนหนึ่งของช่วงเวลาถัดไป (ถ้าคุณได้ 0 ก็จะเป็นทางซ้าย ถ้าคุณได้ 1 แล้วอันที่ถูกต้อง) ดังนั้นคุณจึงสามารถไปยังจุดใดก็ได้ในช่วงเวลานั้นอย่างแม่นยำตามที่คุณต้องการ

ดังนั้น, 1 : ช่วงเวลาจะถูกแบ่งออกเป็นครึ่งหนึ่ง และเลือกครึ่งทางขวา ช่วงเวลาจะแคบลง: หมายเลขถัดไป 0 : ช่วงเวลาแบ่งออกเป็นครึ่ง และเลือกครึ่งซ้าย ช่วงเวลาจะแคบลง: หมายเลขถัดไป 0 : ช่วงเวลาแบ่งออกเป็นครึ่ง และเลือกครึ่งซ้าย ช่วงเวลาจะแคบลง: หมายเลขถัดไป 1 : ช่วงเวลาจะถูกแบ่งออกเป็นครึ่งหนึ่ง และเลือกครึ่งทางขวา ช่วงเวลาจะแคบลง:

ตามเงื่อนไขความแม่นยำของปัญหา พบวิธีแก้ไข: เป็นตัวเลขใดๆ จากช่วงเวลา เช่น 0.625

โดยหลักการแล้ว หากเราใช้แนวทางที่เข้มงวด การแบ่งช่วงจะต้องดำเนินต่อไปจนถึงขอบเขตซ้ายและขวาของช่วงที่พบ COINCIDE ด้วยความแม่นยำของทศนิยมตำแหน่งที่สาม นั่นคือจากมุมมองของความแม่นยำ หมายเลขที่สร้างขึ้นจะไม่สามารถแยกความแตกต่างจากหมายเลขใด ๆ จากช่วงเวลาที่ตั้งอยู่ได้อีกต่อไป

วิธีที่สองในการแก้ปัญหา
มาแบ่งลำดับไบนารี่ผลลัพธ์ 100110100 ออกเป็นสามกลุ่ม: 100, 110, 100 หลังจากแปลสิ่งเหล่านี้แล้ว เลขฐานสองในรูปทศนิยม เราได้: 4, 6, 4 แทนที่ "0." ข้างหน้า เราได้: 0.464 วิธีนี้สามารถผลิตตัวเลขได้ตั้งแต่ 0.000 ถึง 0.777 เท่านั้น (เนื่องจากค่าสูงสุดที่สามารถ "บีบออก" จากเลขฐานสองสามหลักได้คือ 111 2 = 7 8) ซึ่งจริงๆ แล้ว ตัวเลขเหล่านี้แสดงอยู่ในระบบเลขฐานแปด สำหรับการแปล ฐานแปดตัวเลขเข้า ทศนิยมมาดำเนินการเป็นตัวแทน:
0.464 8 = 4 8 1 + 6 8 2 + 4 8 3 = 0.6015625 10 = 0.602 10.
ดังนั้น จำนวนที่ต้องการคือ: 0.602

RNG แบบตาราง

RNG แบบตารางใช้ตารางที่คอมไพล์เป็นพิเศษซึ่งมีการตรวจสอบแล้วว่าไม่เกี่ยวข้องกัน กล่าวคือ ตัวเลขเป็นแหล่งของตัวเลขสุ่มโดยไม่ขึ้นอยู่กับกันและกัน ในตาราง รูปที่ 22.1 แสดงส่วนเล็กๆ ของตารางดังกล่าว เมื่อสำรวจตารางจากซ้ายไปขวาจากบนลงล่าง คุณจะได้ตัวเลขสุ่มที่กระจายเท่าๆ กันตั้งแต่ 0 ถึง 1 โดยมีจำนวนตำแหน่งทศนิยมที่ต้องการ (ในตัวอย่างของเรา เราใช้ทศนิยมสามตำแหน่งสำหรับแต่ละหมายเลข) เนื่องจากตัวเลขในตารางไม่ได้ขึ้นอยู่กับแต่ละอื่น ๆ จึงสามารถข้ามตารางได้ วิธีทางที่แตกต่างเช่น จากบนลงล่าง หรือจากขวาไปซ้าย หรือพูดว่า คุณสามารถเลือกตัวเลขที่อยู่ในตำแหน่งคู่ได้

ตารางที่ 22.1.
ตัวเลขสุ่ม สม่ำเสมอ
ตัวเลขสุ่มกระจายจาก 0 ถึง 1
ตัวเลขสุ่ม กระจายอย่างเท่าเทียมกัน
ตัวเลขสุ่ม 0 ถึง 1
9 2 9 2 0 4 2 6 0.929
9 5 7 3 4 9 0 3 0.204
5 9 1 6 6 5 7 6 0.269
… …

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

มีตารางที่ประกอบด้วยตัวเลขที่ตรวจสอบแบบสุ่มอย่างแน่นอน 500 ตัว (นำมาจากหนังสือของ I. G. Venetsky, V. I. Venetskaya "แนวคิดและสูตรทางคณิตศาสตร์และสถิติพื้นฐานในการวิเคราะห์ทางเศรษฐศาสตร์")

อัลกอริทึม RNG

ตัวเลขที่สร้างโดย RNG เหล่านี้จะเป็นการสุ่มหลอกเสมอ (หรือกึ่งสุ่ม) กล่าวคือ แต่ละหมายเลขที่สร้างขึ้นในภายหลังจะขึ้นอยู่กับตัวเลขก่อนหน้า:

ฉัน + 1 = ( ฉัน) .

ลำดับที่ประกอบด้วยตัวเลขดังกล่าวจะก่อให้เกิดการวนซ้ำ กล่าวคือ จำเป็นต้องมีวงจรที่ซ้ำกัน จำนวนอนันต์ครั้งหนึ่ง. วงจรที่เกิดซ้ำเรียกว่าช่วงเวลา

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

ลองพิจารณาวิธีการอัลกอริทึมหลายวิธีในการรับ RNG:

  • วิธีหาค่ามัธยฐานกำลังสอง
  • วิธีการผลิตภัณฑ์ขั้นกลาง
  • วิธีการกวน
  • วิธีสมภาคเชิงเส้น

วิธีมิดสแควร์

มีเลขสี่หลักอยู่บ้าง 0 . หมายเลขนี้ถูกยกกำลังสองและป้อนเข้าไป 1. ต่อไปจาก 1 นำตัวเลขสุ่มตัวใหม่ที่อยู่ตรงกลาง (สี่หลักกลาง) มาเขียนลงไป 0 . จากนั้นให้ทำซ้ำขั้นตอนนี้ (ดูรูปที่ 22.6) โปรดทราบว่าในความเป็นจริงคุณไม่จำเป็นต้องใช้ตัวเลขสุ่ม กิจ, ก 0.กิจโดยมีศูนย์และจุดทศนิยมบวกทางด้านซ้าย ข้อเท็จจริงนี้สะท้อนให้เห็นดังในรูป 22.6 และในตัวเลขที่คล้ายกันถัดๆ ไป

ข้าว. 22.6. โครงร่างของวิธีกำลังสองเฉลี่ย

ข้อเสียของวิธีการ: 1) หากมีการวนซ้ำตัวเลข 0 จะเท่ากับศูนย์ จากนั้นตัวกำเนิดจะเสื่อมลง ดังนั้นการเลือกค่าเริ่มต้นที่ถูกต้องจึงเป็นสิ่งสำคัญ 0 ; 2) เครื่องกำเนิดจะทำซ้ำลำดับผ่าน nขั้นตอน (ใน สถานการณ์กรณีที่ดีที่สุด), ที่ไหน nตัวเลขหลัก 0 , ฐานของระบบตัวเลข

ตัวอย่างเช่นในรูป 22.6: ถ้าเป็นตัวเลข 0 จะแสดงในระบบเลขฐานสอง ตามด้วยลำดับ ตัวเลขสุ่มเทียมทำซ้ำใน 2 4 = 16 ขั้นตอน โปรดทราบว่าการทำซ้ำของลำดับอาจเกิดขึ้นเร็วกว่านี้หากเลือกหมายเลขเริ่มต้นได้ไม่ดี

วิธีการที่อธิบายไว้ข้างต้นเสนอโดย John von Neumann และมีอายุย้อนไปถึงปี 1946 เนื่องจากวิธีนี้ไม่น่าเชื่อถือ จึงถูกละทิ้งอย่างรวดเร็ว

วิธีการกลางผลิตภัณฑ์

ตัวเลข 0 คูณด้วย 1 จากผลลัพธ์ที่ได้รับ 2 ตรงกลางถูกดึงออกมา 2 * (นี่คือตัวเลขสุ่มอีกตัวหนึ่ง) แล้วคูณด้วย 1. ตัวเลขสุ่มที่ตามมาทั้งหมดคำนวณโดยใช้รูปแบบนี้ (ดูรูปที่ 22.7)

ข้าว. 22.7. โครงร่างวิธีการของผลิตภัณฑ์มัธยฐาน

วิธีการกวน

วิธีการสุ่มใช้การดำเนินการเพื่อเลื่อนเนื้อหาของเซลล์ไปทางซ้ายและขวาแบบวนรอบ แนวคิดของวิธีการมีดังนี้ ให้เซลล์เก็บหมายเลขเริ่มต้น 0 . เลื่อนเนื้อหาของเซลล์ไปทางซ้ายแบบวนรอบ 1/4 ของความยาวเซลล์เราจะได้ตัวเลขใหม่ 0 * . ในทำนองเดียวกัน หมุนเวียนเนื้อหาของเซลล์ 0 ไปทางขวาคูณ 1/4 ของความยาวเซลล์ เราจะได้เลขตัวที่สอง 0**. ผลรวมของตัวเลข 0* และ 0** ให้ตัวเลขสุ่มใหม่ 1. ไกลออกไป เข้ามาแล้ว 1 อัน 0 และทำซ้ำลำดับการทำงานทั้งหมด (ดูรูปที่ 22.8)


ข้าว. 22.8. แผนภาพวิธีการผสม

โปรดทราบว่าตัวเลขที่เกิดจากผลรวม 0* และ 0 ** อาจไม่พอดีกับเซลล์ทั้งหมด 1. ในกรณีนี้ จะต้องละทิ้งตัวเลขพิเศษออกจากตัวเลขผลลัพธ์ ให้เราอธิบายเรื่องนี้ในรูป 22.8 โดยที่เซลล์ทั้งหมดจะแสดงด้วยเลขฐานสองแปดหลัก อนุญาต 0 * = 10010001 2 = 145 10 , 0 ** = 10100001 2 = 161 10 , แล้ว 0 * + 0 ** = 100110010 2 = 306 10 - อย่างที่คุณเห็นตัวเลข 306 นั้นมี 9 หลัก (ในระบบเลขฐานสอง) และเซลล์ 1 (เช่นเดียวกับ 0) สามารถมีได้สูงสุด 8 บิต ดังนั้นก่อนจะใส่ค่าเข้าไป 1 จำเป็นต้องลบ "พิเศษ" หนึ่งบิตซ้ายสุดออกจากหมายเลข 306 ผลลัพธ์ที่ได้ 1 จะไม่ไปที่ 306 อีกต่อไป แต่เป็น 00110010 2 = 50 10 โปรดทราบว่าในภาษาเช่นปาสคาล "การตัด" บิตพิเศษเมื่อเซลล์ล้นจะดำเนินการโดยอัตโนมัติตามประเภทของตัวแปรที่ระบุ

วิธีสมภาคเชิงเส้น

วิธีการสมภาคเชิงเส้นเป็นหนึ่งในขั้นตอนที่ง่ายที่สุดและใช้กันมากที่สุดในปัจจุบันในการจำลองตัวเลขสุ่ม วิธีการนี้ใช้ mod( x, ) ซึ่งส่งคืนส่วนที่เหลือเมื่ออาร์กิวเมนต์แรกถูกหารด้วยวินาที จำนวนสุ่มที่ตามมาแต่ละตัวจะคำนวณตามจำนวนสุ่มก่อนหน้าโดยใช้สูตรต่อไปนี้:

ฉัน+ 1 = ม็อด( เค · ฉัน + , ) .

ลำดับของตัวเลขสุ่มที่ได้รับโดยใช้สูตรนี้เรียกว่า ลำดับที่สอดคล้องกันเชิงเส้น- ผู้เขียนหลายคนเรียกลำดับที่สอดคล้องกันเชิงเส้นเมื่อ = 0 วิธีคูณที่เท่ากันทุกประการ, และเมื่อ ≠ 0 — วิธีผสมที่สอดคล้องกัน.

สำหรับเครื่องกำเนิดไฟฟ้าคุณภาพสูงจำเป็นต้องเลือกค่าสัมประสิทธิ์ที่เหมาะสม จำเป็นต้องมีจำนวนนั้น มีขนาดค่อนข้างใหญ่เนื่องจากช่วงเวลานั้นไม่สามารถมีได้อีกต่อไป องค์ประกอบ ในทางกลับกัน การแบ่งที่ใช้ในวิธีนี้เป็นการดำเนินการที่ค่อนข้างช้า ดังนั้นสำหรับคอมพิวเตอร์ไบนารี่ ตัวเลือกเชิงตรรกะจะเป็น = 2 เอ็นเนื่องจากในกรณีนี้ การค้นหาส่วนที่เหลือของการหารจะลดลงภายในคอมพิวเตอร์เป็นการดำเนินการทางตรรกะแบบไบนารี "AND" การเลือกจำนวนเฉพาะที่ใหญ่ที่สุดก็เป็นเรื่องปกติเช่นกัน น้อยกว่า 2 เอ็น: ในวรรณกรรมเฉพาะทางได้รับการพิสูจน์แล้วว่าในกรณีนี้ตัวเลขลำดับต่ำของตัวเลขสุ่มผลลัพธ์ ฉัน+ 1 มีพฤติกรรมสุ่มเหมือนกับรุ่นเก่า ซึ่งส่งผลเชิงบวกต่อลำดับตัวเลขสุ่มโดยรวม ยกตัวอย่างหนึ่งใน ตัวเลขเมอร์เซนเท่ากับ 2 31 1 ดังนั้น = 2 31 1 .

ข้อกำหนดประการหนึ่งสำหรับลำดับที่สอดคล้องกันเชิงเส้นคือความยาวของคาบต้องยาวที่สุดเท่าที่จะเป็นไปได้ ความยาวของช่วงเวลาขึ้นอยู่กับค่า , เคและ - ทฤษฎีบทที่เรานำเสนอด้านล่างนี้ช่วยให้เราสามารถระบุได้ว่าเป็นไปได้หรือไม่ที่จะบรรลุช่วงเวลาดังกล่าว ความยาวสูงสุดสำหรับค่าเฉพาะ , เคและ .

ทฤษฎีบท- ลำดับสมภาคเชิงเส้นที่กำหนดโดยตัวเลข , เค , และ 0 มีคาบความยาว หากและหาก:

  • ตัวเลข และ ค่อนข้างง่าย
  • เค 1 ครั้ง พีสำหรับทุก ๆ ไพรม์ พีซึ่งเป็นตัวหาร ;
  • เค 1 เป็นผลคูณของ 4 ถ้า หลายเท่าของ 4

สุดท้าย เราจะสรุปด้วยตัวอย่างการใช้วิธีสมภาคเชิงเส้นเพื่อสร้างตัวเลขสุ่ม

มีการพิจารณาว่าชุดตัวเลขสุ่มหลอกที่สร้างขึ้นจากข้อมูลจากตัวอย่างที่ 1 จะถูกทำซ้ำทุกๆ /4 หมายเลข. ตัวเลข ถามถูกตั้งค่าโดยพลการก่อนเริ่มการคำนวณ อย่างไรก็ตาม โปรดทราบว่าซีรีส์นี้ให้ความรู้สึกของการสุ่มในวงกว้าง เค(และดังนั้นจึง ถาม- ผลลัพธ์สามารถปรับปรุงได้บ้างถ้า แปลกและ เค= 1 + 4 · ถาม ในกรณีนี้ แถวจะซ้ำกันทุกแถว ตัวเลข หลังจากค้นหามานาน เคนักวิจัยตัดสินด้วยค่า 69069 และ 71365

เครื่องสร้างตัวเลขสุ่มโดยใช้ข้อมูลจากตัวอย่างที่ 2 จะสร้างตัวเลขสุ่มที่ไม่ซ้ำกันด้วยคาบ 7 ล้าน

วิธีการคูณเพื่อสร้างตัวเลขสุ่มเทียมเสนอโดย D. H. Lehmer ในปี 1949

ตรวจสอบคุณภาพของเครื่องกำเนิดไฟฟ้า

คุณภาพของทั้งระบบและความแม่นยำของผลลัพธ์ขึ้นอยู่กับคุณภาพของ RNG ดังนั้นลำดับสุ่มที่สร้างโดย RNG จะต้องเป็นไปตามเกณฑ์หลายประการ

การตรวจสอบที่ดำเนินการมีสองประเภท:

  • ตรวจสอบความสม่ำเสมอของการกระจาย
  • การทดสอบความเป็นอิสระทางสถิติ

ตรวจสอบความสม่ำเสมอของการกระจายตัว

1) RNG ควรสร้างค่าใกล้เคียงกับค่าพารามิเตอร์ทางสถิติที่มีลักษณะเฉพาะของกฎสุ่มที่สม่ำเสมอ:

2) การทดสอบความถี่

การทดสอบความถี่ช่วยให้คุณทราบว่ามีตัวเลขจำนวนเท่าใดที่อยู่ในช่วงหนึ่งๆ ( – σ ; + σ ) นั่นคือ (0.5 0.2887; 0.5 + 0.2887) หรือท้ายที่สุดคือ (0.2113; 0.7887) เนื่องจาก 0.7887 0.2113 = 0.5774 เราสรุปได้ว่าใน RNG ที่ดี ประมาณ 57.7% ของตัวเลขสุ่มที่สุ่มออกมาทั้งหมดควรอยู่ในช่วงนี้ (ดูรูปที่ 22.9)

ข้าว. 22.9. แผนภาพความถี่ของ RNG ในอุดมคติ
กรณีตรวจสอบเพื่อทดสอบความถี่

นอกจากนี้ยังจำเป็นต้องคำนึงว่าจำนวนตัวเลขที่อยู่ในช่วง (0; 0.5) ควรเท่ากับจำนวนตัวเลขที่อยู่ในช่วงโดยประมาณ (0.5; 1)

3) การทดสอบไคสแควร์

การทดสอบไคสแควร์ (การทดสอบ χ 2) เป็นหนึ่งในการทดสอบทางสถิติที่รู้จักกันดีที่สุด เป็นวิธีหลักที่ใช้ร่วมกับเกณฑ์อื่นๆ การทดสอบไคสแควร์เสนอในปี 1900 โดยคาร์ล เพียร์สัน ผลงานอันโดดเด่นของเขาถือเป็นรากฐานของสถิติทางคณิตศาสตร์สมัยใหม่

สำหรับกรณีของเรา การทดสอบโดยใช้เกณฑ์ไคสแควร์จะช่วยให้เราทราบว่ามีค่าเท่าใด จริง RNG อยู่ใกล้แล้ว มาตรฐานอาร์เอ็นจีนั่นคือไม่ว่าจะเป็นไปตามข้อกำหนดของการกระจายแบบสม่ำเสมอหรือไม่ก็ตาม

แผนภาพความถี่ อ้างอิง RNG จะแสดงในรูป 22.10. เนื่องจากกฎการกระจายของ RNG อ้างอิงมีความสม่ำเสมอ ความน่าจะเป็น (ตามทฤษฎี) พี ฉันการรับตัวเลขเข้ามา ฉันช่วงเวลาที่ (ช่วงเวลาทั้งหมดนี้ เค) เท่ากับ พี ฉัน = 1/เค - และด้วยเหตุนี้ในแต่ละ เคช่วงเวลาจะตี เรียบโดย พี ฉัน · เอ็น ตัวเลข ( เอ็นจำนวนตัวเลขทั้งหมดที่สร้างขึ้น)

ข้าว. 22.10. แผนภาพความถี่ของ RNG อ้างอิง

RNG จริงจะสร้างตัวเลขที่กระจาย (และไม่จำเป็นต้องเท่ากัน!) เคช่วงเวลาและแต่ละช่วงจะมี n ฉันตัวเลข (รวม n 1 + n 2 + + n เค = เอ็น - เราจะทราบได้อย่างไรว่า RNG ที่กำลังทดสอบนั้นดีแค่ไหน และใกล้กับข้อมูลอ้างอิงมากน้อยเพียงใด การพิจารณาความแตกต่างกำลังสองระหว่างจำนวนผลลัพธ์ของตัวเลขค่อนข้างสมเหตุสมผล n ฉันและ "การอ้างอิง" พี ฉัน · เอ็น - มาบวกกันและผลลัพธ์คือ:

χ 2 ประสบการณ์ - n 1 พี 1 · เอ็น) 2 + (n 2 พี 2 · เอ็น) 2 + + ( n เค – พี เค · เอ็น) 2 .

จากสูตรนี้จะตามมาว่ายิ่งความแตกต่างในแต่ละเงื่อนไขน้อยลง (และด้วยเหตุนี้ มูลค่าน้อยลงχ 2 ประสบการณ์ ) ยิ่งกฎการกระจายตัวเลขสุ่มที่สร้างโดย RNG จริงมีความสม่ำเสมอมากขึ้นเท่าใด ก็จะมีความสม่ำเสมอมากขึ้นเท่านั้น

ในนิพจน์ที่แล้ว แต่ละเงื่อนไขถูกกำหนดให้มีน้ำหนักเท่ากัน (เท่ากับ 1) ซึ่งอันที่จริงอาจไม่เป็นความจริง ดังนั้นสำหรับสถิติไคสแควร์ จึงจำเป็นต้องทำให้แต่ละรายการเป็นมาตรฐาน ฉันเทอมที่ 3 หารด้วย พี ฉัน · เอ็น :

สุดท้ายนี้ มาเขียนนิพจน์ผลลัพธ์ให้กระชับยิ่งขึ้นและทำให้ง่ายขึ้น:

เราได้รับค่าทดสอบไคสแควร์สำหรับ ทดลองข้อมูล.

ในตาราง ให้ 22.2 ตามทฤษฎีค่าไคสแควร์ (χ 2 ตามทฤษฎี) โดยที่ ν = เอ็น 1 คือจำนวนระดับความเป็นอิสระ พีนี่คือระดับความเชื่อมั่นที่ผู้ใช้ระบุซึ่งบ่งชี้ว่า RNG ควรตอบสนองความต้องการของการกระจายแบบสม่ำเสมอมากน้อยเพียงใด หรือ พี — คือความน่าจะเป็นที่ค่าทดลองของ χ 2 exp จะน้อยกว่าตาราง (เชิงทฤษฎี) χ 2 ตามทฤษฎี หรือเท่ากับมัน.

ตารางที่ 22.2.
เปอร์เซ็นต์บางส่วนของการแจกแจง χ 2
พี = 1% พี = 5% พี = 25% พี = 50% พี = 75% พี = 95% พี = 99%
ν = 1 0.00016 0.00393 0.1015 0.4549 1.323 3.841 6.635
ν = 2 0.02010 0.1026 0.5754 1.386 2.773 5.991 9.210
ν = 3 0.1148 0.3518 1.213 2.366 4.108 7.815 11.34
ν = 4 0.2971 0.7107 1.923 3.357 5.385 9.488 13.28
ν = 5 0.5543 1.1455 2.675 4.351 6.626 11.07 15.09
ν = 6 0.8721 1.635 3.455 5.348 7.841 12.59 16.81
ν = 7 1.239 2.167 4.255 6.346 9.037 14.07 18.48
ν = 8 1.646 2.733 5.071 7.344 10.22 15.51 20.09
ν = 9 2.088 3.325 5.899 8.343 11.39 16.92 21.67
ν = 10 2.558 3.940 6.737 9.342 12.55 18.31 23.21
ν = 11 3.053 4.575 7.584 10.34 13.70 19.68 24.72
ν = 12 3.571 5.226 8.438 11.34 14.85 21.03 26.22
ν = 15 5.229 7.261 11.04 14.34 18.25 25.00 30.58
ν = 20 8.260 10.85 15.45 19.34 23.83 31.41 37.57
ν = 30 14.95 18.49 24.48 29.34 34.80 43.77 50.89
ν = 50 29.71 34.76 42.94 49.33 56.33 67.50 76.15
ν > 30 ν + ตร.ม.(2 ν ) · x พี+ 2/3 · x 2 พี 2/3 + โอ(1/ตร.ม.( ν ))
x พี = 2.33 1.64 0.674 0.00 0.674 1.64 2.33

ถือว่ายอมรับได้ พี จาก 10% ถึง 90%.

ถ้า χ 2 ประสบการณ์ มากกว่าทฤษฎี χ 2 มาก (นั่นคือ พีมีขนาดใหญ่) จากนั้นเครื่องกำเนิดไฟฟ้า ไม่พอใจข้อกำหนดของการแจกแจงแบบสม่ำเสมอเนื่องจากค่าที่สังเกตได้ n ฉันไปไกลจากทฤษฎีมากเกินไป พี ฉัน · เอ็น และไม่สามารถถือเป็นการสุ่มได้ กล่าวอีกนัยหนึ่งคือมีการติดตั้งขนาดใหญ่มาก ช่วงความมั่นใจว่าข้อจำกัดด้านตัวเลขเริ่มหลวมมาก ข้อกำหนดด้านตัวเลขเริ่มอ่อนแอ ในกรณีนี้จะสังเกตเห็นข้อผิดพลาดสัมบูรณ์ที่มีขนาดใหญ่มาก

แม้แต่ D. Knuth ในหนังสือของเขาเรื่อง "The Art of Programming" ยังตั้งข้อสังเกตว่าการมี χ 2 exp. โดยทั่วไปสำหรับคนตัวเล็กมันก็ไม่ดีเช่นกันแม้ว่าเมื่อมองแวบแรกจะดูยอดเยี่ยมจากมุมมองของความสม่ำเสมอ จริงๆ แล้วใช้ชุดตัวเลข 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6 ซึ่งเหมาะอย่างยิ่งจากมุมมองของความสม่ำเสมอและ χ ประสบการณ์ 2 ครั้ง จะเป็นศูนย์ในทางปฏิบัติ แต่คุณไม่น่าจะจดจำพวกมันเป็นการสุ่มได้

ถ้า χ 2 ประสบการณ์ น้อยกว่าทฤษฎี χ 2 มาก (นั่นคือ พีเล็ก) จากนั้นเครื่องกำเนิด ไม่พอใจข้อกำหนดของการแจกแจงแบบสม่ำเสมอแบบสุ่ม เนื่องจากค่าที่สังเกตได้ n ฉันใกล้เคียงกับทฤษฎีมากเกินไป พี ฉัน · เอ็น และไม่สามารถถือเป็นการสุ่มได้

แต่ถ้า χ 2 ประสบการณ์ อยู่ในช่วงที่แน่นอนระหว่างค่าสองค่าของทฤษฎี χ 2 หรือ ซึ่งสอดคล้องกัน เช่น พี= 25% และ พี= 50% จากนั้นเราสามารถสรุปได้ว่าค่าตัวเลขสุ่มที่สร้างโดยเซ็นเซอร์นั้นเป็นการสุ่มโดยสมบูรณ์

นอกจากนี้ควรคำนึงถึงคุณค่าทั้งหมดด้วย พี ฉัน · เอ็น ต้องมีขนาดใหญ่เพียงพอ เช่น มากกว่า 5 (พบโดยเชิงประจักษ์) เมื่อถึงเวลานั้น (ด้วยตัวอย่างทางสถิติที่มีขนาดใหญ่เพียงพอ) เท่านั้นจึงจะถือว่าเงื่อนไขการทดลองเป็นที่น่าพอใจ

ดังนั้นขั้นตอนการตรวจสอบจึงเป็นดังนี้

ทดสอบความเป็นอิสระทางสถิติ

1) การตรวจสอบความถี่ของการเกิดตัวเลขในลำดับ

ลองดูตัวอย่าง หมายเลขสุ่ม 0.2463389991 ประกอบด้วยตัวเลข 2463389991 และหมายเลข 0.5467766618 ประกอบด้วยตัวเลข 5467766618 การเชื่อมต่อลำดับของตัวเลขเรามี: 24633899915467766618

เป็นที่ชัดเจนว่าความน่าจะเป็นทางทฤษฎี พี ฉันการสูญเสีย ฉันหลักที่ (ตั้งแต่ 0 ถึง 9) เท่ากับ 0.1

2) การตรวจสอบลักษณะของชุดตัวเลขที่เหมือนกัน

ให้เราแสดงโดย n จำนวนชุดของตัวเลขที่เหมือนกันในแถวความยาว - ทุกอย่างจะต้องมีการตรวจสอบ ตั้งแต่ 1 ถึง , ที่ไหน นี่คือหมายเลขที่ผู้ใช้ระบุ: จำนวนสูงสุดที่เกิดขึ้นของหลักที่เหมือนกันในชุด

ในตัวอย่าง “24633899915467766618” พบ 2 ชุดความยาว 2 (33 และ 77) นั่นคือ n 2 = 2 และ 2 อนุกรมความยาว 3 (999 และ 666) นั่นคือ n 3 = 2 .

ความน่าจะเป็นที่อนุกรมของความยาวจะเกิดขึ้น เท่ากับ: พี = 9 10 (ตามทฤษฎี) นั่นคือ ความน่าจะเป็นที่ซีรีส์หนึ่งจะมีความยาวอักขระเท่ากับ: พี 1 = 0.9 (ตามทฤษฎี) ความน่าจะเป็นที่จะมีอักขระสองตัวปรากฏเป็นชุดคือ: พี 2 = 0.09 (ตามทฤษฎี) ความน่าจะเป็นที่จะมีอักขระสามตัวปรากฏเป็นชุดคือ: พี 3 = 0.009 (ตามทฤษฎี)

ตัวอย่างเช่น ความน่าจะเป็นที่ซีรีส์หนึ่งจะมีความยาวหนึ่งอักขระ พี = 0.9 เนื่องจากสามารถมีได้เพียงสัญลักษณ์เดียวจาก 10 และมีทั้งหมด 9 สัญลักษณ์ (ศูนย์ไม่นับ) และความน่าจะเป็นที่สัญลักษณ์ “XX” ที่เหมือนกันสองตัวจะปรากฏเรียงกันเป็น 0.1 · 0.1 · 9 นั่นคือความน่าจะเป็นที่ 0.1 ที่สัญลักษณ์ “X” จะปรากฏในตำแหน่งแรกคูณด้วยความน่าจะเป็นที่ 0.1 ที่ สัญลักษณ์เดียวกันจะปรากฏในตำแหน่งที่สอง “X” และคูณด้วยจำนวนชุดดังกล่าว 9

ความถี่ของการเกิดอนุกรมคำนวณโดยใช้สูตรไคสแควร์ที่เราพูดถึงก่อนหน้านี้โดยใช้ค่าต่างๆ พี .

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

โดยสรุป เราสังเกตว่าบทที่สามของหนังสือ The Art of Programming (เล่ม 2) ของ Donald E. Knuth เน้นไปที่การศึกษาตัวเลขสุ่มโดยเฉพาะ มันเรียน วิธีการต่างๆการสร้างตัวเลขสุ่ม การทดสอบความสุ่มทางสถิติ และการแปลงตัวเลขสุ่มแบบกระจายสม่ำเสมอไปเป็นรูปแบบอื่น ตัวแปรสุ่ม- มีมากกว่าสองร้อยหน้าสำหรับการนำเสนอเนื้อหานี้