วาดจำนวนเต็มอย่างอิสระและสุ่มจาก 1 ถึงโดยใช้ยุติธรรม d6?


18

ฉันต้องการวาดจำนวนเต็มจาก 1 ถึงเฉพาะเจาะจงโดยการหมุนลูกเต๋าหกเหลี่ยมที่ยุติธรรมจำนวนหนึ่ง (d6) คำตอบที่ดีจะอธิบายว่าทำไมวิธีการในการสร้างจำนวนเต็มเหมือนกันและเป็นอิสระยังไม่มีข้อความN

ในฐานะที่เป็นตัวอย่างที่เป็นตัวอย่างก็จะเป็นประโยชน์ในการอธิบายถึงวิธีการแก้ปัญหาการทำงานสำหรับกรณีของNN = 150N=150

นอกจากนี้ฉันต้องการให้กระบวนการมีประสิทธิภาพมากที่สุด: หมุนจำนวน d6 โดยเฉลี่ยสำหรับแต่ละหมายเลขที่สร้าง

อนุญาตการแปลงจากSenaryเป็นทศนิยม


คำถามนี้ได้รับแรงบันดาลใจจาก Meta หัวข้อนี้

คำตอบ:


12

เซตΩ ( d , n )Ω(d,n)ของผลลัพธ์ที่สามารถระบุตัวตนได้อย่างชัดเจนในn การnหมุนอิสระของตายด้วยd = 6d=6ใบหน้ามีองค์ประกอบd n dnเมื่อตายเป็นธรรมนั่นหมายความว่าผลของการม้วนหนึ่งแต่ละคนมีความน่าจะเป็น1 / d1/dและความเป็นอิสระหมายถึงแต่ละผลลัพธ์เหล่านี้จึงจะมีความน่าจะเป็น( 1 / d ) n :(1/d)n:นั่นคือพวกเขามีการกระจายชุดP d , nPd,n.

สมมติว่าคุณได้วางแผนขั้นตอนบางอย่างทีtว่าทั้งกำหนดเมตรmผลของ( = 150 )c(=150)ตายด้านเดียว - นั่นคือองค์ประกอบของΩ ( , ม. )Ω(c,m) --or อื่นล้มเหลวรายงาน (ซึ่งหมายความว่าคุณจะต้องทำซ้ำ เพื่อให้ได้ผลลัพธ์) นั่นคือ,

T : Ω ( d , n ) →การΩ ( , ม. ) { ความล้มเหลว}

t:Ω(d,n)Ω(c,m){Failure}.

ให้FFเป็นความน่าจะเป็นเสื้อtผลในความล้มเหลวและทราบว่าFFบางหลายหนึ่งของd - n ,dn,พูด

F = Pr ( t ( ω ) = ความล้มเหลว) = N Fd - n

F=Pr(t(ω)=Failure)=NFdn.

(สำหรับการอ้างอิงในอนาคตทราบว่าจำนวนที่คาดหวังครั้งจะต้องถูกเรียกก่อนที่จะล้มเหลวไม่เป็น )ทีt1 / ( 1 - F )1/(1F).

ความต้องการที่ผลลัพธ์เหล่านี้ในจะเหมือนกันและเป็นอิสระตามเงื่อนไขในไม่ได้รายงานหมายถึงความล้มเหลวที่รักษาความน่าจะเป็นในแง่ที่ว่าสำหรับเหตุการณ์ทุกΩ ( , ม. ) Ω(c,m)เสื้อT Ω ( , ม. ) ,ttAΩ(c,m),

P d , n ( t A )1 - F =Pc,m(A)

Pd,n(tA)1F=Pc,m(A)(1)

ที่ไหน

T * ( ) = { ω โอห์ม| T ( ω ) }

t(A)={ωΩt(ω)A}

คือชุดม้วนตายที่โพรซีเดอร์กำหนดให้กับเหตุการณ์เสื้อtA.

