ความท้าทายคือการเขียน codegolf สำหรับHafnian ของเมทริกซ์ Hafnian ของเมทริกซ์2n
-by- 2n
สมมาตรA
หมายถึง:
นี่ S 2nหมายถึงชุดของพีชคณิตทั้งหมดของจำนวนเต็มจาก1
การที่เป็น2n
[1, 2n]
ลิงค์วิกิพีเดียพูดถึงการฝึกหัด adjacency แต่รหัสของคุณควรใช้กับเมทริกซ์อินพุตสมมาตรที่มีมูลค่าจริง ๆ
สำหรับผู้ที่สนใจในแอปพลิเคชันของHafnianลิงก์mathoverflow จะกล่าวถึงเพิ่มเติม
รหัสของคุณสามารถป้อนข้อมูลได้ตามต้องการและให้ผลลัพธ์ในรูปแบบที่สมเหตุสมผล แต่โปรดรวมคำตอบของคุณไว้ในตัวอย่างการทำงานเต็มรูปแบบรวมถึงคำแนะนำที่ชัดเจนเกี่ยวกับวิธีการป้อนรหัสของคุณ
อินพุตเมทริกซ์เป็นรูปสี่เหลี่ยมจัตุรัสเสมอและจะมีค่าสูงสุด 16 คูณ 16 ไม่จำเป็นต้องจัดการเมทริกซ์ว่างเปล่าหรือเมทริกซ์ของมิติคี่
การดำเนินการอ้างอิง
นี่คือตัวอย่างโค้ดไพ ธ อนจาก Mr. Xcoder
from itertools import permutations
from math import factorial
def hafnian(matrix):
my_sum = 0
n = len(matrix) // 2
for sigma in permutations(range(n*2)):
prod = 1
for j in range(n):
prod *= matrix[sigma[2*j]][sigma[2*j+1]]
my_sum += prod
return my_sum / (factorial(n) * 2 ** n)
print(hafnian([[0, 4.5], [4.5, 0]]))
4.5
print(hafnian([[0, 4.7, 4.6, 4.5], [4.7, 0, 2.1, 0.4], [4.6, 2.1, 0, 1.2], [4.5, 0.4, 1.2, 0]])
16.93
print(hafnian([[1.3, 4.1, 1.2, 0.0, 0.9, 4.4], [4.1, 4.2, 2.7, 1.2, 0.4, 1.7], [1.2, 2.7, 4.9, 4.7, 4.0, 3.7], [0.0, 1.2, 4.7, 2.2, 3.3, 1.8], [0.9, 0.4, 4.0, 3.3, 0.5, 4.4], [4.4, 1.7, 3.7, 1.8, 4.4, 3.2]])
262.458
หน้า wiki ได้รับการอัปเดตโดย ShreevatsaR ในวันนี้ (2 มีนาคม 2018) เพื่อรวมวิธีอื่นในการคำนวณ Hafnian มันน่าสนใจมากที่ได้เห็นนักกอล์ฟคนนี้