สูตรการโยนลูกเต๋า


14

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

ฉันพยายามหาสูตรที่ดีกว่าสำหรับการแก้ปัญหา ปัญหาคือ: ถ้าฉันมี 4d6 (4 ลูกเต๋า 6 ด้านธรรมดา 6) และหมุนทั้งหมดในครั้งเดียวให้ลบตายด้วยจำนวนต่ำสุด (เรียกว่า "วาง") จากนั้นรวม 3 ที่เหลือความน่าจะเป็นของผลลัพธ์ที่เป็นไปได้แต่ละข้อ ? ฉันรู้คำตอบคือ:

Sum (Frequency): Probability
3   (1):         0.0007716049
4   (4):         0.0030864198
5   (10):        0.0077160494
6   (21):        0.0162037037
7   (38):        0.0293209877
8   (62):        0.0478395062
9   (91):        0.0702160494
10  (122):       0.0941358025
11  (148):       0.1141975309
12  (167):       0.1288580247
13  (172):       0.1327160494
14  (160):       0.1234567901
15  (131):       0.1010802469
16  (94):        0.0725308642
17  (54):        0.0416666667
18  (21):        0.0162037037

ค่าเฉลี่ยคือ 12.24 และส่วนเบี่ยงเบนมาตรฐานคือ 2.847

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

ฉันตั้งโปรแกรมสูตรเพื่อรักษาลูกเต๋าทั้งหมดในวิทยาลัย ฉันถามอาจารย์สถิติของฉันเกี่ยวกับเรื่องนี้และเขาพบหน้านี้ซึ่งเขาอธิบายให้ฉัน มีความแตกต่างของประสิทธิภาพการทำงานอย่างมากระหว่างสูตรนี้และแรงเดรัจฉาน: 50d6 ใช้เวลา 20 วินาที แต่ 8d6 ลดการขัดข้องต่ำสุดหลังจาก 40 วินาที (โครมมีหน่วยความจำไม่เพียงพอ)

ปัญหานี้เกิดจากปัญหา NP-Complete หรือไม่ ถ้าใช่โปรดแสดงหลักฐานถ้าไม่โปรดระบุสูตรแรงที่ไม่ดุร้ายเพื่อแก้ปัญหา

โปรดทราบว่าฉันไม่ค่อยรู้เรื่อง NP-Complete มากนักดังนั้นฉันอาจคิดถึง NP, NP-Hard หรืออย่างอื่น การพิสูจน์ความสมบูรณ์แบบของ NP นั้นไม่มีประโยชน์อะไรสำหรับฉันเหตุผลเดียวที่ฉันขอมันคือการป้องกันไม่ให้คนเดา และโปรดเปลือยกับฉันเพราะมันใช้เวลานานมากตั้งแต่ฉันทำสิ่งนี้: ฉันจำสถิติไม่ได้และฉันอาจต้องแก้ปัญหานี้

เป็นการดีที่ฉันกำลังมองหาสูตรทั่วไปมากขึ้นสำหรับจำนวน X ของลูกเต๋าที่มีด้าน Y เมื่อ N ของพวกเขาลดลง แต่เริ่มต้นด้วยสิ่งที่ง่ายกว่า

แก้ไข:

ฉันยังต้องการสูตรเพื่อความถี่ออก แต่เป็นที่ยอมรับได้เฉพาะความน่าจะเป็นผลลัพธ์

สำหรับผู้ที่สนใจฉันได้ตั้งโปรแกรมคำตอบของ whuber ใน JavaScript บนGitHub ของฉัน (ในการทำเช่นนี้เป็นการทดสอบเท่านั้นที่ใช้ฟังก์ชันที่กำหนดไว้)


1
นี่เป็นคำถามที่น่าสนใจ ฉันคิดว่ามันควรจะอยู่ในหัวข้อที่นี่ ขอขอบคุณสำหรับการพิจารณาของคุณ.
gung - Reinstate Monica

