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

Slides:



Advertisements
Similar presentations
Chapter 10 C Structures, Unions, Bit Manipulations and Enumerations Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc.
Advertisements

Review for Final Exam Dilshad M. NYU. In this review Arrays Pointers Structures Java - some basic information.
CS1061: C Programming Lecture 21: Dynamic Memory Allocation and Variations on struct A. O’Riordan, 2004, 2007 updated.
Structures. An array allows us to store a collection of variables However, the variables must be of the same type to be stored in an array E.g. if we.
Chapter 9 Imperative and object-oriented languages 1.
CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of.
1 ICS103 Programming in C Lecture 16: 2-Dimensional Arrays.
CS Data Structures Chapter 2 Arrays and Structures.
1 Chapter 9 Arrays and Pointers. 2  One-dimensional arrays  The Relationship between Arrays and Pointers  Pointer Arithmetic and Element Size  Passing.
1 Pointers, Dynamic Data, and Reference Types Review on Pointers Reference Variables Dynamic Memory Allocation –The new operator –The delete operator –Dynamic.
Introduction of Arrays. Arrays Array form an important part of almost all programming language. It provides a powerful feature and can be used as such.
Chapter 8 Arrays and Strings
Chapter 2 Arrays and Structures Instructors: C. Y. Tang and J. S. Roger Jang All the material are integrated from the textbook "Fundamentals of Data Structures.
CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals of Data Structures.
CMPE-013/L: “C” Programming Gabriel Hugh Elkaim – Spring 2013 CMPE-013/L Arrays and Strings Gabriel Hugh Elkaim Spring 2013.
Chapter 3 Data Structures and Abstract Data Type Dr. Bernard Chen Ph.D. University of Central Arkansas Fall 2008.
Multidimensional Arrays C++ also allows an array to have more than one dimension. For example, a two-dimensional array consists of a certain number of.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 10. Pointers & Dynamic Data Structures.
Processing Arrays Lesson 8 McManusCOP Overview One-Dimensional Arrays –Entering Data into an Array –Printing an Array –Accumulating the elements.
CHAPTER 21 ARRAYS AND STRUCTURES. CHAPTER 22 Arrays Array: a set of index and value data structure For each index, there is a value associated with that.
Chapter 2 Arrays and Structures  The array as an abstract data type  Structures and Unions  The polynomial Abstract Data Type  The Sparse Matrix Abstract.
Chapter 8 Arrays and Strings
Arrays Module 6. Objectives Nature and purpose of an array Using arrays in Java programs Methods with array parameter Methods that return an array Array.
Data Structures – Week #1 Introduction. February 17, 2012Borahan Tümer, Ph.D.2 Goals We will learn methods of how to (explicit goal) organize or structure.
C++ Programming: From Problem Analysis to Program Design, Fifth Edition Arrays.
Spring 2005, Gülcihan Özdemir Dağ Lecture 7, Page 1 BIL104E: Introduction to Scientific and Engineering Computing, Spring Lecture 7 Outline 7. 1.
CPSC 252 Concrete Data Types Page 1 Overview of Concrete Data Types There are two kinds of data types: Simple (or atomic) – represents a single data item.
Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. C H A P T E R F I V E Memory Management.
Arrays  Array is a collection of same type elements under the same variable identifier referenced by index number.  Arrays are widely used within programming.
C++ Data Types Structured array struct union class Address pointer reference Simple IntegralFloating char short int long enum float double long double.
ECE 103 Engineering Programming Chapter 47 Dynamic Memory Alocation Herbert G. Mayer, PSU CS Status 6/4/2014 Initial content copied verbatim from ECE 103.
Data Structure Sang Yong Han Chung-Ang University Spring
Data Structures & Algorithm Analysis Arrays. Array: a set of pairs (index and value) data structure For each index, there is a value associated with that.
Array, Structure and Union
Pointers. Pointer Variable Declarations and Initialization Pointer variables – Contain memory addresses as their values – Normal variables contain a specific.
Arrays. Related data items Collection of the same types of data. Static entity – Same size throughout program.
Chapter 10 Structures, Unions, Bit Manipulations, and Enumerations Associate Prof. Yuh-Shyan Chen Dept. of Computer Science and Information Engineering.
Structured Programming Approach Module VIII - Additional C Data Types Arrays Prof: Muhammed Salman Shamsi.
 2008 Pearson Education, Inc. All rights reserved. 1 Arrays and Vectors.
