퍼머넌트(라이저 공식) 계산기
행렬의 퍼머넌트를 라이저 포함–배제 공식으로 O(2ⁿ·n)에 구하고 행렬식과 나란히 보여 줍니다. 부호 하나만 다른데 왜 가우스 소거가 퍼머넌트에는 통하지 않는지를 행 연산으로 직접 확인할 수 있습니다.
한 줄이 한 행입니다. 정수만 받고 18×18까지 다룹니다
퍼머넌트
10
같은 행렬의 행렬식은 -2입니다. 정의는 순열의 부호 하나만 다른데, 행렬식은 O(n³)이고 퍼머넌트는 #P-완전입니다.
행 연산을 해 봅니다
1 2 0 -2
행렬식이 그대로인 것이 가우스 소거가 통하는 이유입니다. 위삼각으로 만들어 대각선만 곱하면 되니까요. 퍼머넌트는 이 성질이 없어서 같은 수법을 쓸 수 없습니다.
계산 방법
- 1정사각 행렬을 한 줄에 한 행씩 넣습니다. 정수만 받습니다.
- 2퍼머넌트와 행렬식이 함께 나옵니다 — 정의는 부호 하나만 다릅니다.
- 38×8 이하면 순열을 모두 훑은 값도 나란히 나와 검산이 됩니다.
- 4행 연산 단추를 눌러 «한 행에 다른 행의 배수를 더해» 봅니다.
- 5행렬식은 그대로인데 퍼머넌트가 바뀌는 것을 확인합니다 — 가우스 소거를 못 쓰는 이유입니다.
자주 묻는 질문
순열의 부호 sgn(σ)가 있느냐 없느냐뿐입니다. det는 Σ sgn(σ)·∏a[i][σ(i)]이고 perm은 부호를 뺀 Σ ∏a[i][σ(i)]입니다. 그런데 계산 난이도는 하늘과 땅 차이라, 행렬식은 가우스 소거로 O(n³)에 끝나고 퍼머넌트는 #P-완전입니다 — NP 문제를 모두 푸는 것보다도 어렵다고 여겨집니다.
행 연산이 값을 보존하지 않기 때문입니다. 행렬식은 «한 행에 다른 행의 상수배를 더해도 값이 그대로»라는 성질 덕분에 위삼각으로 만들어 대각선만 곱하면 되는데, 퍼머넌트에는 부호가 없어 상쇄가 일어나지 않고 그 성질이 성립하지 않습니다. 이 계산기에서 직접 행 연산을 해 보시면 행렬식은 그대로인데 퍼머넌트만 바뀌는 것이 보입니다.
순열을 모두 훑는 O(n!·n)을 O(2ⁿ·n)으로 줄입니다. n = 20이면 20! ≈ 2.4×10¹⁸과 2²⁰ ≈ 10⁶의 차이라 실용적으로 큽니다. 포함–배제로 «각 행이 고른 열의 집합»을 뒤집어 세는 것이고, 그레이 코드로 부분집합을 훑으면 한 칸 옮길 때 열 하나만 더하고 빼면 되어 안쪽 합을 다시 구하지 않아도 됩니다. 그래도 지수시간인 것은 그대로입니다.
이분 그래프의 완전매칭 개수입니다. a[i][j]를 «i번 사람이 j번 일을 맡을 수 있는가»로 읽으면 퍼머넌트가 사람과 일을 하나씩 짝지어 주는 방법의 수가 됩니다. 매칭이 «있는가»는 호프크로프트–카프로 다항시간에 풀리는데 «몇 개인가»는 #P-완전이라는 대비가 이 문제의 성격을 잘 보여 줍니다.
전부 1인 n×n 행렬의 퍼머넌트가 정확히 n!입니다. 모든 순열이 1을 주기 때문입니다. 반대로 같은 행렬의 행렬식은 0입니다. 대각선만 0이고 나머지가 1인 행렬은 퍼머넌트가 준계승 !n(교란순열의 개수)이 됩니다 — 4×4면 9, 5×5면 44입니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서만 이뤄지고, 입력값은 이 기기의 저장소에만 남습니다.
알아두면 좋은 점
- 18×18까지 다룹니다. 2¹⁸ = 26만 번의 부분집합을 훑기 때문이며, 그 위로는 브라우저에서 버겁습니다.
- BigInt로 계산하므로 값이 아무리 커도 정확합니다.
- 정수만 받습니다. 실수 성분의 퍼머넌트도 같은 식으로 구할 수 있지만 반올림 오차가 쌓입니다.
- 무작위 행렬 1100건에서 순열을 모두 훑은 값과 대조했고, 0/1 행렬에서는 완전매칭을 직접 세어 본 값과도 맞췄습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.