ความท้าทายนี้คือการเขียนโค้ดที่รวดเร็วซึ่งสามารถทำการหาผลรวมอนันต์ที่ยากต่อการคำนวณ
อินพุต
nโดยnเมทริกซ์Pที่มีรายการจำนวนเต็มที่มีขนาดเล็กกว่า100ในค่าสัมบูรณ์ เมื่อทดสอบฉันยินดีที่จะให้ข้อมูลกับโค้ดของคุณในรูปแบบที่สมเหตุสมผลและโค้ดของคุณต้องการ ค่าเริ่มต้นจะเป็นหนึ่งบรรทัดต่อแถวของเมทริกซ์ซึ่งมีการเว้นวรรคและให้ไว้ในอินพุตมาตรฐาน
Pจะเป็นบวกแน่นอนซึ่งหมายความว่ามันจะสมมาตรเสมอ นอกเหนือจากนั้นคุณไม่จำเป็นต้องรู้ว่าหมายถึงอะไรที่ชัดเจนในเชิงบวกที่จะตอบความท้าทาย อย่างไรก็ตามมันหมายความว่าจะมีคำตอบสำหรับผลรวมที่กำหนดไว้ด้านล่าง
อย่างไรก็ตามคุณจำเป็นต้องรู้ว่าผลิตภัณฑ์matrix-vectorคืออะไร
เอาท์พุต
รหัสของคุณควรคำนวณผลรวมอนันต์:
ภายในบวกหรือลบ 0.0001 ของคำตอบที่ถูกต้อง นี่Zคือชุดของจำนวนเต็มและZ^nเป็นเวกเตอร์ที่เป็นไปได้ทั้งหมดที่มีnองค์ประกอบจำนวนเต็มและeเป็นค่าคงที่ทางคณิตศาสตร์ที่มีชื่อเสียงที่มีค่าประมาณ 2.71828 โปรดทราบว่าค่าในเลขชี้กำลังเป็นเพียงตัวเลข ดูตัวอย่างด้านล่างอย่างชัดเจน
สิ่งนี้เกี่ยวข้องกับฟังก์ชัน Riemann Theta อย่างไร
ในสัญกรณ์ของการวิจัยนี้ในที่ใกล้เคียงกับฟังก์ชั่น Riemann ที เรากำลังพยายามที่จะคำนวณ ปัญหาของเราเป็นกรณีพิเศษด้วยเหตุผลอย่างน้อยสองประการ
เรากำลังพยายามที่จะคำนวณ ปัญหาของเราเป็นกรณีพิเศษด้วยเหตุผลอย่างน้อยสองประการ
- เราตั้งค่าพารามิเตอร์เริ่มต้นที่เรียกว่าzในกระดาษที่เชื่อมโยงเป็น 0
- เราสร้างเมทริกซ์Pในลักษณะดังกล่าวที่มีขนาดเล็กที่สุดของ eigenvalue1คือ (ดูด้านล่างสำหรับวิธีสร้างเมทริกซ์)
ตัวอย่าง
P = [[ 5.,  2.,  0.,  0.],
     [ 2.,  5.,  2., -2.],
     [ 0.,  2.,  5.,  0.],
     [ 0., -2.,  0.,  5.]]
Output: 1.07551411208
รายละเอียดเพิ่มเติมให้เราเห็นเพียงหนึ่งคำในผลรวมของ P นี้ใช้ตัวอย่างเพียงหนึ่งคำในผลรวม:
x^T P x = 30และ  ขอให้สังเกตว่าe^(-30)เป็นเรื่องเกี่ยวกับ10^(-14)และดังนั้นจึงไม่น่าจะมีความสำคัญสำหรับการได้รับคำตอบที่ถูกต้องถึงความอดทน จำได้ว่าผลรวมไม่สิ้นสุดจะใช้เวกเตอร์ที่มีความยาว 4 ที่เป็นไปได้ทั้งหมดโดยที่องค์ประกอบนั้นเป็นจำนวนเต็ม ฉันเพิ่งเลือกหนึ่งตัวอย่างที่ชัดเจน
P = [[ 5.,  2.,  2.,  2.],
     [ 2.,  5.,  4.,  4.],
     [ 2.,  4.,  5.,  4.],
     [ 2.,  4.,  4.,  5.]]
Output = 1.91841190706
P = [[ 6., -3.,  3., -3.,  3.],
     [-3.,  6., -5.,  5., -5.],
     [ 3., -5.,  6., -5.,  5.],
     [-3.,  5., -5.,  6., -5.],
     [ 3., -5.,  5., -5.,  6.]]
