1 / 19

행렬은 수를 원소로 지니는 다차원 배열이다 . m  n (“ m by n ”) 행렬은 m 개의 행과 n 개의 열을 갖는다 .

행렬의 개요. 행렬은 수를 원소로 지니는 다차원 배열이다 . m  n (“ m by n ”) 행렬은 m 개의 행과 n 개의 열을 갖는다 . 행과 열의 개수가 같은 n x n 행렬을 정방행렬 이라 한다 . 두 행렬이 같은 수의 행과 열을 가지며 각 위치의 해당 원소의 값이 같으면 “ 두 행렬은 같다 ”고 정의한다. 행렬의 곱. 행렬의 곱 :. 행렬곱셈 – 단순 알고리즘 (1/3). 문제 : n  n 크기의 행렬의 곱을 구하시오 .

chesna
Download Presentation

행렬은 수를 원소로 지니는 다차원 배열이다 . m  n (“ m by n ”) 행렬은 m 개의 행과 n 개의 열을 갖는다 .

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 행렬의개요 • 행렬은 수를원소로 지니는 다차원 배열이다. • mn (“m by n”) 행렬은 m개의 행과 n개의 열을 갖는다. • 행과 열의 개수가 같은 nxn행렬을 정방행렬이라 한다. • 두 행렬이 같은 수의 행과 열을 가지며 각 위치의 해당 원소의 값이 같으면 “두 행렬은 같다”고 정의한다.

  2. 행렬의곱 • 행렬의 곱:

  3. 행렬곱셈 – 단순 알고리즘 (1/3) • 문제: n n크기의 행렬의 곱을 구하시오. • 입력: 양수 n, n  n크기의 행렬 A와 B • 출력: 행렬 A와 B의 곱인 C • 알고리즘: void matrixmul (int n, number[][] A, number[][] B, number[][] C){ index i, j, k; for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) { C[i][j] = 0; for (k = 1; k <= n; k++) C[i][j]=C[i][j] + A[i][k]*B[k][j]; } }

  4. 행렬곱셈 – 단순 알고리즘 (2/3) 곱셈 연산의 시간복잡도 분석 - I • 단위연산: 가장 안쪽의 루프에 있는 곱셈 연산 • 입력크기: 행과 열의 수, n • 모든 경우 시간복잡도 분석: 총 곱셈의 횟수는 다음과 같다.

  5. 행렬곱셈 – 단순 알고리즘 (3/3) 곱셈 연산의 시간복잡도 분석 – II (P. 86 연습문제 25번) • 단위연산: 가장 안쪽의 루프에 있는 덧셈(뺄셈) 연산 • 입력크기: 행과 열의 수, n • 모든 경우 시간복잡도 분석: 아래와 같이 약간만 알고리즘을 변경하면 총 덧셈의 횟수는 다음과 같다. … for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) { C[i][j] = A[i][1]*B[1][j]; for (k = 2; k <= n; k++) C[i][j]=C[i][j]+A[i][k]*B[k][j]; } }

  6. 쉬트라쎈(Strassen) 방법 – 2x2 행렬 (1/2) • 문제: 두 2  2 행렬 A와 B의 곱(product) C, • 쉬트라쎈(Strassen)의 해: Why? 앉아서 꼼꼼히 따져보세요.

  7. 쉬트라쎈(Strassen) 방법 – 2x2 행렬 (2/2) • 시간복잡도 분석: • 단순 곱셈 방법: 8번의 곱셈과 4번의 덧셈이 필요함 • 쉬트라쎈 방법: 7번의 곱셈과 18번의 덧셈/뺄셈이 필요함 •  언뜻 봐서는 전혀 좋아지지 않았다! •  그러나 행렬의 크기가 커지면 쉬트라쎈의 방법의 가치가 드러난다.

  8. 쉬트라쎈(Strassen) 방법 – nxn 행렬 (1/3) • 문제: n이 2의 거듭제곱이고, 각 행렬을 4개의 부분행렬(submatrix)로 나눈다고 가정하자. 두 n n행렬 A와 B의 곱 C: • 쉬트라센의 해

  9. 쉬트라쎈(Strassen) 방법 – nxn 행렬 (2/3) • 예 (수행과정의 일부 – M1구하기)

  10. 쉬트라쎈(Strassen) 방법 – nxn 행렬 (3/3) • 문제: n이 2의 거듭제곱일 때, n n크기의 두 행렬의 곱을 구하시오. • 입력: 정수 n, n n크기의 행렬 A와 B • 출력: 행렬 A와 B의 곱인 C • 알고리즘: nxn_matrix strassen(int n, nxn matrix A, nxn matrix B){ if (n <= threshold) 단순한 알고리즘을 사용하여 C = A * B를 계산; else { A를 4개의 부분행렬 A11, A12, A21, A22로 분할; B를 4개의 부분행렬 B11, B12, B21, B22로 분할; 쉬트라쎈의 방법을 사용하여 C = A * B를 계산; // C 계산시에 다음과 같은 재귀 호출 사용: // M1=strassen(n/2, A11+A22, B11+B22) // M2=… } returnC; } • Threshold? 쉬트라쎈 알고리즘보다 단순 알고리즘이 더 좋을 것이라 예상되는 지점

  11. 쉬트라쎈(Strassen) 방법의 분석 (1/7) 곱셈 연산에 대한 시간복잡도 분석 • 단위연산: 곱셈하는 연산 • 입력크기: 행과 열의 수, n • 1×1 행렬이 될 때까지 계속 분할한다고 가정. • threshold를 1이라고 가정 • 두 개의 1×1 행렬의 곱은 그 비용이 1이다. • [모든 경우 시간복잡도] 분석 • 점화식을 다음과 같이 구할 수 있다. • Why? 하나의 nxn곱셈이 일곱 개의 (n/2)x(n/2) 곱셈으로 바뀌었기 때문

  12. 쉬트라쎈(Strassen) 방법의 분석 (2/7) 곱셈 연산에 대한 시간복잡도 분석 (계속) • n=2k에 대해서 앞에서 구한 점화식을 전개하면 다음과 같다. • 상기 결과는 귀납법에 의해서 증명이 가능하다. (Skip!) • 또한, 상기 점화식은 Master Theorem 1번을 이용하면 간단히 해를 구할 수 있다. (See the next page)

  13. 쉬트라쎈(Strassen) 방법의 분석 (3/7) 곱셈 연산에 대한 시간복잡도 분석 (계속) • n=2k에 대해서 앞에서 구한 점화식의해를 Master Theorem 을 이용하여 구하기 f(n) = af(n/b) + cnd a=7, b=2, c=0, d=0

  14. 쉬트라쎈(Strassen) 방법의 분석 (4/7) 덧셈/뺄셈연산에대한 시간복잡도 분석 • 단위연산: 덧셈/뺄셈하는 연산 • 입력크기: 행과 열의 수, n • 모든 경우 시간복잡도 분석: 앞서와 마찬가지로 threshold를 1이라 한다. • 점화식을 다음과 같이 구할 수 있다. nxn곱셈이 일곱 개의 (n/2)x(n/2) 곱셈으로 바뀌었고, 18번의 (n/2)x(n/2) 행렬 덧셈/뺄셈이 필요한데, 각각은 (n/2)2번의 덧셈/뺄셈을 필요로 하기 때문 • Why?

  15. 쉬트라쎈(Strassen) 방법의 분석 (5/7) • 덧셈/뺄셈연산에대한 시간복잡도 분석 (계속) • 점화식은 다음과 같다. • 부록 B의 예제 B.20을 이용하면 다음과 같이 점화식의 해가 구해진다. • Master Theorem을 사용하면 상기 점화식의 해는 다음과 같이 구할 수 있다. f(n) = af(n/b) + cnd a=7, b=2, c=9/2, d=2

  16. 쉬트라쎈(Strassen) 방법의 분석 (6/7) 표 2.3 nxn행렬을곱하는 두 알고리즘의 비교 (p. 70)

  17. 쉬트라쎈(Strassen) 방법의 분석 (7/7) • Strassen은 행렬 곱셈의 복잡도를 에서 으로 낮추었다. • Shmuel Winograd는 덧셈과 뺄셈을 15회만 수행하면 되는 쉬트라센 알고리즘의 변형을 개발 • 이후에 Coppersmith와 Winograd는 곱셈의 복잡도를 까지 낮춘 알고리즘을 개발하였다. • 그렇다면, 과연 얼마까지 복잡도를 낮출 수 있을까? • 두 행렬을 곱하기 위한 문제에 대해서 시간복잡도가 이 되는 알고리즘을 만들어 낸 사람은 아무도 없다. • 게다가 그러한 알고리즘을 만들 수 없다고 증명한 사람도 아무도 없다.

  18. Skip… • Chapter 2.6 • Chapter 2.7

  19. 분할정복을 사용하지 말아야 하는 경우

More Related