증가율의 상한(upper bound)을 나타내는 표기법은 무엇입니까?
- ABig Omega
- BLittle omega
- CBig O
- DBig Theta
힌트 보기
- "최대"를 의미합니다.
- 오답 두 개를 지웠습니다. 남은 두 개 중 하나가 정답입니다.
정답과 설명 보기
이것이 답인 이유
O는 상한, Ω는 하한, Θ는 정확한 한계(tight bound)를 나타냅니다.
힌트와 해설이 있는 무료 알고리즘과 복잡도 객관식 연습 문제, 세 가지 난이도: 핵심 용어와 사실, 개념 적용, 사례와 분석.
n이 클 때 가장 빠르게 증가하는 복잡도 클래스는 무엇입니까?
잘하셨어요. 다음 문제를 풀어 볼까요?다음 문제로 넘어갈까요? 모든 주제에서 매일 새 문제 5개.
알고리즘은 문제를 푸는 유한한 정확한 단계의 목록입니다. 예를 들어 목록을 정렬하거나 전화번호부에서 이름을 찾는 것입니다.
두 알고리즘이 같은 문제를 풀어도 걸리는 시간은 크게 다를 수 있습니다. 복잡도는 입력이 커질 때 작업량이 어떻게 늘어나는지를 나타냅니다.
입력의 크기를 n이라고 합니다. 정렬할 항목의 수, 목록의 길이, 그래프의 노드 수 등입니다.
1000쪽짜리 전화번호부에서 이름을 찾는다고 생각해 보세요. 모든 쪽을 읽으면 최대 1000단계가 걸립니다. 가운데를 펴서 매번 절반으로 줄이면 약 10단계가 걸립니다.
시간 복잡도는 단계 수를 셉니다. 공간 복잡도는 추가 메모리를 셉니다. 둘 다 n의 함수로 씁니다.
보통은 최악의 경우를 봅니다. 크기 n인 모든 입력 중 작업량이 가장 많은 경우입니다. 때로는 평균의 경우나 최선의 경우를 묻기도 합니다.
답: 4초. n을 두 배로 하면 n²에 2² = 4가 곱해지므로 시간은 약 1초에서 약 4초가 됩니다. 2초는 선형 증가의 답이고, 8초는 n³의 답입니다.
빅오 표기는 n이 클 때 중요한 것만 남깁니다. 상수 인수를 버리고 가장 빨리 커지는 항만 남깁니다.
n = 1000이면 n² 항은 3 000 000이고 5n은 5000에 불과합니다. 작은 항은 전체를 거의 바꾸지 못합니다.
이 부류들은 느린 증가에서 빠른 증가 순으로 계속 나타납니다.
빅오는 상한입니다. 작업량이 기껏해야 이만큼 빨리 늘어납니다. Ω(빅 오메가)는 하한이고, Θ(세타)는 상한이면서 하한인 정확한 경계입니다.
로그의 밑은 빅오에서 중요하지 않습니다. 밑이 다른 로그는 상수배만큼만 다르기 때문입니다.
답: O(n²). n이 크면 n² 항이 지배하고 상수 인수 2는 버립니다. O(n)은 잘못된 항을 남긴 것이고, O(2n²)은 상수를 버리지 않은 것입니다.
몇몇 알고리즘은 거의 모든 강의에 나옵니다. 그 복잡도를 사실로 외워 두세요.
재귀 함수는 더 작은 입력으로 자기 자신을 호출하다가, 직접 답할 수 있는 기저 사례에 이릅니다. 실행 시간은 점화식으로 씁니다.
알아 둘 만한 설계 아이디어가 셋 있습니다. 분할 정복은 나누고, 풀고, 합칩니다. 탐욕은 단계마다 지역적으로 가장 좋은 선택을 합니다. 동적 계획법은 겹치는 부분 문제의 답을 저장해 한 번만 계산합니다.
답: O(n²). 피벗이 나쁘면 매번 한쪽에 n − 1개가 남아 O(n²)이 됩니다. O(n log n)은 평균의 경우이며 병합 정렬의 최악의 경우입니다.
코드 조각의 시간 복잡도를 구하려면:
이론 문제에서는 먼저 그것이 설명하는 알고리즘이나 아이디어의 이름을 말하고, 그다음 복잡도와 조건(정렬된 입력, 음이 아닌 가중치, 겹치는 부분 문제)을 떠올리세요.
모든 단계를 따라가 보세요. 다음 단계를 열기 전에 미리 예측해 보세요.
이 코드의 시간 복잡도는 무엇인가? for i = 1 to n: (j = 1; while j < n: j = j × 2)
n은 반복문이 올라가는 수입니다.
i는 1부터 n까지 1씩 늘어나므로 바깥 반복문은 n번 돕니다.
j는 1, 2, 4, 8, …의 값을 가지며 n에 이르면 멈춥니다. k번 돌고 나면 j = 2k이므로 반복문은 약 log₂ n번 돈 뒤 멈춥니다.
안쪽 반복문이 바깥 반복문 안에 있으므로 횟수를 곱합니다.
n = 1024이면 안쪽 반복문은 log₂ 1024 = 10번 돌므로 본문은 1024 · 10 = 10 240번 실행됩니다. 이는 n² = 1 048 576보다 훨씬 작습니다.
O(n log n)
답: O(n). 차례로 이어지는 반복문은 더합니다. n + n = 2n이고 상수는 버리므로 O(n)입니다. O(n²)은 한 반복문이 다른 반복문 안에 있을 때만 맞습니다.
P는 다항 시간에 풀 수 있는 문제를 포함합니다. NP는 해를 다항 시간에 확인할 수 있는 문제를 포함합니다. P의 모든 문제는 NP에 속하며, P = NP인지는 아직 알려지지 않았습니다.
증가율의 상한(upper bound)을 나타내는 표기법은 무엇입니까?
O는 상한, Ω는 하한, Θ는 정확한 한계(tight bound)를 나타냅니다.
정렬된 배열에서 양 끝에서 포인터를 하나씩 안쪽으로 움직이며 합이 목표값인 두 원소를 찾습니다. 시간 복잡도는 무엇입니까?
합이 너무 작으면 왼쪽 포인터가 오른쪽으로, 너무 크면 오른쪽 포인터가 왼쪽으로 움직이므로 단계는 최대 n번입니다.
슈트라센 알고리즘은 절반 크기 블록의 재귀 곱셈을 8번 대신 7번 사용하여 행렬을 곱합니다. 실행 시간은 얼마입니까?
a = 7, b = 2이므로 nlog₂ 7이 O(n²)의 덧셈 작업을 지배하여 약 n2.81이 됩니다.
두 알고리즘이 같은 문제를 풀어도 걸리는 시간은 크게 다를 수 있습니다. 복잡도는 입력이 커질 때 작업량이 어떻게 늘어나는지를 나타냅니다.
입력의 크기를 n이라고 합니다. 정렬할 항목의 수, 목록의 길이, 그래프의 노드 수 등입니다.
모든 문제에는 선택지가 네 개 있고, 정답은 하나뿐입니다. 막혔나요? 먼저 작은 힌트를 열고, 필요할 때만 전체 해설을 보세요.