Presentation is loading. Please wait.

Presentation is loading. Please wait.

 Program data code Data StructureAlgorithm  Data vs. Variables int i = 10; int i[5]={3,5,7,9,10};

Similar presentations


Presentation on theme: " Program data code Data StructureAlgorithm  Data vs. Variables int i = 10; int i[5]={3,5,7,9,10};"— Presentation transcript:

1

2  Program data code Data StructureAlgorithm

3  Data vs. Variables int i = 10; int i[5]={3,5,7,9,10};

4  관련 데이터를 structure 로 정의  연산 호출시 구조체 변수를 함수 인자로 전달  예 ) Stack 의 표현 // 자료구조 stack 구조체의 정의 typedef int element; typedef struct { int top; element stack[MAX_STACK_SIZE]; } Stack; // 자료구조 stack 과 관련된 연산들을 정의 void push(Stack *s, element item) { if( s->top >= (MAX_STACK_SIZE -1)){ stack_full(); return; } s->stack[++(s->top)] = item; }

5  Natural language  Flow chart  Pseudo-code or C-like code  and etc

6

7

8

9  성능 분석 방법 1 ◦ 복잡도 분석  직접 구현하지 않고 수행 시간을 수학적으로 분석  알고리즘이 수행하는 연산 횟수를 측정하여 비교  연산의 횟수를 n 의 함수로 정의 Time complexity ( 시간복잡도 ) 분석 소요 수행 시간의 분석 Space complexity ( 공간복잡도 ) 분석 필요 메모리 공간 크기의 분석

10  성능 분석 방법 2  프로그램을 구현하여 실제적 시간 측정 #include void main( void ) { clock_t before, after; double duration; before= clock(); // 측정 대상 코드. //.... after= clock(); duration = (double)(after- before) / CLOCKS_PER_SEC; printf(“The code takes %f seconds.\n", duration); } #include void main( void ) { clock_t before, after; double duration; before= clock(); // 측정 대상 코드. //.... after= clock(); duration = (double)(after- before) / CLOCKS_PER_SEC; printf(“The code takes %f seconds.\n", duration); }

11  알고리즘이 수행하는 연산의 횟수를 계산 ◦ 산술 연산, 대입 연산, 비교 연산, 이동 연산  연산 수행횟수 ◦ 입력 데이터 항목 개수인 n 에 대한 함수 T(n) 으로 표현

12 연산횟수 T(n) 입력 데이터 n

13 statements steps/ execution frequencyTotal number of steps float sum(float list[], int m) { float tempsum = 0; int i; for (i=0; i<n; i++) tempsum += list[i]; return tempsum; } 0010111000101110 0 1 0 n+1 n 1 0 1 0 n+1 n 1 0 예제 1.2 배열 값의 합산 sum = 2n+3

14 statements Steps/ execution frequency Total number of steps void add(int a[][MAX_SIZE], … ) { int i, j; for(i=0; i<rows; i++) for(j=0; j<cols; j++) c[i][j] = a[i][j]+b[i][j]; } 00011100001110 0 rows+1 rows*(cols+1) rows*cols 0 rows+1 rows*(cols+1) rows*cols 0 예제 1.4 행렬의 덧셈 계산 sum = 2rows*cols+2rows+1

15  O(1) :  O(log n) :  O(n) :  O(nlog n) :  O(n 2 ) :  O(n 3 ) :  O(n k ) :  O(2 n ) :  O(n!) :

16

17 ◦ A one-dimensional array in C is declared implicitly by appending brackets to the name of a variable int list[5], *plist[5]; ◦ arrays start at index 0 in C

18 VariableMemory Address list[0]base address =  list[1]  + sizeof(int) list[2]  + 2·sizeof(int) list[3]  + 3·sizeof(int) list[4]  + 4·sizeof(int)  list[i] in C programs ◦ C interprets it as a pointer to an integer or its value