พิจารณาเหตุการณ์อะตอมซึ่งต้องมีความน่าจะเป็นปล่อย (ลูกเต๋าที่เกี่ยวข้องกับ ) มีองค์ประกอบ กลายเป็น= { η } โอห์ม( , ม. ) A={η}Ω(c,m)-ม. cm.t ( A )t(A) η ηN ηNη ( 1 )(1)

N η d - n1 - N F d - n = P d , n ( t A )1 - F =P,ม.()=-ม.

Nηdn1NFdn=Pd,n(tA)1F=Pc,m(A)=cm.(2)

ทันทีที่เท่ากับจำนวนเต็มN ηNη N N. มันยังคงเป็นเพียงการหาโพรซีเดอร์ที่มีประสิทธิภาพมากที่สุด จำนวนที่คาดหวังของความล้มเหลวที่ไม่ใช่ความล้มเหลวต่อม้วนของ side dieคือt. t.c

1ม. (1-F)

1m(1F).

มีนัยยะสองอย่างที่ชัดเจนและทันที ข้อหนึ่งคือถ้าเราสามารถทำให้ขนาดเล็กลงเมื่อโตขึ้นขนาดใหญ่ผลของการรายงานความล้มเหลวจะเป็นศูนย์แบบไม่มีสัญญาณ อีกอันคือสำหรับกำหนด(จำนวนม้วนของ -sided die เพื่อจำลอง) เราต้องการทำให้ขนาดเล็กที่สุดเท่าที่จะทำได้f Fm mm mc cFF

ลองมาดูอย่างใกล้ชิดโดยการล้างตัวส่วน:( 2 )(2)

N c m = d n - N F > 0

Ncm=dnNF>0.

สิ่งนี้ทำให้เห็นได้ชัดว่าในบริบทที่กำหนด (กำหนดโดย ),ถูกสร้างให้มีขนาดเล็กที่สุดเท่าที่จะทำได้โดยทำให้เท่ากับตัวคูณที่ใหญ่ที่สุดของที่น้อยกว่าหรือเท่ากับ เราอาจเขียนสิ่งนี้ในรูปของฟังก์ชั่นจำนวนเต็มมากที่สุด (หรือ "ชั้น")เป็นC , D , n , ม. c,d,n,mF Fd n - N F dnNFcm n dn.*

N = d nเมตร

N=dncm.

ในที่สุดก็เป็นที่ชัดเจนว่าควรจะเป็นขนาดเล็กที่สุดสำหรับประสิทธิภาพสูงสุดเพราะมันมีขนาดความซ้ำซ้อนในเสื้อโดยเฉพาะจำนวนม้วนที่คาดหวังของด้านที่จำเป็นในการผลิตหนึ่งของด้านตายคือN NT d tdc

N × nm ×11 - .

N×nm×11F.

ดังนั้นการค้นหาขั้นตอนที่มีประสิทธิภาพสูงของเราควรมุ่งเน้นไปที่กรณีที่เท่ากับหรือเพิ่งจะสูงกว่ากำลังบางส่วนd n dnเมตรcm.

การวิเคราะห์สิ้นสุดลงโดยแสดงให้เห็นว่าสำหรับและมีลำดับของทวีคูณซึ่งวิธีนี้ใกล้เคียงกับประสิทธิภาพที่สมบูรณ์แบบ จำนวนนี้ในการหาซึ่งวิธีในขีด จำกัด (อัตโนมัติรับประกัน ) หนึ่งลำดับดังกล่าวได้มาโดยการและการพิจารณาd dc , c,( n , m ) (n,m)( n , m ) (n,m)d n / c m1 dn/cm1N = 1 N=1F 0 F0n = 1 , 2 , 3 , ...n=1,2,3,

m = n บันทึกdเข้าสู่ระบบ

m=nlogdlogc.(3)

การพิสูจน์นั้นตรงไปตรงมา

