Computer Network Lab. Keimyung University

Slides:



Advertisements
Similar presentations
구조체 : Structure 와 포인터 2. 집합적 변수 생성 가능 structure_declaration ::= struct_specifier declarator_list ; struct_specifier ::= struct tag_name | struct tag_name.
Advertisements

스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
어서와 Java는 처음이지! 제3장선택과 반복.
컴퓨터 개론 및 실습 강의 9.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
프로그래밍실습 제 7 강.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
D. 지뢰찾기 분석 설계 예제.
홍 길 동 Hong, Gil-Dong 국어국문학과 홍 길 동
시스템 생명 주기(System Life Cycle)(1/2)
10장 정렬.
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 학기 데이터구조.
CHAP 10:그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 62).
제5장 트리.
시스템 생명 주기(System Life Cycle)(1/2)
연결리스트 (Linked List) 충북대학교 컴퓨터공학과 서 영 훈.
4장 스택.
제 3 장. 배열과 구조체 및 포인터.
HW#2 #1과 동일한 방법으로 argc와 argv를 사용함
CHAP 9 : 정렬.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
Data structures 01.2: C++ classes 동의대학교 멀티미디어공학과 이광의교수.
Chapter 9 정렬(sorting) SANGJI University Kwangman KO
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
6장 배열.
프로그래밍 랩 – 7주 리스트.
그래프(graph) 연결되어 있는 객체 간의 관계를 표현하는 자료구조 가장 일반적인 자료구조 형태
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
정렬과 합병.
4장 제어문 선택문: if 문, if – else 문, switch 문
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
과거사 청산, 밝은 미래를 위하여 역사 청산 비교 분석-독일과 우리나라.
제어문 & 반복문 C스터디 2주차.
선택 정렬 #define SWAP(x, y, t) {(t) = (x); (x) = (y); (y) = (t);}
CHAP 2:순환.
마이크로소프트 박종호.
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
자바 5.0 프로그래밍.
2 배열과 구조.
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
斷腸의 望鄕 62年 廢墟의 凍土.
-Part1- 제7장 반복문이란 무엇인가.
adopted from KNK C Programming : A Modern Approach
국제물류.
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
CHAP 10 : 그래프.
아이폰/아이패드 사내메일 수신 설정하기 1. [설정] > 'Mail,연락처,캘린더' > '계정추가'를 선택합니다.
이산수학(Discrete Mathematics)
탐색 선형 탐색, 이진 탐색, 이진 탐색 트리.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
1장. 서 론 데이터베이스의 개요 모델의 종류 관계형 모델과 객체 지향형 데이터베이스 SQL이란 무엇인가?
성전기공식(안) 식 순 1. 기공미사 2. 기 공 식 3. 축 하 연 천주교 수원교구 퇴촌성당.
어서와 C언어는 처음이지 제16장.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
DataScience Lab. 박사과정 김희찬 (화)
어서와 C언어는 처음이지 제23장.
Chapter 09. 배열.
어서와 C언어는 처음이지 제22장.
Computer Network Lab. Keimyung University
Presentation transcript:

Computer Network Lab. Keimyung University Juht@kmu.ac.kr 배열 응용 Computer Network Lab. Keimyung University Juht@kmu.ac.kr

탐색 및 정렬 탐색(searching) 정렬(sorting) 자료의 집합에서 특정한 원소를 찾는 작업 많은 프로그램에서 자주 사용되는 작업 배열에서의 탐색은 자료의 집합이 배열에 저장됨 입력: 찾고자 하는 원소의 값 결과: 찾은 원소의 인덱스 정렬(sorting) 원소의 값을 정해진 순서로 배치하는 작업 오름차순: 배열의 원소 값이 증가하는 순서로 배치 내림차순: 배열의 원소 값이 감소하는 순서로 배치 배열에서의 정렬은 자료를 순서에 따라서 배열에 배치하는 작업 입력: 정렬되지 않은 배열 결과: 정렬된 배열 자료구조 제1장: 자료구조의 개념

선형 탐색 처음 원소부터 마지막 원소까지 탐색 값과 원소 값을 비교함 예: 문자열 포인터 배열에서의 탐색 학생의 이름이 문자열 포인터 배열 name에 저장되어 있음 학생의 이름을 lsearch 함수가 탐색을 함 lsearch 함수는 name에 저장된 학생 이름과 탐색하고자 하는 이름이 저장된 target을 비교함 탐색을 성공하여 찾으면 인덱스를 찾지 못하면 -1을 돌려 줌 두 문자열이 같으면 0을 같지 않으면 0 이외의 값을 돌려주는 문자열 비교 함수는 strcmp를 사용함 자료구조 제1장: 자료구조의 개념