19 int *list1;  pointer variable to an int int list2[5];  pointer constant to an int, and five memory locations for holding integers are reserved ◦ (list2+i) equals &list2[i], and *(list2+i) equals list2[i] regardless of the type of the array list2

20  Ex 2.1 [1-dimensional array addressing] int one[] = {0,1,2,3,4}; ◦ write a function that prints out both the address of the i th element of the array and the value found at this address one one+1 one+2 one+3 one+4 01234

21 void print1(int *ptr,int rows) { printf(“Address Contents\n”); for(i=0;i<rows;i++) printf(“%8u %5d\n”,ptr+i,*(ptr+i)); printf(“\n”); } ◦ One-dimensional array accessed by address  address of i th element : ptr + i  obtain the value of the i th value : *(ptr + i)

22 ◦ struct  structure or record  mechanism of grouping data => data modeling (or data abstraction)  permits the data to vary in type  collection of data items where each item is identified as to its type and name

23 struct { char name[10]; int age; float salary; } person;  creates a variable whose name is person and has three fields 1) a name that is a character array 2) an integer value representing the age of the person 3) a float value representing the salary of the individual

24  use of the. as the structure member operator strcpy(person.name, ”james”); person.age = 10; person.salary = 35000; ◦ select a particular member of the structure

25 ◦ typedef statement create our own structure data type => user-defined data type typedef struct { char name[10]; int age; float salary; } human_being;

26  human_being ◦ the name of the type defined by the structure definition human_being person1, person2; if(strcmp(person1.name, person2.name)) printf(“The two people do not have the same\ name\n”); else printf(“The two people have the same\ name\n”);

27  Assignment ◦ permits structure assignment in ANSI C person1 = person2; ◦ but, in most earlier versions of C, assignment of structures is not permitted strcpy(person1.name,person2.name); person1.age=person2.age; person1.salary=person2.salary;

28  equality or inequality ◦ Cannot be directly checked ◦ Function to check equality of struct int humans_equal(human_being person1, human_being person2) { if(strcmp(person1.name,person2.name)) return FALSE; if(person1.age!=person2.age) return FALSE; if(person1.salary!=person2.salary) return FALSE; return TRUE; }

29  Embedding of a structure within a structure typedef struct { int month; int day; int year; } date; typedef struct{ char name[10]; int age; float salary; date dob; } human_being;

30 eg) A person born on February 14, 1988  person1.dob.month = 2;  person1.dob.day = 14;  person1.dob.year = 1988;

31  Unions ◦ similar to a structure, but the fields of a union must share their memory space ◦ only one field of the union is “active” at any given time

32 typedef struct{ enum tag_field {female,male} sex; union { int children; int beard; } u; }sex_type; typedef struct { char name[10]; int age; float salary; date dob; sex_type sex_info; } human_being; human_being person1,person2;

33 ◦ assign values to person1 and person2 person1.sex_info.sex = male; person1.sex_info.u.beard = FALSE; and person2.sex_info.sex = female; person2.sex_info.u.children = 4;

34 struct { int i, j; float a, b; }; or struct { int i; int j; float a; float b; };  stored in the same way ◦ increasing address locations in the order specified in the structure definition  size of an object of a struct or union type ◦ the amount of storage necessary to represent the largest component

35  one or more of its components is a pointer to itself  usually require dynamic storage management routines to explicitly obtain and release memory typedef struct { char data; list *link; } list; ◦ the value of link  address in memory of an instance of list or null pointer

36 list item1, item2, item3; item1.data = ‘a’; item2.data = ‘b’; item3.data = ‘c’; item1.link = item2.link = item3.link = NULL; //initialization ‘a’ item1 ‘b’ item2 ‘c’ item3

37  attach these structures together item1.link=&item2; item2.link=&item3; ‘a’ item1 ‘b’ item2 ‘c’ item3

38  representing matrix by using array ◦ m by  n (m rows, n columns) ◦ use two-dimensional array ◦ space complexity  S(m, n) = m *  n

