210 likes | 606 Views
Computer Algorithm 실습 - 이진 검색 , 버블 정렬 , 합병 정렬 -. Kim Hwan- Hee (hwanhee0920@kangwon.ac.kr) 2013. 4. 8. < 목 차 >. 이진 검색 알고리즘 개요 및 실습 버블 정렬 알고리즘 개요 및 실습 합병 정렬 알고리즘 개요 및 실습. 1. 이진 검색 알고리즘 (Binary Search). 이진 검색 알고리즘. 1. 이진 검색 알고리즘 (Binary Search). 이진 검색 알고리즘
E N D
Computer Algorithm 실습- 이진 검색, 버블 정렬, 합병 정렬 - Kim Hwan-Hee (hwanhee0920@kangwon.ac.kr) 2013. 4. 8.
< 목 차 > • 이진 검색 알고리즘 개요 및 실습 • 버블 정렬 알고리즘 개요 및 실습 • 합병 정렬 알고리즘 개요 및 실습
1. 이진 검색 알고리즘 (Binary Search) • 이진 검색 알고리즘
1. 이진 검색 알고리즘 (Binary Search) • 이진 검색 알고리즘 • 앞의 빨간 부분에 의해 O(log2N)의 시간복잡도를 가진다. • 이진 검색은 사전에 정렬되어 있어야 가능한 알고리즘이다. • 소스 코드의 실습은 될 수 있으면 Linux로 수행하세요. • Linux 코딩의 실력 향상을 위해서… • VI 명령어 사용법 다들 아시죠..?
1. 이진 검색 알고리즘 (Binary Search) • 이진 검색 소스 코드 ( 1/2 )
1. 이진 검색 알고리즘 (Binary Search) • 이진 검색 소스 코드 ( 2/2 )
2. 버블 정렬 알고리즘 ( Bubble Sort ) • 버블 정렬 알고리즘 void bubblesort( int n, keytype S[ ] ) { index i, j; for( i = 1; i <= n-1; i++ ) { for( j = 1; j <= (n-i); j++ ) { if(S[j] > S[j+1]) { exchange S[j] and S[j+1] } } } }
2. 버블 정렬 알고리즘 ( Bubble Sort ) • 버블 정렬 알고리즘 • 앞의 빨간 부분에 의해 O(N2)의 시간 복잡도를 가진다. • 버블 정렬의 경우 합병 정렬(Merge Sort), 버블 정렬(Bubble Sort), 빠른 정렬(Quick Sort) 알고리즘 중 가장 좋지 않은 효율을 보인다.
2. 버블 정렬 알고리즘 ( Bubble Sort ) • 버블 정렬 소스 코드 ( 1/2 )
2. 버블 정렬 알고리즘 ( Bubble Sort ) • 버블 정렬 소스 코드 ( 2/2 )
3. 합병 정렬 알고리즘 ( Merge Sort ) • 합병 정렬 알고리즘 < 알고리즘 함수 > Divide 기능 = mergesort( ) Merge 기능 = merge( )
3. 합병 정렬 알고리즘 ( Merge Sort ) • 합병 정렬 알고리즘( 1/2 )
3. 합병 정렬 알고리즘 ( Merge Sort ) • 합병 정렬 알고리즘( 2/2 )
3. 합병 정렬 알고리즘 ( Merge Sort ) • 합병 정렬 알고리즘 • mergesort() 함수의 경우 빨간 부분에 의해 O(logN)의 시간 복잡도를 가진다. • merge() 함수의 경우 빨간 부분에 의해 O(N)의 시간 복잡도를 가진다. • 따라서 합병 정렬 알고리즘은 O(NlogN)의 시간 복잡도를 가진다.
3. 합병 정렬 알고리즘 ( Merge Sort ) • 합병 정렬 소스 코드 ( 1/3 )
3. 합병 정렬 알고리즘 ( Merge Sort ) • 합병 정렬 소스 코드 ( 2/3 )
3. 합병 정렬 알고리즘 ( Merge Sort ) • 합병 정렬 소스 코드 ( 3/3 )
3. 합병 정렬 알고리즘 ( Merge Sort ) • 왜 동적 할당(malloc)을 하는 것인가? • 코딩 좀 한다고 자랑하기 위해서...? No. • 그냥 심심해서...? ㅡ.ㅡ........ No. • 정답은 배열 U와 V의 크기 지정 시 동적 할당 없이 지정 불가하기 때문이다. • int U[h]; int V[m] -> 불가능. ( 변수 생성 시 크기는 상수 지정 ) • 따라서 그림과 같이 동적 할당을 사용해야 함.
cf) 버블 정렬과 합병 정렬 비교 N2 NlogN < 실제 실험 결과 > < 예측 시나리오 >
cf) 시간 측정 방법 • clock_t자료형의 변수 start, end 선언 • 각 함수의 부분 전에 start = clock(); • 각 함수의 부분 후에 end = clock(); • ex) start = clock(); mergesort(n, S); end = clock(); • 그 후 time_t자료형의 변수 d_time에 차이 값 저장 • ex) d_time = ( (double)(end-start) ) /CLOCKS_PER_SEC; • 위 자료형을 선언하기 위해서는 time.h헤더 파일 포함