문자열 포인터 배열에서의 탐색 #define NUM_OF_STD 5 char *name[NUM_OF_STD] = { "Hong Gil Dong", "Lee Mong Ryong", "Byun Gang Soe", "Sim Bong Sa", "Byun Hak Do" }; int main() { int i; i = lsearch(name, "Sim Bong Sa", NUM_OF_STD); if ( i != -1 ) printf("Found: %d\n",i); else printf("Not found\n"); } int lsearch(char **data, char *target, int size){ int r; for( r = 0 ; r < size ; r++ ) { if( strcmp(target,*data) == 0 ) return r; data++; return -1; /* not found */ 자료구조 제1장: 자료구조의 개념

문자열 포인터 배열에서의 탐색 자료구조 제1장: 자료구조의 개념

이진 탐색 선형 탐색의 수행 시간은 O(n)임 좀더 효율적인 탐색 방법은? 이진탐색 이진 탐색의 전제 조건 이진 탐색 방법 배열이 정렬이 되어 있어야 함 이진 탐색 방법 탐색 값과 정렬된 배열의 중간 원소의 값을 비교하면 탐색 공간을 반으로 줄일 수 있음 한번 비교할 때 마다 탐색 공간이 반으로 줄어 들기 때문에 O(lg n) 정렬은 O(n) 보다 많은 시간이 필요하므로 선형 탐색 보다 비효율적일 수 있음 한번 정렬하고 여러 번 탐색을 해야 하는 경우에 효율적임 자료구조 제1장: 자료구조의 개념

이진 탐색 예: 문자열 포인터 배열 문자열도 사전적 순서에 의하여 정렬될 수 있음 사전적 순서: 문자열을 이루는 문자의 ASCII 코드 값의 크기로 문자열의 크기를 결정하며 앞에 있는 문자가 더 중요함 자료구조 제1장: 자료구조의 개념

이진 탐색 예: 문자열 포인터 배열 #define NUM_OF_STD 5 char *name[NUM_OF_STD] = { "Byun Gang Soe", "Byun Hak Do", "Hong Gil Dong", "Lee Mong Ryong", "Sim Bong Sa"}; int main() { int i; i = bsearch(name, NUM_OF_STD); if ( i != -1 ) printf("Found: %d\n",i); else printf("Not found\n"); } 자료구조 제1장: 자료구조의 개념

