Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 Strassen의 행렬 방정식을 기억하는 쉬운 방법

<시간/>

나누고 정복 을 기반으로 하는 행렬 곱셈 알고리즘입니다. 방법. 같은 크기의 두 행렬을 곱하는 데 사용됩니다.

두 행렬의 곱셈 구하기-

C++에서 Strassen의 행렬 방정식을 기억하는 쉬운 방법

스트라센의 알고리즘 곱셈을 단순화하여 곱셈에 대한 오버헤드를 줄입니다.

다음은 strassen 알고리즘 을 사용한 곱셈입니다.

C++에서 Strassen의 행렬 방정식을 기억하는 쉬운 방법

M1 =a*(f - h)
M2 =(a + b)*h
M3 =(c + d)*e
M4 =d*(g - e)
M5 =(a + d)*(e + h)
M6 =(b - d)*(g + h)
M7 =(a - c)*(e + f)

이것은 쉽게 기억할 수 있고 알고리즘 코드를 디코딩할 수 있습니다. 이를 위해 몇 가지 규칙이 있습니다. 먼저 다음 6가지를 기억하십시오-

  • AHED 사용 M의 처음 4개 값에 대해.
  • 대각선 곱셈 사용 M의 5번째 값에 대해.
  • M의 6번째 값에 대해 마지막 CR(매트 1의 마지막 열 및 매트 2의 마지막 행)을 사용합니다.
  • M의 7번째 값에 대해 첫 번째 CR(매트 1의 첫 번째 열 및 매트 2의 첫 번째 행)을 사용합니다.
  • 행의 요소를 고려하면서 추가하고 열의 경우 뺍니다.
  • 인접한 값을 사용하여 이후에 값을 업데이트합니다.

이러한 방법을 사용하면 값을 쉽게 기억할 수 있습니다.