알고리즘, 그래프, 동적 계획법과 관계형 데이터베이스

정렬, 그래프 알고리즘, 동적 계획법, SQL, 인덱스, 트랜잭션을 복습하는 학부 수준의 카드 32개. 기본 프로그래밍, 자료구조, SQL 지식을 전제로 한다.

Level
basic
Languages
ko → ko
Cards
32
Markdown
알고리즘, 그래프, 동적 계획법과 관계형 데이터베이스 (.md)

Flashcards (32)

#Front (Term / Question)Back (Definition / Answer)ExampleMultiple-Choice Options
1팬텀 리드란 무엇이며 어떻게 막는가?다른 트랜잭션이 변경을 커밋한 뒤 같은 술어 질의를 반복하면 조건에 맞는 행 집합이 달라지는 현상이다. 표준 모델의 SERIALIZABLE은 이를 막는다. PostgreSQL의 REPEATABLE READ 등 일부 구현은 더 낮은 수준에서도 막는다.
2SQL Server의 행 저장소에서 클러스터형과 비클러스터형 인덱스는 어떻게 다른가?클러스터형 인덱스는 테이블 행을 키 순서로 저장하므로 테이블당 최대 하나이다. 비클러스터형 인덱스는 자체 키와 행 위치 지정자를 가지며 다른 열을 포함할 수도 있다. 용어와 저장 세부 사항은 데이터베이스 시스템마다 다르다.
3일반적인 동기 커밋에서 PostgreSQL WAL은 지속성을 어떻게 지원하는가?관련 로그 레코드는 커밋 완료를 알리기 전과 변경된 데이터 페이지를 쓰기 전에 영속 저장소에 도달한다. 시스템이 비정상 종료된 뒤 WAL로 데이터 페이지에 빠진 변경을 재실행할 수 있다. 비동기 커밋에서는 최근 완료를 알린 트랜잭션을 잃을 수 있다.
4더티 리드란 무엇이며 이를 처음 막는 표준 격리 수준은 무엇인가?다른 트랜잭션의 미커밋 데이터를 읽는 것이다. 그 트랜잭션이 나중에 롤백되는지와는 무관하다. READ COMMITTED 이상의 표준 격리 수준은 더티 리드를 금지한다.
5PostgreSQL에서 기본 키와 외래 키는 어떻게 다른가?기본 키는 유일하고 NULL이 아닌 값으로 행을 식별한다. 외래 키는 해당 NULL 규칙에 따라 참조 대상 키 값과의 일치를 요구한다. 같은 테이블이나 다른 테이블의 적격 UNIQUE 키 또는 기본 키를 참조할 수 있다.
6너비 우선 탐색은 가중치 없는 그래프에서 어떻게 최단 경로를 찾는가?BFS는 FIFO 큐를 사용해 간선 수로 잰 거리 순서대로 정점을 탐색한다. 큐에 넣을 때 정점을 표시하면 중복 방문을 피한다. 도달 가능한 정점으로 처음 발견한 경로는 간선 수가 최소이다.
7계수 정렬이나 기수 정렬은 언제 선형 시간으로 동작할 수 있는가?계수 정렬은 k개 값을 갖는 범위의 키 n개에 O(n+k)가 든다. 기수 b로 d번의 안정적인 자릿수 정렬을 하는 기수 정렬은 O(d(n+b))이다. 이 매개변수들이 허용할 때만 선형이며, 단순 비교 외에 키의 구조를 활용한다.
8표준 배열 병합 정렬의 동작과 시간·공간 복잡도는 무엇인가?두 절반을 재귀적으로 정렬한 뒤 선형 시간에 병합한다. 비교가 상수 시간이라고 가정하면 표준 구현은 Θ(n log n) 시간과 O(n) 보조 공간을 사용한다.
9최장 공통 부분 수열(LCS) 길이의 동적 계획법 점화식은 무엇인가?L[i,j]를 길이가 i,j인 접두 부분의 LCS 길이라 하자. L[0,j]=L[i,0]=0이다. 마지막 문자가 같으면 L[i,j]=1+L[i−1,j−1], 다르면 L[i,j]=max(L[i−1,j],L[i,j−1])이다. 전체 표의 시간과 공간은 O(mn)이다.
10탐욕 알고리즘과 동적 계획법은 어떻게 다른가?탐욕 알고리즘은 국소 선택을 확정하며, 그 선택들이 최적해를 보존한다는 증명이 필요하다. DP는 점화식으로 대안을 비교하고 부분 문제 결과를 재사용한다. 전역 최적해에는 올바른 모델과 점화식이 필요하며, 단순히 'DP'라고 부르는 것으로 충분하지 않다.
11반복 불가능한 읽기란 무엇이며 어떤 표준 격리 수준이 막는가?다른 트랜잭션이 갱신이나 삭제를 커밋한 뒤 같은 행을 다시 읽으면 값이 바뀌거나 행이 사라지는 현상이다. REPEATABLE READ와 SERIALIZABLE은 이를 금지한다.
12다익스트라 알고리즘의 유효 조건과 흔한 힙 구현의 시간 경계는 무엇인가?간선 가중치가 음수가 아니면 잠정 거리가 가장 작은 정점을 반복해서 확정한다. 인접 리스트와 이진 최소 힙 구현은 O((V+E) log V) 시간이 걸린다. 음수 간선은 확정된 거리에 관한 논증을 무효로 만들 수 있다.
13정수 용량 W에 대한 표준 0/1 배낭 점화식은 무엇인가?D[i,w]를 앞의 i개 물건으로 용량 w에서 얻는 최대 가치라 하고 무게 wᵢ는 양의 정수라 하자. D[0,w]=0으로 둔다. wᵢ>w이면 D[i−1,w]를 복사하고, 아니면 max(D[i−1,w],vᵢ+D[i−1,w−wᵢ])를 택한다. O(NW) 시간은 의사다항 시간이다.
14제1·제2·제3정규형의 조건은 무엇인가?1NF: 속성값이 원자적이다. 2NF: 1NF이며 비주요 속성이 어떤 후보 키의 진부분집합에도 종속되지 않는다. 3NF: 1NF이며 모든 비자명한 종속성 X→A에서 X가 슈퍼키이거나 A가 주요 속성이다. 주요 속성은 적어도 하나의 후보 키에 속한다.
15위상 순서란 무엇이며 칸 알고리즘은 어떻게 구하는가?DAG에서 모든 간선 u→v에 대해 u가 v보다 앞에 온다. 진입 차수가 0인 정점을 반복해서 출력하고 그 출발 간선들을 지우며, 새로 진입 차수가 0이 된 정점을 큐에 넣는다. 출력한 정점 수가 V보다 적으면 방향 그래프에 사이클이 있다.
16인접 행렬과 일반적인 인접 리스트는 어떻게 다른가?정점 V개, 간선 E개일 때 행렬은 O(V²) 공간을 쓰고 간선 존재를 O(1)에 확인한다. 리스트는 O(V+E) 공간을 쓴다. 정렬되지 않은 리스트에서 간선 (u,v)를 찾는 시간은 O(deg(u))이며, deg(u)는 그 리스트의 길이이다.
17메모이제이션과 상향식 동적 계획법은 어떻게 다른가?메모이제이션은 필요한 부분 문제를 보통 재귀적으로 계산하고 결과를 저장한다. 상향식 DP는 의존하는 값이 이미 준비된 순서로 상태를 계산하며 보통 표를 채운다.
18깊이 우선 탐색으로 방향 그래프의 사이클을 어떻게 검출하는가?DFS는 재귀나 명시적 스택으로 깊이 탐색한다. 현재 DFS 경로에서 아직 활성 상태인 정점으로 가는 간선은 역방향 간선이며 방향 사이클의 존재를 증명한다. 단순히 이전에 방문한 정점으로 가는 간선만으로는 충분하지 않다.
19그룹화 질의에서 WHERE와 HAVING은 어떻게 다른가?WHERE는 그룹화 전에 입력 행을 필터링한다. HAVING은 생성된 그룹을 필터링하며 COUNT(*)>1 같은 집계 조건을 쓸 수 있다.
20안정 정렬이란 무엇인가?키가 같은 항목들의 원래 상대적 순서를 보존하는 정렬이다. 병합 정렬은 동률일 때 왼쪽 항목을 먼저 택하면 안정적으로 만들 수 있다. 표준 제자리 퀵 정렬은 대체로 불안정하다. 안정성은 구현에 달려 있다.
21트랜잭션의 ACID 속성은 각각 무엇을 뜻하는가?원자성: 효과가 전부 적용되거나 전혀 적용되지 않는다. 일관성: 올바른 트랜잭션이 제약과 애플리케이션 불변 조건을 보존한다. 격리성: 동시 동작이 선택한 격리 수준을 따른다. 지속성: 설정된 데이터베이스 보장 범위의 장애 뒤에도 커밋한 효과가 남는다.
22제자리 힙 정렬의 최악 시간과 추가 공간 복잡도는 무엇인가?힙 구성에는 O(n), 이후 모든 추출 작업에는 합계 O(n log n)이 걸린다. 입력 배열에서 반복적 하향 조정을 쓰면 최악 시간은 O(n log n), 추가 공간은 O(1)이다.
23퀵 정렬이 Θ(n²) 시간이 걸릴 수 있는 이유와 무작위화의 효과는 무엇인가?서로 다른 키 중 최솟값을 매번 피벗으로 고르는 것처럼 매우 불균형한 분할이 반복되면 이차 작업량이 생긴다. 키가 모두 다르거나 중복 키를 적절히 처리하면 무작위 피벗의 기대 시간은 O(n log n)이다. 세 값의 중앙값 선택은 유용한 휴리스틱이지만 최악의 경우를 보장하지는 않는다.
24이진 탐색에는 어떤 조건이 필요하며 언제 O(log n) 시간이 걸리는가?비교 순서대로 정렬된 데이터에서 탐색 구간을 반복해서 절반으로 줄인다. 인덱스 접근이 O(1)이고 비교가 상수 시간인 배열에서 n개 원소를 탐색하면 O(log n) 시간이 걸린다.
25삽입 정렬은 어떻게 동작하며 거의 정렬된 입력의 시간은 무엇에 좌우되는가?각 항목을 정렬된 접두 부분에 삽입한다. 인접 항목 이동이나 교환을 쓰는 일반 구현은 역전 쌍의 수를 I라 할 때 Θ(n+I) 시간이 걸린다. I=O(n)이면 선형 시간이다. 입력이 작다는 사실만으로 최악 Θ(n²) 경계가 달라지지는 않는다.
26벨만–포드 알고리즘은 음수 간선을 어떻게 처리하고 도달 가능한 음수 사이클을 어떻게 검출하는가?모든 간선을 최대 V−1회 완화한다. 도달 가능한 정점에서 추가로 거리를 개선할 수 있으면 시작점에서 도달 가능한 음수 사이클이 있다. 최악 시간은 O(VE)이다. 그 사이클에서 도달 가능한 정점은 유한한 최단 경로 비용이 없다.
27INNER JOIN과 LEFT JOIN은 어떻게 다른가?INNER JOIN은 조인 조건을 만족하는 행 조합을 반환한다. LEFT JOIN은 일치하지 않는 왼쪽 행도 각각 유지하고 오른쪽 열에 NULL을 넣는다. 오른쪽에 여러 일치 행이 있으면 하나의 왼쪽 행에서 여러 출력 행이 생길 수 있다.
282단계 잠금(2PL)의 두 단계는 무엇인가?확장 단계: 잠금을 해제하지 않고 획득한다. 축소 단계: 새 잠금을 획득하지 않고 해제한다. 적절히 충돌하는 읽기·쓰기 잠금을 쓰면 2PL은 스케줄의 충돌 직렬 가능성을 보장하지만 교착 상태는 여전히 가능하다.
29SQL SELECT 질의의 단순화한 논리적 처리 순서는 무엇인가?CTE, 윈도 함수, 집합 연산이 없는 질의에서는 FROM/JOIN → WHERE → GROUP BY와 집계 → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT/OFFSET이다. 이는 논리 모델이며 옵티마이저의 실제 물리 실행 순서와 같을 필요는 없다.
30B+ 트리가 데이터베이스 인덱스와 범위 질의에 유용한 이유는 무엇인가?높은 분기 수가 트리를 얕게 유지해 페이지 접근을 줄인다. 정렬된 키와 연결된 잎이 범위 스캔을 지원한다. 해시 인덱스는 동등 비교 검색용이며 같은 정렬 기반 범위 접근을 본질적으로 제공하지는 않는다.
31크루스칼과 프림 알고리즘은 최소 신장 트리를 어떻게 만드는가?연결된 가중 무방향 그래프에서 크루스칼은 간선을 가중치 오름차순으로 보고 Union–Find로 사이클을 만드는 간선을 거부한다. 프림은 트리 내부와 외부 정점을 잇는 최소 가중치 간선을 반복 선택해 하나의 트리를 확장한다.
32동적 계획법은 왜 여러 최적화 문제에 유용한가?최적 부분 구조가 있으면 전체 최적해를 부분 문제의 최적해로 표현할 수 있다. 부분 문제가 겹칠 때 답을 저장하면 반복 작업을 피한다. 상태 정의와 점화식이 원래 문제를 올바르게 나타내야 한다.