คุณสามารถใช้ Pi เป็นเครื่องมือสร้างตัวเลขสุ่มอย่างหยาบได้หรือไม่?


30

ฉันเพิ่งเห็นคำถามนี้ที่ math.SE มันทำให้ฉันคิด สามารถใช้ Pi เป็นเครื่องมือสร้างตัวเลขสุ่มแบบสุ่มได้หรือไม่? ฉันหมายถึงผลลัพธ์เป็นที่รู้จักกันดี (คำนวณว่า pi ได้รับมานานเท่าไหร่แล้วตอนนี้?) แต่ Pi ก็ดูเหมือนจะสุ่มเมื่อใช้ตัวเลข 1 หลักในแต่ละครั้ง

สิ่งนี้สมเหตุสมผลหรือไม่?


จะใช้ตัวเลขสุ่มเหล่านี้ที่ไหน
NullUserException

2
ในทางทฤษฎีมันอาจจะเป็น แต่มันอาจจะดีที่สุดน้อยกว่าวิธีการในปัจจุบัน แค่สัญชาตญาณในเรื่องนั้น แต่ดูเหมือนว่ากลุ่มสุ่มจะใหญ่กว่าด้วยวิธีนี้โดยมีค่าใช้จ่ายน้อยลง
Rig

@NullUserException ไม่แน่ใจ ... ฉันแค่สงสัยว่าพวกเขาจะสามารถใช้งานได้เลย ฉันคิดว่านี่คงไม่เหมาะกับการเข้ารหัส แต่ '
Earlz

3
@FrustratedWithFormsDesigner - เป็นส่วนหนึ่งของแพ็คเกจ ent มันใช้ตัวเลขสุ่มในการคำนวณพื้นที่ของวงกลมที่ถูกจารึกไว้ภายในตารางและจากนั้นหนึ่งสามารถคำนวณ pi การใช้บิตของ pi เป็นตัวเลขสุ่มมีความงดงามบางอย่างที่จะใช้ข้อมูลนั้นในการคำนวณ pi

1
@FrustratedWithFormsDesigner entเป็นชุดของรหัสสำหรับการวิเคราะห์แบบแผนหลอกของกลุ่มไบต์ หนึ่งการทดสอบภายในนั้นคือ Monte Carlo สำหรับการคำนวณ pi และเปรียบเทียบการคำนวณแบบสุ่มกับค่าจริงเพื่อดูว่าเป็นการสุ่ม

คำตอบ:


50

ขุดจากhttp://www.befria.nu/elias/pi/binpi.htmlเพื่อรับค่าไบนารีของ pi (เพื่อให้ง่ายต่อการแปลงเป็นไบต์แทนที่จะพยายามใช้เลขทศนิยม) แล้วเรียกใช้ผ่านentฉันได้รับต่อไปนี้สำหรับการวิเคราะห์การกระจายแบบสุ่มของไบต์:

Entropy = 7.954093 บิตต่อไบต์

การบีบอัดที่เหมาะสมที่สุดจะลดขนาดของไฟล์ 4096 ไบต์นี้ลง 0 เปอร์เซ็นต์

การแจกแจงไคสแควร์สำหรับตัวอย่าง 4096 คือ 253.00 และสุ่มจะเกินค่านี้ 52.36 เปอร์เซ็นต์ของเวลา

ค่าเฉลี่ยเลขคณิตของไบต์ข้อมูลคือ 126.6736 (127.5 = สุ่ม)

ค่า Monte Carlo สำหรับ Pi คือ 3.120234604 (ข้อผิดพลาด 0.68 เปอร์เซ็นต์)

สัมประสิทธิ์สหสัมพันธ์แบบอนุกรมคือ 0.028195 (uncorrelated โดยสิ้นเชิง = 0.0)

ใช่แล้วการใช้ pi สำหรับข้อมูลสุ่มจะให้ข้อมูลที่ค่อนข้างสุ่ม ... โดยตระหนักว่าเป็นข้อมูลสุ่มที่รู้จักกันดี


จากความคิดเห็นด้านบน ...

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

ดังนั้นฉันจึงคำนวณสแควร์รูทของ 2 ในไบนารี่เพื่อยกเลิกปัญหาชุดเดียวกัน ใช้Iteration ของ Wolframฉันเขียนสคริปต์ perl ง่าย ๆ

