제2장 배열과구조.

Slides:



Advertisements
Similar presentations
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Advertisements

제 2 장 : 배열과 구조 이 형 원 강릉대학교 컴퓨터공학과
배열과 ADT(1/2) 연속된 메모리 위치의 집합 <index, value>쌍의 집합
Chapter 2 배열과 구조 (Arrays and Structures)
4장 배열과 함수 한빛미디어(주).
컴퓨터 개론 및 실습 강의 9.
이산수학(Discrete Mathematics)
YACC 응용 예 Desktop Calculator.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
희소 행렬(sparse matrix) mn matrix A ≡ A[MAX_ROWS][MAX_COLS] 희소행렬
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
제2장 배열과구조.
4.3 난괴법 (Randomized Block Design)
3 순차 자료구조와 선형 리스트.
5 순차 자료구조 방식.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
배열과 ADT(1/2) 연속된 메모리 위치의 집합 <index, value>쌍의 집합
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
자료 구조: Chapter 3 배열(1) 순천향대학교 컴퓨터공학과 하 상 호.
자료 구조: Chapter 3 배열(1) 순천향대학교 컴퓨터공학과 하 상 호.
7장 배열 ②.
역행렬 구하는 프로그램 C와 Fortran 환경공학과 천대 길.
HW#2 #1과 동일한 방법으로 argc와 argv를 사용함
누구나 즐기는 C언어 콘서트 제8장 배열.
5장. 참조 타입.
제3장 스택과 큐.
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Chapter 2:: Array, Structure, and Pointer
포인터 활용 포인터 활용.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
제8장 배열 1부 8.1 배열 8.2 배열의 초기화 8.3 배열의 응용 8.4 정렬과 탐색 8.5 다차원 배열.
Numerical Methods for Material Scientists
Tail-recursive Function, High-order Function
프로그래밍 랩 – 7주 리스트.
자료구조 구현을 위한 C 프로그래밍 기법, 순차 자 료구조
행렬 기본 개념 행렬의 연산 여러가지 행렬 행렬식 역행렬 연립 일차 방정식 부울행렬.
11장. 1차원 배열.
Introduction To Data Structures Using C
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 8 장 배열, 주소, 포인터.
프로그래밍 개요
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
제 3 강.
행렬의 개요 행렬은 수를 원소로 지니는 다차원 배열이다. mn (“m by n”) 행렬은 m개의 행과 n개의 열을 갖는다.
행렬의 개요 행렬은 수를 원소로 지니는 다차원 배열이다. mn (“m by n”) 행렬은 m개의 행과 n개의 열을 갖는다.
8주차: Strings, Arrays and Pointers
Fitting / Matrix / Excel
adopted from KNK C Programming : A Modern Approach
에어 PHP 입문.
7주차: Functions and Arrays
2.7 행렬 (Matrices] 이산수학 (Discrete Mathematics) Matrix Reloaded
이산수학(Discrete Mathematics)
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
수치해석 ch3 환경공학과 김지숙.
2014년 가을학기 손시운 지도 교수: 문양세 교수님 행렬과 배열 2014년 가을학기 손시운 지도 교수: 문양세 교수님.
Pointers summary.
Report #3- 문제 1 Set(집합) 추상 데이터 타입을 정의하고, 다음과 같은 연산자들을 포함시켜라. 여기서 S, S1, S2는 집합을 나타내고, i는 집합 원소를 나타낸다. 연산 의미 create() Return {} insert(S, i) If i є S then.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

제2장 배열과구조

2.4 희소행렬 추상데이터타입 희소 행렬(Sparse matrix) 0 1 0 0 0 0 0 1 2 3 4 5 0  1    0  0   0   0          0 11  3  0  0   0 0  0  0 -6  0   0 0  0  0  0  0   0 91  0  0  0  0   0 0  0 28  0  0    0 0 1 2 3 4 5 1 2 3 4 5

2.4 희소행렬 추상데이터타입 • m × n matrix A ≡ A[MAX_ROWS][MAX_COLS] # of non-zero elements            --------------------- <<  small # of total elements        

2.4 희소행렬 추상데이터타입 Structure Sparse_Matrix Objects : 3원소쌍 <행,열,값>의 집합이다. 여기서, 행과 열은 정수이고 이 조합은 유일하며, 값은 item 집합의 한 원소이다. Functions : 모든 a,b∈Sparse_Matrix, x∈item, i , j, max_col, max_row ∈index에 대해 Sparse_Matrix Create(max_row, max_col)  ::= return max_items까지      저장할 수 있는 Sparse_matrix, 여기서 최대 행의 수는 max_row이고 최대 열의 수는 max_col이라 할 때 max_items=max_row*max_col이다. Sparse_Matrix Transpose(a)   ::= return 모든 3원소쌍의 행과 열의 값      을 교환하여 얻은 행렬

2.4 희소행렬 추상데이터타입 Sparse_Matrix Add(a,b) ::= if a와 b의 차원이 같으면 return 대응항들, 즉 똑같은 행과 열의 값을 가진 항들을 더해서 만들어진 행렬 else return 오류 Sparse_Matrix Multiply(a,b)   ::= if a의 열의 수와 b의 행의 수가 같으면 return 다음 공식에 따라 a와 b를 곱해서 생성된 행렬 d:d[i][j]=(a[i][j] *b[i][j]), 여기서 d[i][j]는 (i,j)번째 요소이다      else return 오류 end Sparse_Matrix

2.4 희소행렬 추상데이터타입 효율적 기억장소 사상 <i, j, value> : 3-tuples (triples)  효율적 기억장소 사상 <i, j, value> : 3-tuples (triples) no. of rows no. of columns no. of non-zero elements ordering(column major or row major)

