270 likes | 608 Views
3 장 . 배열 (array) 1 절 . 1 차원 배열의 필요성과 기본 다루기 2 절 . 1 차원 배열로 다항식 구현 3 절 . 다차원 배열의 필요성과 기본 다루기 4 절 . 희소 행렬. 이 완 직 ( wjlee@pnu.ac.kr ) 2010 년 1 학기. 1. 1 차원 배열의 필요성과 기본 다루기. 학생 5 명의 점수를 입력 받아 성적처리 변수 5 개보다는 배열로 선언하면 훨씬 효율적으로 프로그램을 작성. 1. 1 차원 배열의 필요성과 기본 다루기.
E N D
3장. 배열(array)1절.1차원 배열의 필요성과 기본 다루기 2절.1차원 배열로 다항식 구현 3절. 다차원 배열의 필요성과 기본 다루기 4절. 희소 행렬 이 완 직 (wjlee@pnu.ac.kr) 2010년 1학기
1. 1차원 배열의 필요성과 기본 다루기 • 학생 5명의 점수를 입력 받아 성적처리 • 변수 5개보다는 배열로 선언하면 훨씬 효율적으로 프로그램을 작성
1. 1차원 배열의 필요성과 기본 다루기 • 선언된 배열은 각각의 원소를 개별적으로 접근 가능 • 배열 명에 첨자(색인, index)를 지정해 사용한다. • 배열로 선언된 기억공간은 메모리 할당을 연속적으로 한다. • 각 원소의 주소도 원소 하나가 차지할 기억 공간(자료형)의 크기만큼만 차이가 난다.
1. 1차원 배열의 필요성과 기본 다루기 • 선언한 배열은 int 형이기 때문에 원소의 주소값이 4바이트만큼 차이가 난다. • 포인터를 이용한 배열 접근
1. 1차원 배열의 필요성과 기본 다루기 • C언어에서 배열 명(arr)은 배열의 시작 주소값, 즉 포인터로 해석된다. • 배열 명은 포인터 상수 • 배열과 포인터의 관계 arr == &arr[0] arr+1 == &arr[0]+1 == &arr[1] arr+i == &arr[0] + i == &arr[i] *(arr+i) == *&(arr[0]+i) == *&arr[i] == arr[i]
2. 1차원 배열로 다항식 구현 • 다항식은 항이 두 개 이상 있는 수나 문자의 곱으로만 이루어진 식을 말한다. • 다항식의 일반적인 형태는 다음과 같다. a(x) = 2x8 - 10x5 - 3x3 + 1 b(x) = 3x2 + 2x - 4
2. 1차원 배열로 다항식 구현 • polynomial a = {8, {2, 0, 0, 0, -10, 0, -3, 0, 0, 1}}
2. 1차원 배열로 다항식 구현 • 두 개의 다항식의 합을 구하는 addPoly() 2x8 – 10x5 – 3x3 + 1 a = {8, {2, 0, 0, 0, -10, 0, -3, 0, 0, 1}} 3x2 + 2x – 4 b = {2, {3, 2, -4}}
2. 1차원 배열로 다항식 구현 • 희소 다항식 • 대부분의 항의 계수가 0인 항이 많은 다항식을 생각해 보자. • 이와 같은 다항식을 희소(sparse) 다항식이라고 한다. • 예를 들어 다항식 3x1000 + x + 4는 1001개의 기억 공간 중 3개의 0이 아닌 항과 998개의 0인 항으로 이루어져 있다. • 3개만 사용되고 998개는 사용되지 않기 때문에 기억 공간의 낭비가 심해진다는 단점이 있다.
2. 1차원 배열로 다항식 구현 • 2.2 다항식에서 0이 아닌 항만 배열에 저장 3x1000 + x + 4와 같은 희소(sparse) 다항식이 다음과 같이 저장되므로 메모리 공간을 효율적으로 사용하게 된다.
2. 1차원 배열로 다항식 구현 • 두 개의 다항식 합을 구하는 함수 addPoly2()
3. 다차원 배열의 필요성과 기본 다루기 • 2 차원 배열 • 2차원 배열은 표와 같이 행렬구조로 데이터를 다루기 위해 사용된다. • 연속적인 저장 공간을 선언하는 배열은 1차원 배열뿐만 아니라 2차원, 3차원, 4차원,... 등 다차원으로 배열을 선언해서 사용할 수도 있다. • 2차원 배열은 2차원 배열용 자료형이 따로 있는 것이 아니므로 1차원 배열을 선언하는 형식에 첨자를 하나 더 추가하여 행과 열의 개수를 지정하면 된다. int arr[3][4];
3. 다차원 배열의 필요성과 기본 다루기 • 3차원 배열 • int arr[2][3][4] = { { {1, 2, 3, 4}, • {5, 6, 7, 8}, • {9,10,11,12} }, • { {13,14,15,16}, • {17,18,19,20}, • {21,22,23,24} } • }; • 3차원 배열 선언에 대한 논리적 구조는 다음과 같다
4. 희소 행렬(sparse matrix) • 행렬(matrix)은 수학이나 물리학, 특히 양자역학에서 사용되는 중요한 자료구조이다. • m× n행렬은 일반적으로 m행 n열의 2차원 배열을 이용하여 표현한다.
4. 희소 행렬(sparse matrix) • 다음 행렬을 보면 많은 항들이 0으로 채워져 있다. 이러한 행렬을 희소 행렬이라고 한다. • 위의 예에서 배열의 원소 36개 중에서 실제 사용하는 것은,0이 아닌 원소를 저장하는 7개뿐 • 나머지 29개의 메모리 공간이 낭비
4. 희소 행렬(sparse matrix) • 희소 행렬 저장 방법 • 희소 행렬인 경우에는 0이 아닌 원소만 추출하여 <행, 열, 값>의 쌍으로 배열에 저장하는 방법을 사용한다.
4. 희소 행렬(sparse matrix) <행, 열, 값> 3개의 쌍을 저장하는 구조체 정의 전체 Sparse Maxtrix 구조체 정의
4. 희소 행렬(sparse matrix) • Sparse Matrix 저장 구조 • 전체 행의 개수, 전체 열의 개수, 0이 아닌 원소의 개수 저장 • 0이 아닌 원소: <행 번호, 열 번호, 원소>쌍으로 배열에 저장