이진 탐색 예: 문자열 포인터 배열 int bsearch(char **data,char *target, int size){ int r; int left = 0; int right = size - 1; int middle, cmp; while ( left <= right ) { middle = (left + right ) / 2 ; cmp = strcmp(target,data[middle]); if( cmp > 0 ) left = middle + 1; else if ( cmp < 0) right = middle - 1; else return middle; } return -1; /* not found */ 자료구조 제1장: 자료구조의 개념

선택 정렬 하나의 원소씩 바른 위치에 있도록 집어 넣는 방법 시간 복잡도 오름차순의 경우 가장 작은 것부터 차례로 첫째 위치부터 채워 나감 차례로 찾는 방식은 선형탐색 방법을 사용함 시간 복잡도 첫째 원소를 찾기 위하여 n번, 둘째 원소를 찾기 위하여 n-1번,… 마지막 원소를 찾기 위하여 0번 비교를 수행함 (n) + (n-1) + (n-2) + …… + 0 = O(n(n+1)/2) = O(n2) 자료구조 제1장: 자료구조의 개념

선택 정렬 예 자료구조 제1장: 자료구조의 개념

문자열 포인터 배열의 선택 정렬 평균 수행시간이 가장 효율적인 알고리즘 수행 방법 시간 복잡도 임의로 기준 값을 정하고 기준 값 보다 큰 묶음과 작은 묶음으로 분류 다시 큰 묶음과 작은 묶음에 대하여 위와 동일한 방법을 재귀적으로 묶음의 크기가 1일 경우까지 적용 시간 복잡도 두개의 묶음으로 나누는 횟수는 1 + 2 + 4 + lg n 까지 수행함 각 단계에서 n 만큼의 비교를 수행함 O(n lg n) 자료구조 제1장: 자료구조의 개념

퀵 정렬의 예 자료구조 제1장: 자료구조의 개념

문자열 포인터 배열의 퀵 정렬 int quicksort(char **data, int left, int right, int size){ char pivot[20]; int l=left, r=right; char *temp; if (size <= 1 ) return -1; strcpy(pivot, data[left+rand()%size]);; while ( 1 ) { while( (strcmp(data[l],pivot) < 0) && (l < r ) ) l++; while( (strcmp(data[r],pivot) > 0) && (l < r ) ) r--; if( l >= r ) break; temp = data[l]; data[l] = data[r]; data[r] = temp; } quicksort(data, left, r, r-left+1); quicksort(data, r+1, right, right-r); 자료구조 제1장: 자료구조의 개념

배열을 이용한 그래프 표현 그래프는 표현력이 강력하여 많이 사용됨 그래프 = 정점(vertex) + 간선(edge) 도로망, 비행기 노선도, 네트워크 구성, 시스템 상태도 그래프 = 정점(vertex) + 간선(edge) 정점: 점으로 표현 간선: 정점을 잊는 선 그래프의 종류 무방향 그래프: 간선의 방향이 없는 그래프 방향 그래프: 간선이 방향을 가진 그래프 자료구조 제1장: 자료구조의 개념

그래프의 표현 그림 표현 수학적 표현 V(G1) = {0,1,2,3,4}, E(G1) = {(0,1), (0,2), (0,4), (1,2), (1,4), (2,3), (3,4)} V(G2) = {0,1,2,3,4,5} E(G2) = {(0,1), (0,2), (1,2), (1,3), (1,4), (2,3), (2,4), (3,5), (4,5)} 자료구조 제1장: 자료구조의 개념

그래프의 표현 그래프 G에 대한 인접 행렬 A는 인접 행렬의 C 언어 표현: 이차원 정수 배열 n X n 행렬로 표현 ( n = | V(G | ) Ai,j = 1 (i,j) ∈ E(G) = 0 (i,j) ∈ E(G) 인접 행렬의 C 언어 표현: 이차원 정수 배열 int G1[5][5] = { {0, 1, 1, 0, 1}, {1, 0, 1, 0, 1}, {1, 1, 0, 1, 0}, {0, 0, 1, 0, 1}, {1, 1, 0, 1, 0}}; int G2[6][6] = { {0, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0}, {0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 1}, {0, 0, 0, 0, 0, 0}}; 자료구조 제1장: 자료구조의 개념

정점의 차수 차수 정점 i의 진출 차수는 인접 행렬에서 i 행의 합과 같음 그래프에서 정점에 연결된 간선의 수 진입차수: 정점에 도착하는 간선의 수 진출차수: 정점에서 출발하는 간선의 수 무방향 그래프는 진출 진입 차수가 같음 정점 i의 진출 차수는 인접 행렬에서 i 행의 합과 같음 정점 i의 진입 차수는 인접행렬에서 i 열의 합과 같음 자료구조 제1장: 자료구조의 개념

진출 차수 계산 프로그램 int outdegree(int *graph, int row, int size) { int deg = 0; int *col; int i; col = graph+(row*size); for(i = 0 ; i < size ; i++) { deg = deg + *col; col++; } return deg; 자료구조 제1장: 자료구조의 개념

진입 차수 계산 프로그램 int indegree(int *graph, int colum, int size) { int deg = 0; int *row; int i; row = graph + colum; for( i = 0 ; i < size ; i++) { deg = deg + *row; row = row + size; } return deg; 자료구조 제1장: 자료구조의 개념

오일러 경로 임의의 경로에서 출발하여 각 간선을 한번씩만 거치고 처음 출발점으로 돌아오는 경로 예 자료구조 제1장: 자료구조의 개념

오일러 경로 찾기 알고리즘 임의의 정점 i를 시작 정점으로 선택 i에 연결된 임의의 j 정점을 선택하며 연결된 정점이 없으면 수행 종료 인접 행렬 Ai,j와 Aj,i를 1에서 0으로 변경하여 (i,j) 경로를 지나갔음을 표현 i를 j로 대치하여 2의 과정을 수행 자료구조 제1장: 자료구조의 개념

오일러 경로 찾는 프로그램 int eulerpath(int *g, int visit, int size) { int *row; int i; row = g + visit*size; for ( i = 0 ; i < size ; i++ ){ if ( *row != 0 ) { *row = 0; /* A[i][j] = 0 */ *(g + i*size + visit) = 0; /* A[j][i] = 0 */ printf("(%d,%d)",visit,i); eulerpath(g,i,size); } row++; 자료구조 제1장: 자료구조의 개념

그래프의 연결성 그래프 G에 대한 인접 행렬 A의 멱집합은 그래프의 연결성 표현 A는 하나의 간선을 거쳐서 갈 수 있는 경로 …. An은 n개의 간선을 거쳐서 갈 수 있는 경로 자료구조 제1장: 자료구조의 개념

행렬의 멱집합과 연결성 예 1 4 2 3 자료구조 제1장: 자료구조의 개념

행렬의 곱 int matrixpower(int *graph, int *power, int size) { int row, column, r, c,x; for( row = 0 ; row < size ; row++) { for(column = 0 ; column < size ; column++ ){ x = 0; for( r = 0, c = 0; r < size ; r++, c++ ) x += *(graph + row*size+ c) * *(graph + r*size + column); *(power + row * size + column) = x; } 수행 시간 복잡도는 O(n3) 자료구조 제1장: 자료구조의 개념

질의 및 토의 자료구조 제1장: 자료구조의 개념