본문 바로가기
728x90
반응형

2022-2/자료구조28

2장 - 희소행렬의 곱 C언어 구현 #include #include #define MAX_TERMS 101 #define MAX_COL 50 #define COMPARE(a,b) (a 0) { for (i = 0; i < num_col; i++) { row_terms[i] = 0; //배열 초기화 } for (i = 0; i 2022. 9. 28.
2장- 희소행렬의 전치 C언어 구현 모든 원소를 반복해서 돌면서 col 오름차순으로 찾아 B에 넣는 방식 #include #define MAX_TERMS 101 typedef struct { //term[0]에는 행 수, 열 수, 원소 수가 들어가고 이후부터 행,열,값임 int row; int col; int value; }term; term a[MAX_TERMS]; void transpose(term a[], term b[]) { //a행렬을 전치하여 b행렬에 저장 int count = a[0].value; //원소의 개수 int i, j, currentb; b[0].row = a[0].col; b[0].col = a[0].row; b[0].value = a[0].value; if (count > 0) { //원소가 존재하는 경우 cur.. 2022. 9. 28.
2장 - 희소 행렬(Sparse Matrix)의 표현 행렬에 0이 많이 포함된 경우에 희소행렬이라고 한다. 배열에 희소행렬을 그대로 표현할 경우 공간낭비가 심하게 된다. 낭비되는 공간을 줄이기 위한 방법은 어떤게 있을까? 이차원 배열에 표현된 희소행렬을 (행,열,값)으로 묶어 표현하는 방법이 있다 1 0 0 0 0 5 0 0 0 이런 배열일 있다고 하자. 이 때 (행,열,값)으로 묶어 표현하면 [(0,0,1),(1,2,5)] 로 적을 수 있겠다. 근데 이 방법이 항상 효율적인건 아니다. n*n의 행렬이 있을 때, 0이 아닌 값이 k개 있다고 하자 2차원 배열로 행렬을 그대로 표현하면 n^2의 공간이 필요할 것이며 (행,열,값)으로 묶어 표현하면 3*k의 공간이 필요할 것이다. 이 방법이 효율적일 때는 k 다음시간에 계속.. 2022. 9. 25.
2장 - 다항식의 덧셈 구현하기 C언어에서 다항식을 구현하는 방법 방법1: 모든 지수의 계수들을 내림차순으로 저장 #define MAX_DEGREE 101 typedef struct{ int degree; float coef[MAX_DEGREE]; }polynomial; 예시) 2x^3 + x^2 -1 [3, (2,1,0,-1)] [최고차항 지수, (계수들 순서대로)] 또다른 예시로 x^100 +1이라는 식이 있을 때, 이 방법으로 저장하기 위해선 [100,(1,0,0,0,0.....0,0,0,0,1)]을 저장해야하는데, 계수가 0인 항이 많은 경우 메모리 낭비가 심하다. 방법 2: 지수와 계수를 모두 저장 #define MAX_TERMS 100 typedef struct{ float coef; int expon; }polynomial.. 2022. 9. 25.
배열과 구조체, 공용체, 순서리스트 배열 첨자(index)와 값(value)의 쌍들의 집합. int list[5]; int *plist[5]; list[0]의 주소 = a라고 가정 list[1]의 주소 = a + sizeof(int) 배열을 인자로 전달 시 배열의 시작주소가 복사됨. (Call by reference) 배열의 동적 할당. int *A = (int*) malloc(sizeof(int)*100); int *B = (int*) calloc(100,sizeof(int)); 같은 동적할당이지만 malloc은 쓰레기값이 들어있고 calloc은 0으로 초기화된다 A = (int*) realloc(A,sizeof(int)*200); 용량을 늘리고싶어 재할당을 했다. 이때 메모리상에 원래크기의 배열A 뒷부분에 공간이 없다면..? 새로 할당.. 2022. 9. 21.
마방진 그리기(홀수형) #include #define MAX_SIZE 15 int main() { /* 홀수x홀수칸 magicSquare 채우기 */ int square[MAX_SIZE][MAX_SIZE]; int row, col; int size; int count; size = 5; //임의로 size=5 지정 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { square[i][j] = 0; //스퀘어 초기화 } } square[0][size / 2] = 1; //맨 윗줄 중앙부터 시작 int i = 0; //현재 행 int j = size / 2; //현재 열 for (count = 2; count 2022. 9. 18.
시간복잡도 (big - O,big - Omega,big - Theta) 표기법 입력 크기 n에 따른 실행시간 증가율을 나타낼 수 있다. Big O 표기법 Omega 표기법 Theta 표기법 Big O: - 상한선을 표현하는 방법이므로, 이 알고리즘은 O(n)보다는 작을 것임 - n>k일 때 f(n) k일 때 f(n) >= C *g(n) 을 만족하는 k, C가 존재하면 f(n) = Ω(g(n))이다. - (Big O의 반대라고 보면 된다) big Theta: - f(n)=O(g(n)) 이고 f(n) = Ω(g(n))일 때, f(n)=Θ(g(n))이다. 예제 프로그램들의 근사 표현 이진탐색: T(n) = T(n/2)+1, T(1) = 1 ==> O(log2 n) 순열출력: T(0,n) = (n+1)*T(1,n), T(n,n) = n+1 ==> O(n^2 * n!) 문제풀이는 대충적었으.. 2022. 9. 17.
선택정렬, 이진탐색, 순열 #include #include #define MAX_SIZE 101 #define SWAP(x,y,t) (t=x,x=y,y=t) void sort(int[], int); void main() { int i, n, list[MAX_SIZE]; printf("Enter the number of numbers to generate:"); scanf_s("%d", &n); if (nMAX_SIZE) { printf("ERROR"); } for (i = 0; i < n; i++) { //n개의 정수를 랜덤으로 생성 list[i] = rand() % 1000; printf("%d ", list[i]); } sort(list, n); printf("\n Sorted array:\n"); for (i = 0; i <.. 2022. 9. 14.
728x90
반응형