ทั้งหมดนี้หมายความว่าเมื่อเรายินดีที่จะม้วนต้นฉบับด้านจำนวนมากพอครั้งเราสามารถคาดหวังที่จะจำลองเกือบผลลัพธ์ของตายด้านต่อม้วน . ค่าเท่ากันd dn , n,ล็อกd / log c = ล็อกc d logd/logc=logcdcc

มันเป็นไปได้ที่จะจำลองเป็นจำนวนมากม้วนเป็นอิสระจากด้านเดียวตายใช้ยุติธรรมด้านเดียวตายโดยใช้ค่าเฉลี่ยของม้วนต่อผลลัพธ์ที่สามารถทำให้เล็กโดยพลการโดยเลือกใหญ่พอm mc cd dlog ( c ) / log ( d ) + ϵ = log d ( c ) + ϵ log(c)/log(d)+ϵ=logd(c)+ϵϵ ϵmm


ตัวอย่างและอัลกอริทึม

ในคำถามและดังนั้นd = 6 d=6C = 150 ,c=150,

log d ( c ) = log ( c )log ( d )2.796489

logd(c)=log(c)log(d)2.796489.

ดังนั้นขั้นตอนที่เป็นไปได้ที่ดีที่สุดจะต้องเฉลี่ยอย่างน้อยม้วน a เพื่อจำลองผลลัพธ์แต่ละรายการ2.7964892.796489d6d150

การวิเคราะห์แสดงวิธีการทำสิ่งนี้ เราไม่จำเป็นต้องใช้ทฤษฎีจำนวนเพื่อดำเนินการ: เราสามารถจัดตารางพลังและพลังและเปรียบเทียบพวกมันเพื่อหาที่อยู่ใกล้ การคำนวณแรงเดรัจฉานนี้ให้คู่d n = 6 n dn=6nc m = 150 m cm=150mc md ncmdn ( n , m )(n,m)

(n,m){(3,1),(14,5),}

(n,m){(3,1),(14,5),}

เช่นสอดคล้องกับตัวเลข

(6n,150m){(216,150),(78364164096,75937500000),}.

(6n,150m){(216,150),(78364164096,75937500000),}.

ในกรณีแรกจะเชื่อมโยงของผลสามม้วนที่ล้มเหลวและอื่น ๆผลลัพธ์ที่แต่ละคนจะได้รับการเชื่อมโยงกับผลเดียวของ tt216150=66216150=66d6150150d150

ในกรณีที่สองจะเชื่อมโยงของผลลัพธ์ 14 ม้วนที่ล้มเหลว - ประมาณ 3.1% ของพวกเขาทั้งหมด - และอื่น ๆ จะส่งออกลำดับที่ 5 ผลลัพธ์ของการเป็นtt78364164096759375000007836416409675937500000d6d150

ขั้นตอนวิธีการง่ายที่จะใช้ttป้ายใบหน้าของด้านเดียวตายกับเลขและใบหน้าของด้านเดียวตายกับเลขม้วนตายครั้งแรกจะถูกตีความว่าเป็นจำนวน -digit ในฐาน สิ่งนี้จะถูกแปลงเป็นตัวเลขในฐาน หากมีที่มากที่สุดตัวเลขลำดับของที่ผ่านมาหลักคือการส่งออก มิฉะนั้นส่งกลับล้มเหลวโดยเรียกตัวเองซ้ำdd0,1,,d10,1,,d1cc0,1,,c1.0,1,,c1.nnnnd.d.c.c.mmmmtt

สำหรับลำดับที่ยาวกว่านี้คุณสามารถหาคู่ที่เหมาะสม โดยพิจารณาจากการลู่เข้ากันของของการขยายส่วนต่อเนื่องของ ทฤษฎีของเศษส่วนต่อเนื่องแสดงให้เห็นว่าคอนเวอร์เจนซ์เหล่านี้สลับกันระหว่างการมีค่าน้อยกว่าและมากกว่านั้น (สมมติว่ายังไม่มีเหตุผล) เลือกผู้ที่น้อยกว่า(n,m)(n,m)n/mn/mx=log(c)/log(d).x=log(c)/log(d).xxxxx.x.