1
แม้ว่าการตั้งค่าจะน่าสนใจ แต่คุณยังไม่ได้ถามคำถามที่ตอบได้: ความคิดเรื่องความสมบูรณ์แบบของ NP ขึ้นอยู่กับการมีปัญหาหลายระดับในขณะที่คุณอธิบายเพียงหนึ่งคำถามเท่านั้น คุณต้องการให้มันพูดคุยกันโดยทั่วไปอย่างไร แม้ว่าคุณจะบอกใบ้ว่าจำนวนของลูกเต๋าอาจแตกต่างกันไป แต่ตัวเลือกเพิ่มเติมต่าง ๆ นั้นเป็นไปได้และพวกเขาอาจให้คำตอบที่แตกต่างกัน: คุณสามารถเปลี่ยนจำนวนของใบหน้า, ค่าบนใบหน้า, จำนวนของลูกเต๋าและจำนวนของลูกเต๋าที่ถูกทิ้งทั้งหมด ในรูปแบบต่างๆที่มีความสัมพันธ์ที่หลากหลายในหมู่พวกเขา
whuber

1
@whuber เธอไม่ทราบทฤษฎีความซับซ้อนใด ๆ แต่ฉันคิดว่ามันชัดเจนว่าเธอกำลังถามครอบครัวของปัญหาที่เกิดขึ้นจากการเปลี่ยนจำนวนของลูกเต๋า ฉันคิดว่าฉันมีอัลกอริทึมที่มีประสิทธิภาพสำหรับมัน
Andy Jones

2
@ ฉันเห็นว่าในตอนท้ายเธอจะขอ "สูตรสามัญจำนวนมากขึ้นสำหรับจำนวน X ของลูกเต๋าที่มีด้าน Y เมื่อ N ของพวกเขาถูกทิ้ง"
whuber

@whuber ฮะ! เห็นได้ชัดว่าไม่ชัดเจนอย่างที่ฉันคิดตอนนั้น ขอโทษฉันไม่ดี
Andy Jones

คำตอบ:


5

วิธีการแก้

ให้มีลูกเต๋าแต่ละให้โอกาสเท่าเทียมกันเพื่อผลที่1 , 2 , ... , d = 6 ให้Kเป็นค่าต่ำสุดเมื่อโยนลูกเต๋าnทั้งหมดโดยอิสระn=41,2,,d=6Kn

พิจารณาการกระจายของผลรวมของทั้งหมดค่าเงื่อนไขในK ให้Xเป็นผลรวมนี้ ฟังก์ชั่นการสร้างสำหรับจำนวนวิธีในการสร้างค่าใด ๆ ของXโดยที่ค่าต่ำสุดคือkเป็นอย่างน้อยnKXXk

(1)f(n,d,k)(x)=xk+xk+1++xd=xk1xdk+11x.

เนื่องจากลูกเต๋ามีความเป็นอิสระฟังก์ชันการสร้างสำหรับจำนวนวิธีในการสร้างค่าของโดยที่nลูกเต๋าทั้งหมดแสดงค่าของkหรือมากกว่านั้นคือXnk

(2)f(n,d,k)(x)n=xkn(1xdk+11x)n.

ฟังก์ชั่นการสร้างนี้รวมคำศัพท์สำหรับเหตุการณ์ที่เกินkดังนั้นเราต้องลบออก ดังนั้นฟังก์ชั่นการสร้างสำหรับจำนวนวิธีในการสร้างค่าของX ที่กำหนดK = kคือKkXK=k

(3)f(n,d,k)(x)nf(n,d,k+1)(x)n.

สังเกตว่าผลรวมของค่าสูงสุดคือผลรวมของค่าทั้งหมดลบที่เล็กที่สุดเท่ากับXKฟังก์ชั่นการสร้างจึงต้องมีการแบ่งตามkมันจะกลายเป็นฟังก์ชันสร้างความน่าจะเป็นเมื่อคูณด้วยโอกาสร่วมกันของการรวมกันของลูกเต๋า :n1k ( 1 / d ) nXKk(1/d)n

(4)dnk=1dxk(f(n,d,k)(x)nf(n,d,k+1)(x)n).

