2023-1학기
알고리즘
중간고사
학번: ________________
이름: ________________
시험 응시 전, 아래의 학생 명예선서 문구를 따라 쓰시오.
“
“
1. 아래 각 문구에 대해 참, 거짓(T 또는 F로 기재)을 판별하시오.
(총 10점, 각 문항에 대해 맞으면 +2점 틀리면 -1점 적용)
!
① !(#) = 25! ( ") + 2## 의 점근적 복잡도는 Θ(## )이다. (
)
② Θ(## )정렬은 모두 best case에서도 Θ(## )의 시간 복잡도를 갖는다. (
)
③ 레드-블랙 트리의 삭제 과정에서 삭제된 노드의 유일한 자식 노드 ,, ,의 부모
노드 -, ,의 형제 노드 ., .의 왼쪽 및 오른쪽 자식 노드 /, 0 모두가 블랙 노드이
면 .의 색상을 레드로 바꾸고 -에 대해 다시 레드-블랙 특성을 수선한다. (
④ 해시 테이블의 적재율은 어떤 충돌 방지 기법을 써도 1을 넘을 수 없다. (
)
)
⑤ 기수 정렬의 각 자릿수 정렬에서는 모든 종류의 stable sort를 활용할 수 있다.
(
)
2. 1부터 2 + 1 까지의 수들 중 단 하나의 수만 뺀 나머지 수들이 정렬되지 않은 상태
로 들어있는 길이 #인 배열에 대해서 어떤 수가 빠져있는지를 구하는 알고리즘을 의
사코드로 작성하고 점근적 평균 시간 복잡도를 구하라. 가능한 한 가장 연산 시간이
효율적인 알고리즘으로 작성할 것. (총 20점)
3. 아래의 정렬 관련 질문들에 대해 답하시오. (각 8점, 총 24점)
① Pivot을 무작위로 설정하는 퀵 정렬의 의사코드를 작성하시오. 단, 퀵 정렬에서
필요한 Partition 알고리즘은 세부사항은 생략하고 단순 호출로 처리하도록 하며
본 강의에서 배운대로 구간의 맨 뒤쪽 원소를 Pivot으로 사용하는 Partition 알고
리즘을 사용하여야 함.
② 아래 배열을 대상으로 힙 정렬을 수행하는 과정을 힙 구조로 나타내시오. 초기
상태 트리, buildHeap 이후의 힙, 매번 루트에서의 heapify가 수행된 후의 힙에
대해서만 나타내면 됨 (총 6개의 힙 답안 필요, 각각의 답안 힙은 알아보기 쉽게
선을 두르는 등 표시 바람)
[6, 2, 5, 13, 4, 7]
③ 안정성을 유지하는 계수 정렬(Counting sort) 과정을 의사 코드로 작성하시오.
4. 아래와 같은 상태의 레드-블랙 트리에 키값 10을 가진 노드를 추가하였을 때, 추가
한 초기 상태와 레드-블랙 트리가 수선되는 과정 및 최종 트리를 나타내시오. NIL 리
프 노드들은 표시되지 않았으나 있다고 가정함. 레드 노드는 노드 옆에 R이라는 글
씨를 써서 표시 가능함. (총 20점)
5. 총 10칸의 크기를 가지며 나누기 방법으로 주소를 구하는 해시 테이블에 대해 각 개
방주소 방법으로 아래 원소들을 입력했을 때의 상태를 표현하시오. (각 6점, 총 18점)
[0, 10, 1, 4, 7, 14]
① ℎ(,) = , mod 10, ℎ$ (,) = (ℎ(,) + :) mod 10
답안:
0
1
2
3
4
5
6
7
8
9
② ℎ(,) = , mod 10, ℎ$ (,) = (ℎ(,) + 2: # + :) mod 10
답안:
0
1
2
3
4
5
6
7
8
9
③ ℎ(,) = , mod 10, <(,) = 2 + (, mod 7), ℎ$ (,) = (ℎ(,) + : ⋅ <(,)) mod 10
답안:
0
1
2
3
4
5
6
7
8
9
6. 트리를 사용한 집합의 처리와 관련하여 아래의 연산들이 수행되었을 때, 랭크를 이
용한 Union을 사용한다고 가정하고 매 Union의 결과를 나타내고 최종 트리의 높이
를 구하시오. (총 8점)
Make-Set(a) -> Make-Set(b) -> Make-Set(c) -> Make-Set(d) -> Make-Set(e) ->
Make-Set(f) -> Union(a, b) -> Union (c, a) -> Union(d, e) -> Union(c, e) ->
Union(d, f)
2024-1학기
알고리즘
중간고사
학번: ________________
이름: ________________
시험 응시 전, 아래의 학생 명예선서 문구를 따라 쓰시오.
“
“
!
1. . ∑"#$(# ⋅ log #) 는 Θ(*% ⋅ log *) 임을 증명하시오. +, Ω 모두에 대해 증명이 필
요함. (총 20점)
2. 아래의 정렬 관련 질문들에 대해 답하시오. (각 10점, 총 30점)
① 아래의 배열을 힙 정렬로 정렬하는 과정을 보이시오. 정렬 과정 중간마다 힙이
구성되고 힙 오른쪽에는 원소들이 정렬된 배열 상태를 모두 표기하여야 함.
[12, 70, 25, 55, 40]
② 10억 개 이상의 많은 개수의 실수들을 정렬해야 하는데 100개 이하의 원소가 정
렬이 되지 않은 상태이다. 이 때 정렬이 필요한 100개 이하의 원소들은 전체 원
소들 중 가장 작은 k개의 숫자들에 포함(! ≪ #)된다고 할 때, 정렬을 Θ(*)에 수
행할 수 있는 방법을 제시하시오. 구체적인 의사코드가 나오지 않아도 되며 교과
목에서 다룬 내용을 응용하여 방법을 제시하면 됨. 실수의 표현 범위가 너무 넓
어 기수 정렬, 계수 정렬 및 버킷 정렬은 사용할 수 없다고 가정한다.
③ 아래 배열을 기수 정렬(radix sort)로 정렬하는 과정을 보이시오. 단, 각 자리수의
정렬마다 bucket들의 상태 또한 같이 서술하여야 함.
[213, 56, 8, 457, 190]
3. 아래에 레드 블랙 트리의 노드 삭제 후 하위 경로 상의 블랙 노드 수에 문제가 생긴
노드를 x로 두고 수선하는 알고리즘을 나타내었다. 본 문제에서는 노드 x가 왼쪽 자
식일 경우만 고려할 때, 빈 칸에 들어갈 의사코드를 작성하시오. (총 20점)
4. 아래의 B-트리에서 키 18을 삭제하는 과정에 대해 나타내시오. 키 삭제를 위한 키
위치 변경, 키 삭제, 노드 병합이 발생할 때마다 각 상태의 트리를 그려야 함. 이 때
한 노드의 최대 키 개수 k는 4라고 가정한다. (10점)
5. 총 10칸의 크기를 가지며 아래와 같은 곱하기 방법으로 주소를 구하는 해시 테이블
에 대해 아래의 개방주소 방법으로 아래 원소들을 입력했을 때의 상태를 표현하시오.
(10점)
[0, 9, 1, 4, 7, 14, 34]
ℎ(&) = ⌊10 ⋅ (& ⋅ 0.7 mod 1)⌋, ℎ! (&) = (ℎ(&) + 36 " ) mod 10
답안:
0
1
2
3
4
5
6
7
8
9
6. 집합의 처리에서 7번의 Make-Set, Union, Find-Set 연산이 있고, 그 중 #번의 MakeSet이 있는 상황을 가정한다. 연결 리스트를 사용하고 무게를 고려한 Union을 활용
할 때의 점근적 수행 시간과 트리를 사용하고 랭크를 이용한 Union을 활용할 때(경
로 압축은 사용하지 않는 상태)의 점근적 수행 시간을 각각 서술하고,
1) 7 ≤ # ⋅ log #일 때와 2) 7 ≫ # 일 때 두 방식의 수행 시간을 비교하시오. (10점)