ในคำถามนี้มีคอนเวอร์เจนต์สองสามตัวแรก

3,14/5,165/59,797/285,4301/1538,89043/31841,279235/99852,29036139/10383070.

3,14/5,165/59,797/285,4301/1538,89043/31841,279235/99852,29036139/10383070.

ในกรณีสุดท้ายลำดับของ 29,036,139 ม้วน a d6จะสร้างลำดับของ 10,383,070 ม้วน a ที่d150มีอัตราความล้มเหลวน้อยกว่าสำหรับประสิทธิภาพของแยกแยะได้จากขีด จำกัด เชิงเส้นกำกับ2×108,2×108,2.796492.79649


2
น่าอัศจรรย์เช่นเคยดูเหมือนว่าคำตอบนี้ถูกจัดรูปแบบและเตรียมไว้ก่อนที่คำถามจะถูกถาม!
Łukasz Grad

1
ขอบคุณ @ ŁukaszGrad อย่างไรก็ตามฉันไร้เดียงสาของการมีส่วนร่วมใด ๆ และฉันแน่ใจว่าผู้อ่านที่มีตาเฉียบแหลมจะพบหลักฐานของความรีบเร่งที่ฉันได้เขียนสิ่งนี้ออกมาซึ่งฉันต้องขออภัยล่วงหน้า
whuber

มันไม่ควรนำมาพิจารณาด้วยเช่นกันว่าเมื่อไม่ใช่ไพร์มพื้นที่ตัวอย่างสามารถแบ่งเป็นส่วนย่อยของความน่าจะเป็นที่เท่ากันได้หรือไม่ ตัวอย่างเช่นคุณสามารถใช้ d6 เป็น d2 หรือ d3 และพื้นที่ตัวอย่างที่มี 162 องค์ประกอบ - ใกล้กับ 150 มากกว่า 216 คือ - จากนั้นสามารถทำได้ด้วย 4 ม้วน 1d6 + 3d3 (นั่นให้เลขที่คาดหวังแบบเดียวกันม้วนเป็นโซลูชัน 3d6 แต่มีความแปรปรวนต่ำกว่า)ddΩ(d,1)Ω(d,1)
Scortchi - Reinstate Monica

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

7

สำหรับกรณีของให้กลิ้ง d6 สามครั้งอย่างชัดเจนสร้างผลลัพธ์N=150N=15063=21663=216

ผลลัพธ์ที่ต้องการสามารถทำเป็นตารางด้วยวิธีนี้:

  • บันทึก d6 สามครั้งตามลำดับ นี้ก่อให้เกิดผลลัพธ์ C ผลลัพธ์จะเหมือนกันเพราะค่าทั้งหมดของมีแนวโน้มเท่ากัน (ลูกเต๋ามีความยุติธรรมและเราปฏิบัติต่อแต่ละม้วนเหมือนกัน)a,b,ca,b,ca,b,ca,b,c
  • ลบ 1 จากแต่ละ
  • นี่คือหมายเลขวุฒิสภา: แต่ละหลัก (ค่าสถานที่) ไปจาก 0 ถึง 5 โดยกำลังของ 6 ดังนั้นคุณสามารถเขียนตัวเลขเป็นทศนิยมโดยใช้(a1)×62+(b1)×61+(c1)×60
    (a1)×62+(b1)×61+(c1)×60
  • เพิ่ม 1
  • หากผลลัพธ์เกิน 150 ให้ทิ้งผลลัพธ์แล้วหมุนอีกครั้ง

