빠른 행렬 곱셈을위한 메모리 요구 사항


12

행렬 을 곱한다고 가정합니다 . 느린 행렬 곱셈 알고리즘에서 실행 시간 O ( N 3 ) 및 용법 O ( N 2 ) 메모리. 가장 빠른 행렬 곱셈은 시간 n ω + o ( 1 ) 에서 실행됩니다 . 여기서 ω 는 선형 대수 상수이지만 메모리 복잡성에 대해 알려진 것은 무엇입니까?n×nO(n3)O(n2)nω+o(1)ω

빠른 매트릭스 곱셈이 메모리를 소비한다는 것은 선험적으로 가능할 것으로 보인다 . O ( n 2 ) 메모리 에서 수행 될 수 있다는 보장이 있습니까? 현재 알려진 행렬 곱셈 알고리즘이 O ( n 2 ) 메모리를 사용하는 경우입니까?nωO(n2)O(n2)

(실제로 직사각형 행렬 곱셈에 관심이 있지만 정사각형의 경우와 정답이 동일하다고 가정하고 정사각형을 더 잘 연구한다고 가정합니다.)

답변:


16

공간 사용량은 모든 Strassen 유사 알고리즘에 대해 최대 입니다 (즉, 대수적으로 행렬 곱셈의 순위에 기반한 알고리즘). Coppersmith–Winograd 알고리즘의 공간 복잡성 보기O(n2)

그러나 이전 답변에서 공간 사용이 이유를 설명하지 않았다는 것을 깨달았습니다 ... 그래서 여기에 손을 넣습니다. Strassen 유사 알고리즘의 기능을 고려하십시오. 상수 c < 3에 대해 K c 곱셈을 사용하는 K x K 행렬 곱셈에 대한 고정 알고리즘에서 시작합니다 . 특히이 알고리즘 (무엇이든)은 다음과 같이 WLOG를 작성할 수 있습니다.O(n2)K×KKcc<3

  1. 그것은 계산 다른 행렬 L 1 , ... , L K의 C 제 행렬의 곱셈 항목 다양한 스칼라 및하여 K의 C의 행렬 R (1) , ... , R K의 C 번째 행렬에서 B 와 유사한 형태의KcL1,,LKcAKcR1,,RKcB

  2. 선형 조합 곱한 다음LiRi

  3. 항목 에 다양한 스칼라를 곱한 다음 A B 를 얻기 위해 이러한 모든 행렬을 항목별로 더합니다 .LiRiAB

(이것은 소위 "bilinear"알고리즘이지만 모든 "대수"행렬 곱셈 알고리즘은 이런 방식으로 작성할 수 있습니다.) 각 에 대해이 알고리즘은 현재 제품 L iR i 및 주어진 지점에서 메모리에있는 A B 의 현재 값 (처음에는 모두 0으로 설정)이므로 공간 사용량은 O ( K 2 ) 입니다.i=1,,KcLiRiABO(K2)

이 유한 알고리즘이 주어 그 다음 임의적으로 연장되는 으로 큰 매트릭스를 파괴함으로써, 매트릭스 K × K의 크기의 블록 K에서 - 1 × K의 - 1 도포 유한 K × K 알고리즘 블록 두 블록을 곱해야 할 때마다 알고리즘을 재귀 적으로 호출합니다. 각 재귀 수준 에서 메모리에 O ( K 2 ) 필드 요소 만 보관하면됩니다 ( O ( 1 ) 저장 )K×KK×KK1×K1K×KO(K2)O(1)다른 행렬). K - 1 × K - 1 행렬 곱셈 에 대한 공간 사용량 이 S ( - 1 ) 라고 가정하면, 이 재귀 알고리즘의 공간 사용량은 S ( ) S ( - 1 ) + O ( K 2 )입니다 대해 어느 S ( 1 ) = (2) K (2)K×KK1×K1S(1)S()S(1)+O(K2)S(1)=2K2행을 해결해 .S()O(K2)


nωωnωω(n2)

1
O(nω+δ)O(n2)δ>0

f(i)n2i=0,...,knω+o(1)n2+o(1)

kfkf1fkkn2+o(1)

nkknf(k(n))=no(1)k(n)nnω+o(1)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.