เนื่องจากผลิตภัณฑ์พหุนามและกำลังทั้งหมดสามารถคำนวณได้ในการดำเนินงาน (พวกเขาเป็น convolutions และดังนั้นจึงสามารถดำเนินการได้ด้วยการแปลงฟูริเยร์ที่ไม่ต่อเนื่อง) ความพยายามในการคำนวณทั้งหมดคือn) โดยเฉพาะอย่างยิ่งมันเป็นอัลกอริทึมเวลาพหุนามO ( kO(nlogn)O(knlogn)


ตัวอย่าง

งาน Let 's ผ่านตัวอย่างในคำถามกับและ 6d = 6n=4d=6

สูตรสำหรับ PGF ของเงื่อนไขบนให้X K k(1)XKk

f(4,6,1)(x)=x+x2+x3+x4+x5+x6f(4,6,2)(x)=x2+x3+x4+x5+x6f(4,6,5)(x)=x5+x6f(4,6,6)(x)=x6f(4,6,7)(x)=0.

เพิ่มไปยังเป็นพลังงานในสูตรผลิต( 2 )n=4(2)

f(4,6,1)(x)4=x4+4x5+10x6++4x23+x24f(4,6,2)(x)4=x8+4x9+10x10++4x23+x24f(4,6,5)(x)4=x20+4x21+6x22+4x23+x24f(4,6,6)(x)4=x24f(4,6,7)(x)4=0

ความแตกต่างอย่างต่อเนื่องของพวกเขาในสูตรคือ(3)

f(4,6,1)(x)4f(4,6,2)(x)4=x4+4x5+10x6++12x18+4x19f(4,6,2)(x)4f(4,6,3)(x)4=x8+4x9+10x10++4x20f(4,6,5)(x)4f(4,6,6)(x)4=x20+4x21+6x22+4x23f(4,6,6)(x)4f(4,6,7)(x)4=x24.

ผลรวมในสูตรคือ(4)

64(x3+4x4+10x5+21x6+38x7+62x8+91x9+122x10+148x11+167x12+172x13+160x14+131x15+94x16+54x17+21x18).

ตัวอย่างเช่นโอกาสที่ลูกเต๋าสามอันดับแรกรวมค่าสัมประสิทธิ์เท่ากับx 1414x14

64×160=10/81=0.123456790123456.

มันเป็นข้อตกลงที่สมบูรณ์แบบกับความน่าจะเป็นที่ยกมาในคำถาม

โดยวิธีการที่ค่าเฉลี่ย (คำนวณจากผลนี้) เป็นและค่าเบี่ยงเบนมาตรฐานคือ2.846844415869/129612.24459876513612487/16796162.8468444

การคำนวณที่คล้ายกัน (ไม่เพิ่มประสิทธิภาพ) สำหรับลูกเต๋าแทนที่จะเป็นใช้เวลาน้อยกว่าครึ่งวินาทีสนับสนุนการโต้แย้งว่านี่ไม่ใช่อัลกอริธึมที่ต้องการการคำนวณ นี่คือพล็อตของส่วนหลักของการกระจาย:n = 4n=400n=4

รูป

เนื่องจากต่ำสุดมีแนวโน้มสูงที่จะเท่ากับและผลรวมจะใกล้เคียงอย่างยิ่งกับการกระจายแบบปกติ (ซึ่งหมายถึงและส่วนเบี่ยงเบนมาตรฐานอยู่ที่ประมาณ ) ค่าเฉลี่ยต้องใกล้เคียงกับและค่าเบี่ยงเบนมาตรฐานใกล้เคียงกับมาก นี่เป็นพล็อตเรื่องที่อธิบายอย่างชัดเจน ในความเป็นจริงการคำนวณที่แน่นอนให้ค่าเฉลี่ยประมาณมากกว่าและค่าเบี่ยงเบนมาตรฐานประมาณน้อยกว่า1 X ( 400 × 7 / 2 , 400 × 35 / 12 ) 1400 34.1565 1400 - 1 = 1399 34.16 2.13 × 10 - 32 1,399 1.24 × 10 - วันที่ 31 K1X(400×7/2,400×35/12)140034.156514001=139934.162.13×103213991.24×1031400×35/1235/12}


