문제는 매트릭스 의 영속성 을 계산할 수있는 가장 빠른 코드를 작성하는 것 입니다.
상설 n
-by- n
매트릭스 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 초 이내에 있다면 그것은 먼저 게시 된 것입니다.
언어와 라이브러리
사용 가능한 언어와 라이브러리를 사용할 수 있지만 기존 기능을 사용하여 영구 물을 계산할 수는 없습니다. 가능하다면 코드를 실행하는 것이 좋을 것이므로 가능한 경우 리눅스에서 코드를 실행 / 컴파일하는 방법에 대한 자세한 설명을 포함하십시오. '
참조 구현
작은 행렬에 대한 영속성을 계산하기 위해 다른 언어로 된 많은 코드가있는 코드 골프 질문 문제 가 이미 있습니다 . Mathematica 와 Maple 은 모두 액세스 할 수 있으면 영구적으로 구현됩니다.
내 컴퓨터 타이밍이 64 비트 컴퓨터에서 실행됩니다. 이것은 8GB RAM, AMD FX-8350 8 코어 프로세서 및 Radeon HD 4250이 포함 된 표준 우분투 설치입니다. 또한 코드를 실행할 수 있어야합니다.
내 컴퓨터에 대한 저수준 정보
cat /proc/cpuinfo/|grep flags
준다
플래그 : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpexgb rdtscp lm constant_tsc rep_good nopl nonssemps pqds pqds pqds pqds pqsd 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 bmirvssap_abps_bpsbcast tlock_bpsbcast tlock_bbpsbcast tlock_bmpsbcast tlock_bbpsbcast tlock_bbpsbcast tlock_bcast
나는 큰 Int 문제로 고통받지 않는 밀접한 관련 후속 다국어 질문을 할 것이므로 Scala , Nim , Julia , Rust , Bash를 좋아하는 사람들 도 그들의 언어를 과시 할 수 있습니다.
리더 보드
- n = 33 (45 초. n = 34의 경우 64 초). g ++ 5.4.0 을 사용하는 C ++의 Ton Hospel
- n = 32 (32 초). Ton Hospel의 gcc 플래그를 사용하는 gcc 5.4.0의 C 에서 Dennis .
- n = 31 (54 초). 기독교 승인 Sievers 에서 하스켈
- n = 31 (60 초). 프리모 에서 rpython
- n = 30 (26 초). ezrast 에서 녹
- n = 28 (49 초). XNOR 와 파이썬 +는 5.4.1을 pypy
- n = 22 (25 초). 오두막 과 파이썬 +는 5.4.1을 pypy
참고 . 실제로 Dennis와 Ton Hospel의시기는 신비한 이유로 매우 다양합니다. 예를 들어 웹 브라우저를로드 한 후에는 더 빠른 것 같습니다! 인용 된 시간은 내가 한 모든 테스트에서 가장 빠릅니다.