2.4 희소행렬 추상데이터타입 희소 행렬 0  1    0  0   0   0          0 11  3  0  0   0 0  0  0 -6  0   0 0  0  0  0  0   0 91  0  0  0  0   0 0  0 28  0  0    0 row col value   6 6 5 0 1 1 1 1 11 2 3 -6 3 0 91 5 2 28 0 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

2.4 희소행렬 추상데이터타입 행렬을 위한 연산 행렬의 생성 덧셈 곱셈 전치

2.4 희소행렬 추상데이터타입 행렬의 전치(Matrix Transpose) for j← 1 to n do for i←1 to m do           B(j, i) ← A(i, j)            end                        end

2.4 희소행렬 추상데이터타입           1    2      3               1    2      3  A(0,    6,   6,     8         B(0,   6,   6,     8      (1,    0,   0,     15          (1,   0,   0,     15 (2,    0,   3,     22          (2,   0,    4,     91 (3,    0,   5,     -15        (3,   1,   1,     11 (4,    1,   1,     11         (4.   2,   1,     3 (5,    1,   2,     3          (5,   2,   5,     28 (6,    2,   3,     -6          (6,   3,   0,     22 (7,    4,   0,     91         (7,   3,   2,     -6 (8,    5,   2,     28         (8,   5,   0,     -15 행내에서 => 행우선, 열내에서 => 열우선

2.4 희소행렬 추상데이터타입 희소 행렬의 전치 각 행 i에 대해서 원소 <i, j, 값>을 가져와서 전치행렬의 원소 <j, i, 값>으로 저장

procedure TRANSPOSE(A,B) //A is a matrix represented in sparse form// //B is set to be its transpose// 1   (m,n,t)←(A(0,1),A(0,2),A(0,3)) 2   (B(0,1),B(0,2),B(0,3))←(n,m,t) 3   if t<0 then return //check for zero matrix// 4   q←1      //q is position if next term in B// 5   for col←1 to n do  //transpose by columns// 6     for p←1 to t do //for all nonzero terms do// 7       if A(p,2)=col       //correct column// 8         then[(B(q,1),B(q,2),B(q,3)) ← //insert// 9              (A(p,2),A(p,1),A(p,3)) //next term//   10                 q←q+1  ]                  11   end 12  end 13 end TRANSPOSE

void transpose(term a[], term b[]) /* a를 전치시켜 b를 생성 */ { int n, i, j, currentb; n = a[0].value;     /* 총 원소 수 */ b[0].row = a[0].col; /* b의 행 수 = a의 열 수 */  b[0].col = a[0].row; /* b의 열 수 = a의 행 수 */  b[0].value = n;    if (n > 0) { /* 0이 아닌 행렬 */    currentb = 1; for (i =0; i = a[0].col; i++) /* a에서 열별로 전치*/ for (j = 1; j <= n; j++) /* 현재의 열로부터 원소를 찾는다. */ if (a[j].col ==i { /* 현재 열에 있는 원소를 b에 첨가 */ b[currentb].row = a[j].col; b[currentb].col = a[j].row; b[currentb].value = a[j].value; currentb++; } O(columns * elements)

void fast_transpose(term a[], term b[]) { /* a를 전치시켜 b에 저장 */ int row_terms[MAX_COL], starting_pos[MAX_COL]; int i,j, num_col = a[0].col, num_terms = a[0].value; b[0].row = num_cols; b[0].col = a[0].row; b[0].value = num_terms; if (num_terms > 0) { /* 0이 아닌 행렬 */ for(i = 0; i < num_cols; i++) row_terms[i] = 0; for(i = 1; i <= num_terms; i++) row_terms[a[i].col]++; starting_pos[0] = 1; for(i = 1; i < num_cols; i++) starting_pos[i] = starting_pos[i-1] + row_terms[i-1]; for(i = 1; i <= num_terms; i++) { j = starting_pos[a[i].col]++; b[j].row = a[i].col;  b[j].col = a[i].row; b[j].value = a[i].value; }                 } O(columns + elements)

2.5 다차원 배열의 표현 배열의 원소 수 : a[upper0][upper1]....[uppern-1] =  ∏i-0,n-1 upperi  -  a[10][10][10] ⇨ 10・10・10 = 1000

2.5 다차원 배열의 표현 다차원 배열 표현 방법 - 행 우선 순서(row major order)               row0            row1       rowupper0-1 - 열 우선 순서(column major order)               col0                col1        colupper1-1 A[0][0] A[0][1] … A[0][upper1-1] A[1][0] … A[0][0] A[1][0] … A[upper1-1][0] A[1][1] …

2.5 다차원 배열의 표현 주소 계산 (2차원 배열 - 행우선 표현) α = A[0][0]의 주소 A[i][0]의 주소 = α + i・upper1 A[i][j]의 주소 = α + i・upper1 + j

2.5 다차원 배열의 표현 주소 계산 (3차원 배열) : A[upper0][upper1][upper2] a[i][0][0] 주소 = α+i・upper1・upper2 a[i][j][k] 주소 = α+i・upper1・upper2+j・ upper2 + k

2.5 다차원 배열의 표현 A[upper0][upper1]...[uppern-1] α = A[0][0]...[0]의 주소 a[i0][0]...[0] 주소 = α + i0upperCupper2...uppern-1 a[i0][i1][0]...[0] 주소  = α+ i0upper1upper2...uppern-1 + i1upper2upper3...uppern-1 a[i0][i1]...[in-1] 주소 = α + i0upper1upper2...uppern-1 + i1upper2upper3...uppern-1 + i2upper3upper4...uppern-1 ⋮ + in-2uppern-1 + in-1

과제물 배열의 전치를 위한 두가지 알고리즘 P/G