ความน่าจะเป็นของการรักษาผลเป็น{36} ม้วนทั้งหมดมีความเป็นอิสระและเราทำซ้ำขั้นตอนจนกว่า "ความสำเร็จ" (ผลใน ) ดังนั้นจำนวนของความพยายามที่จะสร้าง 1 เสมอระหว่าง 1 และ 150 จะถูกกระจายเป็นตัวแปรสุ่มทางเรขาคณิตซึ่ง มีความคาดหวัง{25} ดังนั้นการใช้วิธีนี้ในการสร้าง 1 เสมอต้องหมุนลูกเต๋าเฉลี่ย (เพราะแต่ละครั้งมี 3 ลูกเต๋า)p=150216=2536p=150216=25361,2,,1501,2,,150p1=3625p1=36253625×3=4.323625×3=4.32


ขอมอบเครดิตให้แก่ @whuber เพื่อแนะนำสิ่งนี้ในการแชท


ฉันเชื่อว่าวิธีการของเฮนรี่ไม่ได้ก่อให้เกิดการแจกแจงแบบเดียวกัน นั่นเป็นเพราะการรีไซเคิลจะทำให้ตัวเลขบางหลักเป็นที่นิยม ฉันไม่แน่ใจเกี่ยวกับเรื่องนี้อย่างสมบูรณ์เพราะฉันไม่เข้าใจวิธีการรีไซเคิลที่จะดำเนินการ
whuber

1
@whuber AH! ฉันเข้าใจความกังวลของคุณแล้ว ฉันพยายามอธิบายกระบวนการให้กับตัวเองและฉันก็รู้ว่าทำไมสัญชาตญาณของฉันจึงมีข้อบกพร่อง: ความน่าจะเป็นของการรีดตายเพิ่มเติมอาจเปลี่ยนการกำหนดความน่าจะเป็นตัวเลขทศนิยมและทำให้มันไม่สม่ำเสมอเพราะเราไม่รู้ล่วงหน้า ลูกเต๋าจำนวนมากที่เรากลิ้ง
Sycorax พูดว่า Reinstate Monica

4

นี่คือทางเลือกที่ได้ง่ายที่จะตอบโดยSycoraxสำหรับกรณีที่Nตั้งแต่คุณสามารถทำตามขั้นตอนต่อไปนี้:N=150150=5×5×6

การสร้างหมายเลขสุ่มสม่ำเสมอจาก 1 ถึง 150:

  • ทำให้สามม้วนสั่ง 1D6 และแสดงเหล่านี้เป็นR_3R1,R2,R3
  • หากหนึ่งในสองม้วนแรกเป็นหกให้หมุนใหม่อีกครั้งจนกระทั่งไม่ใช่ 6
  • หมายเลขเป็นหมายเลขที่เหมือนกันโดยใช้สัญกรณ์ตำแหน่งพร้อมกับเลขฐาน 5-5-6 ดังนั้นคุณสามารถคำนวณจำนวนที่ต้องการเป็น: (R1,R2,R3)X=30(R11)+6(R21)+(R31)+1.

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


1
คุณสามารถระบุประสิทธิภาพของวิธีนี้ในแง่ของจำนวนม้วนที่คาดไว้ต่อการจับที่สร้างขึ้นและชี้แจงว่าทำไมผลที่ได้จึงเหมือนกันในวันที่ 1,2, .... , 150?
Sycorax พูดว่า Reinstate Monica

ความน่าจะเป็นที่จะได้ผลลัพธ์ที่ไม่ต้องมีการคือซึ่งเหมือนกับคำตอบของคุณ เพื่อให้เข้าใจว่าทำไมมันถึงเป็นรูปแบบเดียวกันโปรดทราบว่าคุณกำลังสร้างหมายเลขเหมือนกันอย่างมีประสิทธิภาพโดยใช้สัญกรณ์ตำแหน่งกับ radix 5-5-6 (เช่นตัวเลขสุดท้ายคือหน่วย หลักสุดท้ายคือ "สามสิบ") 25/36
Reinstate Monica