1
คำตอบของคุณรวดเร็วและถูกต้องดังนั้นฉันจึงทำเครื่องหมายว่าเป็นคำตอบ นอกจากนี้ในการแก้ไขฉันก็บอกว่ามันจะดีถ้ามีความถี่ถ้าเป็นไปได้ เพื่อที่คุณไม่จำเป็นต้องแก้ไขคำตอบของคุณเนื่องจากฉันเห็นว่า6^-4ตัวคูณใช้เพื่อแปลงจากความถี่เป็นความน่าจะเป็น
SkySpiral7

6

แก้ไข: @SkySpiral มีปัญหาในการรับสูตรด้านล่างในการทำงาน ขณะนี้ฉันไม่มีเวลาที่จะทราบว่าปัญหาคืออะไรดังนั้นหากคุณกำลังอ่านสิ่งนี้สิ่งที่ดีที่สุดที่จะดำเนินการภายใต้ข้อสันนิษฐานนั้นไม่ถูกต้อง


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

เริ่มกันเลยโดยไม่ทิ้งลูกเต๋าใด ๆ สมมติว่าหมายถึง TH ตายและคิดว่าแสดงให้เห็นถึงผลรวมของลูกเต๋า แล้วก็ n Y n nXnnYnn

p(Yn=a)=kp(Yn1=ak)p(Xn=k)

ตอนนี้สมมติว่าคือผลรวมของลูกเต๋าเมื่อหนึ่งตายถูกทิ้ง แล้วก็Znn

p(Zn=a)=p(nth die is the smallest)p(Yn1=a)+p(nth die is not the smallest)kp(Zn1=ak)p(Xn=k)

ถ้าเรานิยามว่าคือการกระจายตัวของจำนวนขั้นต่ำของตายแล้วMnn

p(Zn=a)=p(XnMn1)p(Yn1=a|XnMn1)+p(Xn>Mn1)kp(Zn1=ak)p(Xn=k|Xn>Mn1)

และเราสามารถคำนวณโดยใช้Mn

p(Mn=a)=p(XnMn1)p(Xn=a|XnMn1)+p(Xn>Mn1)p(Mn1=a|Xn>Mn1)

อย่างไรก็ตามด้วยกันทั้งหมดนี้แสดงให้เห็นขั้นตอนวิธีการเขียนโปรแกรมแบบไดนามิกตามและm_nควรจะเป็นกำลังสองในnYn,ZnMnn

แก้ไข: ความคิดเห็นที่ได้รับการยกเกี่ยวกับวิธีการคำนวณ{n-1}) เนื่องจากแต่ละคนสามารถรับหนึ่งในหกค่าเท่านั้นเราจึงสามารถสรุปได้ทั้งหมด:p(XnMn1)Xn,Mn1

p(XnMn1)=a,bp(Xn=a,Mn1=b,ab)

ในทำนองเดียวกันสามารถคำนวณได้โดยใช้ Bayes กฎข้อสรุปแล้วมากกว่าค่าความเป็นไปได้ของ{n-1}p(Xn=k|Xn>Mn1)Xn,Mn1


1
+1 มันดูถูกต้องแล้วคุณบอกว่ามันเป็นกำลังสอง แต่ไม่กี่ปีที่ผ่านมาตั้งแต่ฉันรับสถิติ (โดยหลักแล้วฉันเป็นโปรแกรมเมอร์) ดังนั้นฉันต้องการที่จะเข้าใจอย่างเต็มที่ก่อนที่จะทำเครื่องหมายว่าเป็นคำตอบ ฉันยังเห็นว่าคุณมี p (nth คือ die ที่เล็กที่สุด) ซึ่งรวมถึงถ้า n ถูกผูกกับขนาดเล็กที่สุด? เช่นกลิ้งทั้งหมด 3 วินาที
SkySpiral7

