Tantangannya adalah menulis codegolf untuk Hafnian dari sebuah matriks . The Hafnian dari 2n
-by- 2n
matriks simetris A
didefinisikan sebagai:
Di sini S 2n mewakili set semua permutasi bilangan bulat dari 1
ke2n
, yaitu [1, 2n]
.
Tautan wikipedia berbicara tentang matriks kedekatan tetapi kode Anda harus berfungsi untuk matriks masukan simetris yang bernilai nyata.
Bagi mereka yang tertarik pada aplikasi Hafnian, tautan mathoverflow membahas lebih banyak lagi.
Namun kode Anda dapat mengambil input yang diinginkan dan memberikan output dalam format apa pun yang masuk akal, tetapi harap sertakan dalam jawaban Anda contoh yang lengkap, termasuk instruksi yang jelas tentang cara memasok input ke kode Anda.
Matriks input selalu berbentuk bujur sangkar dan paling banyak 16 x 16. Tidak perlu lagi menangani matriks kosong atau matriks dimensi ganjil.
Implementasi referensi
Berikut ini beberapa contoh kode python dari 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
Halaman wiki sekarang (2 Maret 2018) telah diperbarui oleh ShreevatsaR untuk memasukkan cara berbeda dalam menghitung Hafnian. Akan sangat menarik melihat golf ini.