#!/usr/bin/perl
use strict;
use Math::BigInt;

my $u = Math::BigInt->new("2");
my $v = Math::BigInt->new("0");
my $i = 0;

while(1) {
    my $unew;
    my $vnew;

    if($u->bcmp($v) != 1) { # $u <= $v
        $unew = $u->bmul(4);
        $vnew = $v->bmul(2);
    } else {
        $unew = ($u->bsub($v)->bsub(1))->bmul(4);
        $vnew = ($v->badd(2))->bmul(2);
    }   

    $v = $vnew;
    $u = $unew;

    #print $i,"  ",$v,"\n";
    if($i++ > 10000) { last; }
}

open (BITS,"> bits.txt");
print BITS $v->as_bin();
close(BITS);

ใช้งานสำหรับ 10 ตัวแรกที่ตรงกับA095804ดังนั้นฉันมั่นใจว่าฉันมีลำดับ ค่า v nตามที่เขียนไว้ในเลขฐานสองที่มีจุดตำแหน่งอยู่หลังจากหลักแรกให้ประมาณของรากที่สองของ 2

การใช้กับข้อมูลไบนารีนี้ก่อให้เกิด:

Entropy = 7.840501 bits per byte.

Optimum compression would reduce the size
of this 1251 byte file by 1 percent.

Chi square distribution for 1251 samples is 277.84, and randomly
would exceed this value 15.58 percent of the times.

Arithmetic mean value of data bytes is 130.0616 (127.5 = random).
Monte Carlo value for Pi is 3.153846154 (error 0.39 percent).
Serial correlation coefficient is -0.045767 (totally uncorrelated = 0.0).

ประเภทคำตอบที่ฉันต้องการ ฉันไม่รู้ว่าจะคำนวณสิ่งของประเภทนี้ทั้งหมดได้อย่างไร
Earlz

แม้ว่าการกระจายตัวของตัวเลขจะค่อนข้างสุ่มคุณไม่ต้องหาวิธีสุ่มเลือกบางส่วน
Blumer

1
@ หมายเลขผู้ใช้งาน การสุ่มนั้นวัดจากลำดับของตัวเลข ลำดับของตัวเลขไพบอกว่าเป็นแบบสุ่ม ดูen.wikipedia.org/wiki/Statistical_randomness
Simon Bergot

11
ถูกต้องที่สุด. และเนื่องจากเป็นข้อมูลแบบสุ่มที่รู้จักกันดีคุณไม่กล้าใช้มันเพื่อจุดประสงค์การเข้ารหัส
Falcon

3
+1 สำหรับ "ข้อมูลสุ่มที่รู้จักกันดี" หากคุณต้องการข้อมูลแบบสุ่มที่ใครบางคนไม่สามารถคาดเดาได้ Pi ไม่เหมาะสำหรับคุณหากเพียงต้องการกลุ่มนักสุ่มด้วยเหตุผลบางอย่างมันก็ใช้ได้ดี
jmoreno

5

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


2

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

การกระจายตัวของตัวเลขดูเหมือนจะค่อนข้างคล้ายกับเครื่องกำเนิดเลขสุ่มมาตรฐานดังนั้นตัวเลขของπสามารถใช้สำหรับสถานการณ์การสร้างหมายเลขสุ่มแบบธรรมดา

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


¹ฉันเชื่อว่าเป็นเรื่องจริง แต่ไม่มีข้อพิสูจน์ มันจะน่าสนใจ (และไม่ซับซ้อน) ที่จะทำการเปรียบเทียบตามจำนวนมาก


5
@NullUserException: ไม่เครื่องกำเนิดเลขสุ่มบางตัวใช้แหล่งที่มาของเอนโทรปี สิ่งนี้สามารถทำได้ผ่านฮาร์ดแวร์พิเศษ (วิธีที่ดำเนินการโดยrandom.org ) หรือโดยใช้แหล่งที่มาของเอนโทรปีที่มีอยู่ (ความผันผวนที่วัดได้ภายในเซ็นเซอร์ฮาร์ดแวร์ที่มีอยู่การโต้ตอบของผู้ใช้บางประเภทการเปลี่ยนแปลงขนาดเล็กในการทดสอบประสิทธิภาพ )
ไบรอัน

