एक मैट्रिक्स के हाफ़ियन के लिए कोडगुल्फ़ लिखना चुनौती है । एक की Hafnian 2n
-by- 2n
सममित मैट्रिक्स A
के रूप में परिभाषित किया गया है:
यहाँ S 2n पूर्णांक के सभी क्रमपरिवर्तन के सेट को दर्शाता 1
है 2n
, जो कि है [1, 2n]
।
विकिपीडिया लिंक आसन्न मैट्रिसेस के बारे में बात करता है, लेकिन आपके कोड को किसी भी वास्तविक मूल्यवान सममित इनपुट मैट्रिस के लिए काम करना चाहिए।
हाफियन के अनुप्रयोगों में रुचि रखने वालों के लिए, मैथवेटफ्लो लिंक कुछ और चर्चा करता है।
आपका कोड इनपुट ले सकता है, लेकिन यह इच्छानुसार और किसी भी समझदार प्रारूप में आउटपुट देता है, लेकिन कृपया अपने उत्तर में एक पूर्ण काम किए गए उदाहरण को शामिल करें जिसमें आपके कोड को इनपुट की आपूर्ति करने के लिए स्पष्ट निर्देश शामिल हैं।
इनपुट मैट्रिक्स हमेशा वर्गाकार होता है और 16 से अधिकतम 16 पर होगा। विषम मैट्रिक्स के खाली मैट्रिक्स या मैट्रिक्स को संभालने में सक्षम होने की आवश्यकता नहीं है।
संदर्भ कार्यान्वयन
यहाँ श्री 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
विकी पेज को अब (2 मार्च 2018) को श्रीवत्सर द्वारा अपडेट किया गया है ताकि हाफियन की गणना का एक अलग तरीका शामिल किया जा सके। इस गोल्फ को देखना काफी दिलचस्प होगा।