C++ for Java Programmers Chapter 2. Fundamental Daty Types Timothy Budd.
CCSA 221 Programming in C CHAPTER 7 WORKING WITH ARRAYS 1.
1 Chapter 9 Arrays Java Programming from Thomson Course Tech, adopted by kcluk.
Data Structure and Algorithm: CIT231 Lecture 3: Arrays and ADT DeSiaMore DeSiaMorewww.desiamore.com/ifm1.
Arrays Declaring arrays Passing arrays to functions Searching arrays with linear search Sorting arrays with insertion sort Multidimensional arrays Programming.
Arrays What is an array… –A data structure that holds a set of homogenous elements (of the same type) –Associate a set of numbers with a single variable.
1 Chapter 9 Arrays Java Programming from Thomson Course Tech, adopted by kcluk.
Chapter 9 Arrays. Chapter Objectives Learn about arrays Explore how to declare and manipulate data into arrays Understand the meaning of “array index.
Arrays and Matrices. One-Dimensional Arrays An array is an indexed data structure All variables stored in an array are of the same data type An element.
Chapter 9 Arrays. Chapter Objectives Learn about arrays Explore how to declare and manipulate data into arrays Understand the meaning of “array index.
13/10/2016CS150 Introduction to Computer Science 1 Multidimensional Arrays  Arrays can have more than one column  Two dimensional arrays have two columns.
Arrays. C++ Style Data Structures: Arrays(1) An ordered set (sequence) with a fixed number of elements, all of the same type, where the basic operation.
Arrays. Arrays are objects that help us organize large amounts of information.
◦ 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.
1 ARRAYS AND STRUCTURES. 2 Arrays Array: a set of index and value data structure For each index, there is a value associated with that index. representation.
Windows Programming Lecture 03. Pointers and Arrays.
APS105 Malloc and 2D Arrays (text Ch6.4, Ch10.2).
C Programming Lecture 15 Two Dimensional Arrays. Two-Dimensional Arrays b The C language allows arrays of any type, including arrays of arrays. With two.
Strings C supports strings using one-dimensional character arrays. A string is defined as a null-terminated character array. In C, a null is 0. You must.
Data Structure Sang Yong Han
Computer Programming BCT 1113
CSCE 3110 Data Structures & Algorithm Analysis
CHAPTER 2 ARRAYS AND STRUCTURES
Data Structures 4th Week
Data Structures Unit-2 Engineered for Tomorrow CSE, MVJCE.
 Zero - set zero of a polynomial
Instructor: Mr.Vahidipour
CSCE 3110 Data Structures & Algorithm Analysis
CS111 Computer Programming
Dr Tripty Singh Arrays.
Presentation transcript:

 Program data code Data StructureAlgorithm

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

 관련 데이터를 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; }

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

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

 성능 분석 방법 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); }

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

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

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; } n+1 n n+1 n 1 0 예제 1.2 배열 값의 합산 sum = 2n+3

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]; } rows+1 rows*(cols+1) rows*cols 0 rows+1 rows*(cols+1) rows*cols 0 예제 1.4 행렬의 덧셈 계산 sum = 2rows*cols+2rows+1

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

◦ 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

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

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

 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

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)

◦ 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

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

 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

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

 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”);

 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;

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

 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;

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

 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

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;

◦ 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;

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

 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

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

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

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

 Sparse matrix A[6,6]

 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

#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

 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

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

 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

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

 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

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) 전치행렬에서 각 행의 값의 개수 계산

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

◦ Time complexity : O(cols + elements)

 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)

 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

 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

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

 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