ความท้าทายนี้คือการเขียนโค้ดที่รวดเร็วซึ่งสามารถทำการหาผลรวมอนันต์ที่ยากต่อการคำนวณ
อินพุต
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
ในหลาม ในทางปฏิบัติเราจะตั้งจะเกี่ยวกับm
n/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 Hospeln = 8
ในPythonโดย Maltysen
x
จาก[-1,0,2,1]
อะไร คุณสามารถทำอย่างละเอียดเกี่ยวกับเรื่องนี้? (คำแนะนำ: ฉันไม่ใช่กูรูคณิตศาสตร์)