39  Sparse matrix A[6,6]

40  common characteristics ◦ most elements are zero’s ◦ inefficient memory utilization  solutions ◦ store only nonzero elements ◦ using the triple ◦ must know  the number of rows  the number of columns  the number of non-zero elements

41 #define MAX_TERMS 101 typedef struct { int col; int row; int value; } term; term a[MAX_TERMS]; ◦ a[0].row: the number of rows ◦ a[0].col: the number of columns ◦ a[0].value: the total number of non-zoros ◦ choose row-major order

42  sparse matrix as triples  space complexity ◦ S(n, m) = 3 *  t, where t : the number of non-zero’s  independent of the size of rows and columns

43  transpose a matrix ◦ interchange rows and columns ◦ move a[i][j] to b[j][i] Hanyang University row-major order

44  Algorithm BAD_TRANS for each row i take element ; store it as element of the transpose; end; ◦ problem: data movement  Algorithm TRANS for all elements in column j place element in element end; ◦ problem: unnecessary loop for each column

45 void transpose(term a[],term b[]) { int n,i,j,currentb; n = a[0].value; b[0].row = a[0].col; b[0].col = a[0].row; b[0].value = n; if(n > 0) { currentb = 1; for(i = 0; i row */ for(j = 1; j <= n; j++) if(a[j].col == i) { /* i 번째 col 을 찾아냄 */ b[currentb].row = a[j].col; b[currentb].col = a[j].row; b[currentb].value = a[j].value; currentb++; }

46  Time complexity : O(cols·elements)  create better algorithm by using a little more storage ◦ row_terms  the number of element in each row ◦ starting_pos  the starting point of each row

47 void fast_transpose(term a[],term b[]) { int row_terms[MAX_COL]; int starting_pos[MAX_COL]; int i,j; int num_cols = b[0].row = a[0].col; int num_terms = b[0].value = a[0].value; b[0].col = a[0].row; if(num_terms > 0) { for(i = 0; i < num_cols; i++) row_terms[i] = 0; for(i = 1; i <= num_terms; i++) row_terms[a[i].col]++; (to be continued) 전치행렬에서 각 행의 값의 개수 계산

48 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; }

49 ◦ Time complexity : O(cols + elements)

50  Internal representation of multidimensional arrays ◦ how to state n-dimensional array into 1-dimensional array ? ◦ how to retrieve arbitrary element in a[upper 0 ][upper 1 ]···[upper n-1 ]  the number of element in the array n-1  upper i i=0 ◦ eg) for a[10][10][10], 10*10*10 = 1000 (units)

51  represent multidimensional array by ◦ what order ?  row-major-order ◦ store multidimensional array by rows a[0][0]···[0] a[0][0]···[1] ··· a[0][0]···[0][upper n-1 -1] a[0][0]···[1][0] ··· a[0][1]···[upper n-1 -1] a[0][2]···[0] ··· a[1][0]···[0] ··· :: starting address

52  how to retrieve ◦ starting-address + offset-value ◦ assume  : starting-address  1-dimensional array a[u 0 ] a[0]:  a[1]:  + 1 · · a[u 0 -1]:  + (u 0 - 1) a[i] =  + i

53  2-dimensional array a[u 0 ][u 1 ] a[i][j] =  + i·u 1 + j i j ?

54  3-dimensional array a[u 0 ][u 1 ][u 2 ] a[i][j][k] =  + i·u 1 ·u 2 + j·u 2 + k =  + u 2 [i·u 1 + j] + k  general case a[u 0 ][u 1 ]···[u n-1 ] a[i 0 ][i 1 ]···[i n-1 ] =  +  i j ·a j where a j =  u k 0 < j < n-1 a n-1 = 1 n-1 j=0 k=j+1 n-1


Download ppt " Program data code Data StructureAlgorithm  Data vs. Variables int i = 10; int i[5]={3,5,7,9,10};"

Similar presentations


Ads by Google