(이것은 의견이 너무 길어지고 있습니다 ...)
실제로 알고리즘에서 역을 계산해야한다고 가정합니다. (1) 먼저, 이러한 대안 알고리즘을 실제로 주장하지 않는 것이 중요합니다 빨리 더 나은 점근 적 복잡성 (더 느리게 기초 작업의 필요한 수의 성장을 의미)가 단지. 실제로, 실제로 는 다음과 같은 이유로 표준 접근법 (주어진 n ) 보다 실제로 (훨씬) 느립니다 .엔
표기법 수피의 힘 앞의 정수 N 천문학적 클 수있다 - 그렇게 큰 것을 C는 (1) N (3) 보다 훨씬 작을 수있다 C 2 N 2 X 임의 대 N 의 모든 컴퓨터에 의해 처리 될 수있다 가까운 미래에. (예를 들어, Coppersmith–Winograd 알고리즘의 경우입니다.)영형엔씨1엔삼씨2엔2. x엔
복잡성은 모든 (산술) 연산에 동일한 시간이 걸린다고 가정하지만 실제 실제와는 거리가 멀다. 동일한 숫자를 여러 번 곱하는 것이 같은 양의 다른 숫자를 곱하는 것보다 훨씬 빠릅니다 . 이는 현재 컴퓨팅의 주요 병목 현상이 해당 데이터에 대한 실제 산술 연산이 아니라 데이터를 캐시로 가져오고 있기 때문입니다. 따라서 첫 번째 상황 ( 캐시 인식 이라고 함)을 갖도록 재배치 할 수있는 알고리즘 은 이것이 불가능한 알고리즘 보다 훨씬 빠릅니다. (예를 들어 Strassen 알고리즘의 경우입니다.)
또한 수치 적 안정성은 최소한 성능만큼 중요합니다. 그리고 여기서도 표준 접근법이 일반적으로 이깁니다.
O ( n삼)O ( n2. x)
(1) 나는 이것이 매우 드물게 정말 필요가 없다는 것을 지적하지 않은 경우 그러나 나는 나쁘게 것 : 언제 당신이 제품 계산할 필요가
- 1 개 (B)를 , 대신 선형 시스템 해결해야
을 X = B (예를 들어, 사용 ) 사용은
X 대신 -이 더욱 안정적이고, (행렬의 구조에 따라 수행 될 수 )
훨씬 신속. 당신이 사용해야하는 경우
- (1) 여러 번, 당신의 인수 분해 미리 계산 할 수 나중에 재사용 (일반적으로 가장 비싼 해결의 일부입니다).
ㅏ− 1비A x = bnumpy.linalg.solve
엑스ㅏㅏ− 1ㅏ