จับดี. หากการรีดครั้งที่มีค่าเท่ากับค่าต่ำสุดในปัจจุบันเราสามารถพิจารณาได้ว่าดายนั้นจะถูกทิ้ง ซึ่งในกรณีการจัดจำหน่ายเป็น{n-1} ฉันได้เปลี่ยน s สำหรับ s เพื่อสะท้อนถึงสิ่งนี้ nYn1(<)()
Andy Jones

ขอขอบคุณ. ถ้าฉันเข้าใจอย่างถูกต้องฉันคิดว่าสูตรของคุณคือคำตอบ อย่างไรก็ตามฉันไม่รู้วิธีคำนวณ p (X (n)> M (n-1)) (หรือการปฏิเสธของมัน) หรือ p (X (n) = k | X (n)> M (n-1 )) ดังนั้นฉันยังไม่สามารถใช้คำตอบนี้ได้ ฉันจะทำเครื่องหมายสิ่งนี้เป็นคำตอบ แต่ฉันต้องการข้อมูลเพิ่มเติม คุณสามารถแก้ไขคำตอบเพื่ออธิบายสิ่งเหล่านี้หรือฉันควรโพสต์เป็นคำถามอื่นได้หรือไม่
SkySpiral7

แก้ไขคำตอบของฉัน
Andy Jones

1
ขออภัยฉันรู้ว่าเป็นเวลาหนึ่งปีครึ่ง แต่ในที่สุดฉันก็ได้รับการใช้งานสูตรนี้เป็นรหัส อย่างไรก็ตามสูตร p (Z (n) = a) ปรากฏไม่ถูกต้อง สมมติว่าลูกเต๋า 2 ลูกมี 2 ด้าน (วางต่ำสุด) โอกาสในการได้ผลคือ 1? โอกาสของ X (n) ที่เล็กที่สุดหรือถูกผูกไว้คือ 3/4 และ p (Y (n-1) = 1) คือ 1/2 ดังนั้น Z (n) จะกลับมาอย่างน้อย 3/8 แม้ว่าคำตอบที่ถูกต้องคือ 1/4 สูตร Z ดูถูกต้องสำหรับฉันและฉันไม่รู้วิธีแก้ไข ดังนั้นถ้าถามไม่มากเกินไป: คุณคิดอย่างไร?
SkySpiral7

1

ฉันมีอัลกอริทึมที่มีประสิทธิภาพพอสมควรสำหรับเรื่องนี้ในการทดสอบดูเหมือนว่าจะตรงกับผลลัพธ์ของแรงเดรัจฉานบริสุทธิ์ในขณะที่การพึ่งพาน้อยลงในการแจกแจงความเป็นไปได้ทั้งหมด โดยทั่วไปแล้วจะเป็นแบบทั่วไปมากกว่าปัญหาข้างต้นของ 4d6, ปล่อย 1

สัญกรณ์บางอย่างก่อน: ให้บ่งชี้ว่าคุณกำลังกลิ้งลูกเต๋ามีใบหน้า (ค่าจำนวนเต็มถึง ) และพิจารณาเฉพาะลูกเต๋าสูงสุดที่หมุน เอาท์พุทเป็นลำดับของค่าลูกเต๋าเช่นให้ผลผลิตถ้าคุณกลิ้งบนลูกเต๋าสี่ลูก (โปรดทราบว่าฉันกำลังเรียกมันว่า "ลำดับ" แต่ลำดับไม่สำคัญโดยเฉพาะอย่างยิ่งเนื่องจากสิ่งที่เราใส่ใจในตอนท้ายคือผลรวมของลำดับ)XNdYXY1YN43d63,4,51,3,4,5

ความน่าจะเป็น (หรือมากกว่านั้นโดยเฉพาะ ) เป็นเวอร์ชั่นดั้งเดิมของปัญหาดั้งเดิมโดยเราพิจารณาจากชุดลูกเต๋าที่เฉพาะเจาะจงเท่านั้นและไม่ใช่ชุดที่เป็นไปได้ทั้งหมดที่รวมกันเป็น ได้รับผลรวมP(XNdY=S)P(43d6=S)