Output = 2.87091065342
P = [[6., -1., -3., 1., 3., -1., -3., 1., 3.],
     [-1., 6., -1., -5., 1., 5., -1., -5., 1.],
     [-3., -1., 6., 1., -5., -1., 5., 1., -5.],
     [1., -5., 1., 6., -1., -5., 1., 5., -1.],
     [3., 1., -5., -1., 6., 1., -5., -1., 5.],
     [-1., 5., -1., -5., 1., 6., -1., -5., 1.],
     [-3., -1., 5., 1., -5., -1., 6., 1., -5.],
     [1., -5., 1., 5., -1., -5., 1., 6., -1.],
     [3., 1., -5., -1., 5., 1., -5., -1., 6.]]
Output: 8.1443647932
P = [[ 7.,  2.,  0.,  0.,  6.,  2.,  0.,  0.,  6.],
     [ 2.,  7.,  0.,  0.,  2.,  6.,  0.,  0.,  2.],
     [ 0.,  0.,  7., -2.,  0.,  0.,  6., -2.,  0.],
     [ 0.,  0., -2.,  7.,  0.,  0., -2.,  6.,  0.],
     [ 6.,  2.,  0.,  0.,  7.,  2.,  0.,  0.,  6.],
     [ 2.,  6.,  0.,  0.,  2.,  7.,  0.,  0.,  2.],
     [ 0.,  0.,  6., -2.,  0.,  0.,  7., -2.,  0.],
     [ 0.,  0., -2.,  6.,  0.,  0., -2.,  7.,  0.],
     [ 6.,  2.,  0.,  0.,  6.,  2.,  0.,  0.,  7.]]
Output = 3.80639191181
คะแนน
ฉันจะทดสอบโค้ดของคุณในเมทริกซ์ P ที่เลือกแบบสุ่มซึ่งมีขนาดเพิ่มขึ้น
คะแนนของคุณเป็นคะแนนที่ใหญ่ที่สุดnที่ฉันได้รับคำตอบที่ถูกต้องในเวลาน้อยกว่า 30 วินาทีเมื่อเฉลี่ยมากกว่า 5 ครั้งด้วยการสุ่มเลือกPขนาดนั้น
แล้วเนคไทล่ะ?
หากมีการเสมอกันผู้ชนะจะเป็นผู้ที่มีรหัสรันเร็วที่สุดโดยเฉลี่ยมากกว่า 5 ครั้ง ในกรณีที่เวลาเท่ากันผู้ชนะคือคำตอบแรก
จะมีการสร้างอินพุตแบบสุ่มอย่างไร
- Let M เป็นเมตรโดยการสุ่มด้วย n เมทริกซ์กับม <= n และรายการซึ่งเป็น -1 หรือ 1 M = np.random.choice([0,1], size = (m,n))*2-1ในหลาม ในทางปฏิบัติเราจะตั้งจะเกี่ยวกับmn/2
- ให้ P เป็นเมทริกซ์เอกลักษณ์ + M ^ T P =np.identity(n)+np.dot(M.T,M)เมตรในหลาม ตอนนี้เรารับประกันว่าPจะเป็นบวกแน่นอนและรายการอยู่ในช่วงที่เหมาะสม
โปรดทราบว่านี่หมายความว่าค่าลักษณะเฉพาะทั้งหมดของ P มีค่าอย่างน้อย 1 ทำให้เกิดปัญหาได้ง่ายกว่าปัญหาทั่วไปของการประมาณฟังก์ชัน Riemann Theta
ภาษาและห้องสมุด
คุณสามารถใช้ภาษาหรือไลบรารีที่คุณต้องการ อย่างไรก็ตามเพื่อวัตถุประสงค์ในการให้คะแนนฉันจะเรียกใช้รหัสของคุณบนเครื่องของฉันดังนั้นโปรดให้คำแนะนำที่ชัดเจนเกี่ยวกับวิธีการเรียกใช้บน Ubuntu
My Machineเวลาของฉันจะทำงานบนเครื่องของฉัน นี่คือการติดตั้ง Ubuntu แบบมาตรฐานบนโปรเซสเซอร์ AMD FX-8350 Eight-Core 8GB นี่ก็หมายความว่าฉันต้องสามารถเรียกใช้รหัสของคุณได้
คำตอบชั้นนำ
- n = 47ในC ++โดย Ton Hospel
- n = 8ในPythonโดย Maltysen
xจาก[-1,0,2,1]อะไร คุณสามารถทำอย่างละเอียดเกี่ยวกับเรื่องนี้? (คำแนะนำ: ฉันไม่ใช่กูรูคณิตศาสตร์)
                