1
วิธีการนี้เป็นเพียงการเปลี่ยนแปลงเล็กน้อยในวิธีการในคำตอบของคุณ ในคำตอบของคุณคุณสร้างหมายเลขที่สม่ำเสมอในสเกล 6-6-6 แล้วละทิ้งค่าที่ไม่ถูกต้องในคำตอบของฉันคุณจะทิ้งค่าที่ไม่ถูกต้องก่อนเพื่อสร้างตัวเลขในสเกล 5-5-6
Reinstate Monica

3
+1 ตามจริงแล้วนี่เป็นอัลกอริทึมที่น่าดึงดูด มันเป็นสิ่งที่น่าสนใจและอาจเป็นนัยของการวิเคราะห์ในวงกว้างว่าใช้ระบบออโตเมติกอัน จำกัด ซึ่งขับเคลื่อนโดยแม่พิมพ์ม้วน มีสี่สถานะ {Start, A, B, Accept} เริ่มการเปลี่ยนเป็น A เมื่อหมุนไป 1..5; การเปลี่ยนเป็น B เมื่อหมุน 1..5; และการเปลี่ยน B เพื่อยอมรับเมื่อหมุนอะไร การเปลี่ยนแต่ละครั้งจะบันทึกค่าของม้วนที่เกิดขึ้นดังนั้นเมื่อมาถึงยอมรับคุณส่งออกลำดับของสามม้วนที่เก็บไว้และการเปลี่ยนกลับไปที่เริ่มโดยอัตโนมัติ
whuber

4
คุณปฏิเสธบ่อยครั้งที่ @Sycorax แต่ทำได้น้อยลงโดยเฉลี่ย คาดว่าจะไม่มี ม้วนต่อตัวแปรคือ3.4 65+65+1=3.4
Scortchi - Reinstate Monica

2

เป็นตัวอย่างของอัลกอริทึมในการเลือกอย่างสม่ำเสมอระหว่างค่าโดยใช้ลูกเต๋าหกด้านลองทำสิ่งนี้ซึ่งใช้แต่ละม้วนเพื่อคูณค่าที่มีอยู่ด้วยและทำให้ค่าใหม่แต่ละค่ามีแนวโน้มเท่ากัน:1506

  • หลังจากม้วนคุณมีความเป็นไปได้ไม่เพียงพอที่จะแยกความแตกต่างค่า01150
  • หลังจากม้วนคุณมี6ความเป็นไปได้ไม่เพียงพอที่จะแยกแยะค่า150ค่า1
  • หลังจาก2ม้วนคุณมี36ความเป็นไปได้ไม่เพียงพอที่จะแยกความแตกต่างค่า 150
  • หลังจาก3ม้วนคุณมี216ความเป็นไปได้เพียงพอที่จะแยกความแตกต่างค่า150แต่มี66ค่าที่เหลือ ความน่าจะเป็นที่คุณหยุดตอนนี้คือ150216
  • หากคุณยังไม่หยุดหลังจากนั้น4ม้วนคุณมีความเป็นไปได้ที่เหลืออยู่396 รายการเพียงพอที่จะแยกแยะความแตกต่างได้150ค่าสองวิธี แต่มี96ค่าที่เหลือ ความน่าจะเป็นที่คุณหยุดตอนนี้คือ3001296
  • หากคุณยังไม่หยุดหลังจากนั้น5ม้วนคุณมีความเป็นไปได้ที่เหลืออยู่576 รายการเพียงพอที่จะแยกแยะค่า150ค่าสามวิธี แต่มี96ค่าที่เหลือ ความน่าจะเป็นที่คุณหยุดตอนนี้คือ4507776
  • หากคุณยังไม่หยุดหลังจาก6ม้วนคุณมีความเป็นไปได้ที่เหลืออยู่756 รายการเพียงพอที่จะแยกแยะ150ค่าห้าวิธี แต่มี6ค่าที่เหลือ; ความน่าจะเป็นที่คุณหยุดตอนนี้คือ75046656