1
@NullUserException: มี PRNG ที่ปลอดภัยแบบเข้ารหัสซึ่งยังคงสุ่มหลอก จากนั้นก็มี RNG จริงซึ่งมาจากข้อมูลจากโลกแห่งความเป็นจริง: การสลายตัวของกัมมันตภาพรังสีเสียง ฯลฯ
Arseni Mourzenko

2
@MainMa แต่ถึงอย่างนั้นแบบแผนของการสลายตัวของกัมมันตภาพรังสีเสียงในชั้นบรรยากาศที่ได้มาจากการป้อนข้อมูลของผู้ใช้ ฯลฯ เป็นที่ถกเถียงกัน เพียงเพราะเราไม่รู้จักรูปแบบไม่ได้หมายความว่าไม่มีอยู่
NullUserException

1
@NullUserException: เมื่อปีที่แล้ว Colbeck / Renner ตีพิมพ์รายงานที่อ้างว่า: "ไม่มีการขยายทฤษฎีควอนตัมที่สามารถปรับปรุงพลังการทำนายได้" สมมติว่าเรื่องนี้ชูขึ้นอาจมีแหล่งที่มาของเอนโทรปีซึ่งคาดเดาไม่ได้อย่างแท้จริงแทนที่จะเป็นไปไม่ได้ที่จะทำนาย
Brian

1
@MainMa - คุณยังคงทำการทดสอบทางคณิตศาสตร์สำหรับการสุ่ม แม้ว่าฟิสิกส์พื้นฐานจะเป็นแบบสุ่ม (เท่าที่เรารู้ดีที่สุด) แต่ก็ไม่ได้หมายความว่าการวัดนั้น เครื่องตรวจจับทุกประเภทมีพฤติกรรม "น่าสนใจ" มากมายในโลกแห่งความเป็นจริง
Martin Beckett

2

การสุ่มตัวเลขของ pi (หรือลำดับอื่นใดก็ตาม) สามารถทดสอบได้โดยเรียกว่า 'การทดสอบแบตเตอรี่' หนึ่งการทดสอบแบตเตอรี่ที่นิยมคือจอร์จมาร์ซกเลียของทดสอบแบตเตอรี่มิจฉาทิฐิ นอกจากนี้ยังมีสิ่งพิมพ์พิเศษ NIST 800-22ที่อธิบายจำนวนการทดสอบดังกล่าวและผลของการใช้การทดสอบเหล่านี้กับค่าคงที่ทางกายภาพจำนวนหนึ่งซึ่งรวมถึง - ทองหล่อและดูเถิด - pi มากกว่าหนึ่งล้านบิต ผลลัพธ์ของ pi มีให้ในภาคผนวก B ของรายงานและมีลักษณะดังนี้:

Statistical Test                            P-value
Frequency                                   0.578211
Block Frequency (m = 128)                   0.380615
Cusum-Forward                               0.628308
Cusum-Reverse                               0.663369
Runs                                        0.419268
Long Runs of Ones                           0.024390
Rank                                        0.083553
Spectral DFT                                0.010186
Non-overlapping Templates (m = 9, B = 000000001)          0.165757
Overlapping Templates (m = 9)               0.296897
Universal                                   0.669012
Approximate Entropy (m = 10)                0.361595
Random Excursions (x = +1)                  0.844143
Random Excursions Variant (x = -1)          0.760966
Linear Complexity (M = 500)                 0.255475
Serial (m = 16, 2m∇Ψ )                      0.143005

pi เป็นตัวสร้างลำดับแบบสุ่มที่ดีหรือไม่? ดูผลลัพธ์ข้างต้น (หรือค้นหาความหมายของตัวแปรคอลัมน์ด้านซ้ายหากคุณไม่ทราบว่าหมายถึงอะไร) และตรวจสอบว่าตรงกับความต้องการของคุณหรือไม่


1
อ่านฉันสำหรับ Diehard บอกว่ามันต้องการข้อมูลไบนารีประมาณ 10-12 เมกะไบต์ (ที่ดีที่สุดที่ฉันสามารถหาได้คือ 32 กิโลไบต์) หากคุณใช้กับข้อมูล ascii การทดสอบจะค่อนข้างออกไปจากสิ่งที่แอปพลิเคชันคาดหวัง

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