สมมติว่ามีค่าที่แตกต่างกันเช่นว่าและแต่ละมีการนับจำนวนของC_iตัวอย่างเช่นถ้าดังนั้น ,และ .Sks0,s1,...,sksi>si+1siciS=3,4,4,5(s0,c0)=(5,1)(s1,c1)=(4,2)(s2,c2)=(3,1)

คุณสามารถคำนวณด้วยวิธีต่อไปนี้:P(XNdY=S)

P(XNdY=S)=(i=0k1(Xh=0i1chci))(j=0XN(ck+XNck+XNj)(sk1)j)YX

ฉันรู้ว่าเป็นเรื่องยุ่ง

นิพจน์ผลิตภัณฑ์วนซ้ำทั้งหมด แต่ค่าต่ำสุดในและคำนวณวิธีที่ค่าเหล่านั้นอาจถูกกระจายไปในลูกเต๋า สำหรับนั่นเป็นเพียงแค่แต่สำหรับเราต้องลบลูกเต๋าที่ได้ตั้งค่าไว้แล้วสำหรับและเช่นเดียวกันกับคุณต้องลบc_hi=0k1Ss0(Xci)s1c0s0sih=0i1ch

นิพจน์ผลรวมซ้ำผ่านความเป็นไปได้ทั้งหมดว่าลูกเต๋าที่ถูกโยนมีค่าเท่ากับเนื่องจากมีผลต่อการรวมกันที่เป็นไปได้ของลูกเต๋าที่ไม่หลุดที่มีเป็นค่าของมันj=0XNsksk

โดยตัวอย่างลองพิจารณา :P[43d6=(5,4,4)]

(s1,c1)=(5,1)
(s2,c2)=(4,2)

ดังนั้นการใช้สูตรด้านบน:

P[43d6=(5,4,4)]=(41)((33)30+(32)31)64=5162=0.0308641975¯

สูตรแบ่งลงเกี่ยวกับปัญหาโดเมนเมื่อและในผลรวมที่นำไปสู่ในระยะแรกของซึ่งเป็นไม่แน่นอนและความต้องการที่จะถือว่าเป็น1ในกรณีดังกล่าวเป็นผลบวกไม่จริงจำเป็นที่ทั้งหมดและสามารถละเว้นเนื่องจากทุกลูกเต๋าลดลงนอกจากนี้ยังจะมีค่าเป็น1j = 0 0 0 1 s k = 1sk=1j=0001sk=1

ตอนนี้ที่นี่ฉันต้องพึ่งพากำลังดุร้าย ปัญหาดั้งเดิมคือการคำนวณความน่าจะเป็นของผลรวมที่เป็นค่าบางส่วนและแสดงถึงลูกเต๋าแต่ละตัวที่เหลือหลังจากการวาง ซึ่งหมายความว่าคุณต้องเพิ่มความน่าจะเป็นสำหรับลำดับที่เป็นไปได้ทั้งหมด (ไม่สนใจลำดับ) ซึ่งผลรวมคือค่าที่กำหนด อาจมีสูตรในการคำนวณค่านี้ของค่าในคราวเดียว แต่ฉันยังไม่ได้ลองทาบทามS SXNdYSS

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


ในฐานะโปรแกรมเมอร์ฉันอาจเข้าใจรหัส Python ของคุณได้ง่ายขึ้น (แม้ว่าฉันจะไม่เคยใช้ Python ดังนั้นมันก็อาจจะเหมือนกัน) โพสต์รหัสที่นี่อยู่นอกหัวข้อ แต่คุณสามารถโพสต์ลิงค์ไปยัง
Github

1
คำตอบของคุณอาจจะถูกต้องและดูเหมือนว่าจะลดความซับซ้อนจากO(Y^X)ไปO((Y+X-1)!/(X!*(Y-1)!))แต่ก็ยังไม่เป็นที่มีประสิทธิภาพเป็นคำตอบ whuber O(c*X*log(X))ของ ขอบคุณสำหรับคำตอบของคุณแม้ว่า +1
SkySpiral7
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.