หากคุณอยู่ในหนึ่งในค่าที่เหลือ6หลังจาก6ม้วนแล้วคุณจะอยู่ในสถานการณ์ที่คล้ายกับตำแหน่งหลังจาก1ม้วน ดังนั้นคุณสามารถดำเนินการต่อในลักษณะเดียวกัน: ความน่าจะเป็นที่คุณหยุดหลังจาก7ม้วนคือ0279936หลังจาก8ม้วนคือ1501679616เป็นต้น

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


Sycorax ถามในความคิดเห็นเพื่อหาอัลกอริทึมที่ชัดเจนยิ่งขึ้น

  • ก่อนอื่นฉันจะทำงานในฐาน6กับ150 10 = 410 6
  • ที่สองแทนที่จะเป็นค่าเป้าหมาย1 6ถึง410 6ฉันจะลบออกหนึ่งค่าดังนั้นค่าเป้าหมายคือ0 6ถึง409 6
  • สามตายแต่ละคนควรมีค่า0 6ถึง5 6และกลิ้งตายเกี่ยวข้องกับการเพิ่มฐาน6หลักไปทางด้านขวามือของหมายเลขที่สร้างขึ้นที่มีอยู่ ตัวเลขที่สร้างสามารถมีศูนย์นำหน้าและจำนวนหลักคือจำนวนม้วนที่ผ่านมา

อัลกอริทึมคือการทอยลูกเต๋าแบบต่อเนื่อง:

  • ม้วนลูกเต๋าสามลูกแรกที่จะสร้างจำนวนจาก000 6ไป555 6 ตั้งแต่ 1,000 6 ÷ 410 6 = 1 6  ที่เหลือ  150 6คุณใช้ค่าที่สร้างขึ้น (ซึ่งเป็นส่วนที่เหลือของมันหารด้วย410 6 ) หากค่าที่สร้างขึ้นนั้นต่ำกว่า1,000 6 - 150 6 = 410 6และหยุด;

  • If continuing, roll the fourth die so you have now generated a number from 41006 to 55556. Since 100006÷4106=126 remainder 2406 you take the remainder of the generated value on division by 4106 if the generated value is strictly below 1000062406=53206 and stop;

  • หากดำเนินการต่อม้วนตายห้าเพื่อให้คุณได้สร้างตอนนี้ตัวเลขจาก53,200 6ที่จะ55555 6 ตั้งแต่ 100000 6 ÷ 410 6 = 123 6  ที่เหลือ  330 6คุณใช้เวลาที่เหลือของค่าที่สร้างขึ้นในการหาร410 6ถ้าค่าที่สร้างขึ้นมีค่าต่ำกว่า100000 6 - 330 6 = 55230 6และหยุด;

  • If continuing, roll the sixth die so you have now generated a number from 5523006 to 5555556. Since 10000006÷4106=12356 remainder 106 you take the remainder of the generated value on division by 4106 if the generated value is strictly below 10000006106=5555506 and stop;

  • etc.


(+1) This answer would be more clear if you explained how you map the outcomes of, say, 4d6 or 5d6 to 1,2, ..., 150.
Sycorax says Reinstate Monica

@Sycorax - I have now provided a base 6 mapping
Henry

1
Entropy considerations indicate you can do substantially better than this algorithm. It also remains to show that your algorithm actually produces independently distributed values with uniform distributions.
whuber

@whuber - My algorithm produces exactly one integer from 150 possibilities and does so uniformly providing the dice rolls are uniform and independent. At each step if reached, each of the 150 values is equally likely to be selected. It does not produce multiple values (unlike your answer)
Henry

1
I misunderstood what you meant, then, in writing "the algorithm is successive rolls of dice." (I should have read through more carefully.) In doing so, it seems to me your algorithm does not produce a uniform distribution, but I'm not sure because I haven't been able to figure out what the general algorithm is intended to be. It would be good to see a demonstration that it does produce uniform values.
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.