ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Chpater 1 & 2
    알고리즘 설계와 분석 2022. 10. 24. 20:34
    728x90

    Insertion sort

    INSERTION-Sort(A, n)
    for i = 2 to n
    	key = A[i]
        //Insert A[i] into the sorted subarray A[1 : i-1].
        j = i - 1
        while j>0 and A[j] > key
        	A[j+1] = A[j]
            j = j-1
            
       	A[j+1] = key

     A[1 : i-1] 까지는 loop invariant(루프 불변성) 이 성립됩니다.

    적은 수의 원소를 정렬할 때는 효율적임

     

    Merge Sort

    Merge(A, p, q, r)
    	n_l = q - p + 1 //중간점 p를 중심으로 왼쪽
        n_r = r - q // 중간점 p + 1부터 q까지 오른쪽
        새 배열 L[0..n_l - 1] and R[0 : n_r-1] 
        for i = 0 to n_l - 1 //A[p:q]를 L[0:n_l - 1] 에 copy
        	L[i] = A[p + i]
    	for j = 0 to n_r - 1 //A[q+1:r] 을 R[0:n_r - 1]에 copy
        	R[j] = A[q + j + 1]
       i = 0 // L 배열을 가리킬 index
       j = 0 // R 배열을 가리킬 index
       k = p // A 배열을 가리킬 index
       
    while i < n_l and j < n_r
       	if L[i] <= R[j] //오른쪽 배열이 더 크므로 왼쪽 배열을 먼저 집어넣음
        	A[k] = L[i]
            i = i + 1
    	else A[k] = R[j]
        	j = j + 1
    	k = k + 1
        
    while i < n_l //L배열에 남은 것들 다 A배열에 넣기
    	A[k] = L[i]
        i = i + 1
        k = k + 1
    while j < n_r //R 배열에 남은 것들 다 A 배열에 넣기
    	A[k] = R[j]
        j = j + 1
        k = k + 1
    MERGE-Sort(A, p, r)
    	if p >= r
        	return
    	q = ceil((p + r) / 2)
        MERGE-Sort(A, p, q)
        MERGE-Sort(A, q + 1, r)
        
        MERGE(A, p, q, r)

    시간복잡도는 O(nlogn)

    '알고리즘 설계와 분석' 카테고리의 다른 글

    Chapter 25 : Matching in Bipartite Graphs  (0) 2022.12.19
    Chapter 24 : Maximum Flow  (0) 2022.12.14
    Chapter 15 (Greedy Algorithms)  (0) 2022.12.11
    Chapter 3  (0) 2022.10.24
Designed by Tistory.