n
-by- n
Matrix A
=(a
i,j
)的永久变量定义为
在此S_n
表示的所有排列的集合[1, n]
。
作为一个例子(来自维基):
在这个问题中,矩阵都是正方形的,只有值-1
和1
在其中。
例子
输入:
[[ 1 -1 -1 1]
[-1 -1 -1 1]
[-1 1 -1 1]
[ 1 -1 -1 1]]
常驻:
-4
输入:
[[-1 -1 -1 -1]
[-1 1 -1 -1]
[ 1 -1 -1 -1]
[ 1 -1 1 -1]]
常驻:
0
输入:
[[ 1 -1 1 -1 -1 -1 -1 -1]
[-1 -1 1 1 -1 1 1 -1]
[ 1 -1 -1 -1 -1 1 1 1]
[-1 -1 -1 1 -1 1 1 1]
[ 1 -1 -1 1 1 1 1 -1]
[-1 1 -1 1 -1 1 1 -1]
[ 1 -1 1 -1 1 -1 1 -1]
[-1 -1 1 -1 1 1 1 1]]
常驻:
192
输入:
[[1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1],
[1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1],
[-1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1],
[-1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1],
[-1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1],
[1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1],
[1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1],
[1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1],
[1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1],
[-1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1],
[-1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1],
[1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1],
[-1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1],
[1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1],
[1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1],
[1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1],
[-1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1],
[1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1],
[1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1],
[-1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1]]
常驻:
1021509632
任务
您应该编写代码,给定一个n
by n
矩阵,并输出其永久性代码。
由于我将需要测试您的代码,因此,如果您能为我提供一种简单的方法将矩阵作为代码的输入,这将很有帮助,例如通过读取标准输入。
请注意,永久性可能很大(全1矩阵是极端情况)。
得分和联系
我将在大小增加的随机+ -1矩阵上测试您的代码,并在您的代码第一次在我的计算机上花费超过1分钟时停止。所有提交的评分矩阵都将保持一致,以确保公平。
如果两个人获得相同的分数,那么胜者就是那个值最快的人n
。如果它们彼此相距1秒以内,则它是第一个发布的。
语言和图书馆
您可以使用任何喜欢的可用语言和库,但不能使用预先存在的函数来计算永久性对象。在可行的情况下,能够运行您的代码将是一个很好的选择,因此,请尽可能提供有关如何在Linux中运行/编译代码的完整说明。
参考实施
已经存在一个带有许多不同语言代码的代码高尔夫问题,用于计算小型矩阵的永久性。如果您可以访问Mathematica和Maple,它们也都具有永久实现。
我的机器计时将在我的64位机器上运行。这是带有8GB RAM,AMD FX-8350八核处理器和Radeon HD 4250的标准ubuntu安装。这也意味着我需要能够运行您的代码。
有关我的机器的低级信息
cat /proc/cpuinfo/|grep flags
给
国旗:FPU VME德PSE TSC MSR,PAE MCE CX8 APIC月MTRR PGE MCA CMOV拍拍PSE36 CLFLUSH MMX FXSR SSE SSE2 HT系统调用NX mmxext fxsr_opt pdpe1gb rdtscp流明constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf PNI pclmulqdq监控SSSE3 FMA CX16 sse4_1 sse4_2 POPCNT AES XSAVE AVX F16C lahf_lm cmp_legacy SVM extapic cr8_legacy ABM SSE4A misalignsse 3dnowprefetch osvw IBS XOP SKINIT WDT LWP FMA4 TCE nodeid_msr TBM topoext perfctr_core perfctr_nb CPB hw_pstate vmmcall BMI1 ARAT NPT lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold
我会问一个紧密相关的后续多语言问题,该问题不会遇到较大的Int问题,因此Scala,Nim,Julia,Rust,Bash的爱好者也可以炫耀自己的语言。
排行榜
- n = 33(45秒。n= 34为64秒)。吨Hospel在C ++使用g ++ 5.4.0。
- n = 32(32秒)。丹尼斯在C中使用Ton Hospel的gcc标志使用gcc 5.4.0。
- n = 31(54秒)。基督教西弗斯在哈斯克尔
- n = 31(60秒)。普里莫在rpython
- n = 30(26秒)。ezrast在拉斯特
- n = 28(49秒)。使用Python + pypy 5.4.1的xnor
- n = 22(25秒)。Shebang使用Python + pypy 5.4.1
注意。在实践中,出于神秘的原因,丹尼斯(Dennis)和唐·霍斯珀尔(Ton Hospel)的演出时间相差很大。例如,在我加载Web浏览器后,它们似乎更快!引用的时间是我完成的所有测试中最快的。