이산수학 (Discrete Mathematics)

이산수학은 연속적이지 않은 이산적(Discrete) 구조를 다루는 수학 분야입니다. 컴퓨터 과학의 수학적 기초로서 매우 중요하며, 알고리즘 분석, 데이터 구조, 암호학, 인공지능 등 거의 모든 컴퓨터 과학 분야에서 필수적으로 사용됩니다.

이산수학이란?

연속 vs 이산의 차이

"이산(離散)"이라는 단어는 "떨어져 있다"는 뜻입니다. 이산수학은 하나하나 셀 수 있는, 띄엄띄엄 떨어진 값을 다루는 수학입니다. 반대로 미적분학이 다루는 실수는 연속적으로 이어져 있습니다.

쉬운 비유:
  • 연속적인 것 = 수도꼭지에서 나오는 물. 물의 양을 0.001리터, 0.0001리터... 아무리 잘게 쪼개도 그 사이에 또 다른 양이 있습니다.
  • 이산적인 것 = 교실에 있는 학생 수. 35명과 36명 사이에 35.5명이란 것은 없습니다. 딱딱 끊어지는 값만 의미가 있습니다.

수학적으로 정리하면 다음과 같습니다.

구분연속 수학 (Continuous)이산 수학 (Discrete)
대표 대상실수 $\mathbb{R}$, 함수의 극한정수 $\mathbb{Z}$, 그래프, 논리식
핵심 도구미분, 적분, 극한셈(counting), 귀납법, 알고리즘
변화 방식매끄럽게 이어짐단계별로 뚝뚝 끊김
대표 응용물리학, 공학컴퓨터 과학, 정보 보안

컴퓨터는 본질적으로 이산적인 기계입니다. 0과 1, 즉 비트(bit)로 모든 것을 표현하기 때문입니다. 따라서 컴퓨터 과학을 공부하려면 이산수학이 반드시 필요합니다.

이런 곳에 쓰여요

  • 프로그래밍: 반복문, 조건문, 재귀함수의 수학적 기초가 이산수학
  • 데이터베이스: 관계형 DB의 테이블 설계가 관계(Relation) 이론에 기반
  • 네트워크 보안: 공개키 암호, 해시 함수가 이산 구조 위에서 동작
  • 알고리즘 분석: 정렬·탐색 알고리즘의 시간 복잡도를 점화식으로 분석

선수 지식: 논리학, 집합론

난이도: ★★★☆☆ (고등학교 심화)

집합과 관계

관계(Relation)는 두 집합의 카르테시안 곱의 부분집합입니다. 집합 $A$에서 $B$로의 관계 $R$은 $R \subseteq A \times B$입니다.

관계의 성질 - 실생활로 이해하기

집합 $A$ 위의 관계 $R \subseteq A \times A$에 대하여:

성질정의예시
반사적(Reflexive)$\forall a \in A, \; (a, a) \in R$$\leq$, $=$
비반사적(Irreflexive)$\forall a \in A, \; (a, a) \notin R$$<$, $\neq$
대칭적(Symmetric)$(a, b) \in R \implies (b, a) \in R$$=$
반대칭적(Antisymmetric)$(a,b) \in R \wedge (b,a) \in R \implies a = b$$\leq$
추이적(Transitive)$(a,b) \in R \wedge (b,c) \in R \implies (a,c) \in R$$<$, $\leq$
실생활 비유로 이해하기:
  • 반사적: "같은 학교 출신" 관계를 생각해 봅시다. 나는 당연히 나 자신과 같은 학교 출신입니다. 모든 사람이 자기 자신과 관계를 맺으므로 반사적입니다.
  • 대칭적: "친구" 관계를 생각해 봅시다. A가 B의 친구이면, B도 A의 친구입니다. 방향이 없으므로 대칭적입니다. 반면 "좋아한다"는 대칭적이지 않을 수 있습니다 (짝사랑!).
  • 추이적: "조상이다" 관계를 생각해 봅시다. A가 B의 조상이고, B가 C의 조상이면, A는 C의 조상입니다. 관계가 "이어져 나가는" 성질입니다.
  • 반대칭적: "나이가 같거나 많다($\leq$)" 관계에서, A의 나이 $\leq$ B의 나이이고 동시에 B의 나이 $\leq$ A의 나이이면, 두 사람의 나이는 같습니다.

관계 행렬

유한 집합 $A = \{a_1, a_2, \ldots, a_n\}$ 위의 관계 $R$은 관계 행렬(Relation Matrix) $M_R$로 표현할 수 있습니다. $M_R$의 $(i, j)$ 성분은:

$$m_{ij} = \begin{cases} 1 & \text{if } (a_i, a_j) \in R \\ 0 & \text{if } (a_i, a_j) \notin R \end{cases}$$

예시: $A = \{1, 2, 3\}$ 위의 관계 $R = \{(1,1), (1,2), (2,3), (3,1)\}$의 관계 행렬:

$$M_R = \begin{pmatrix} 1 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \end{pmatrix}$$
행렬로 성질 판별: 관계 행렬을 이용하면 관계의 성질을 쉽게 판별할 수 있습니다.
  • 반사적: 주대각선이 모두 1
  • 대칭적: $M_R = M_R^T$ (전치행렬과 동일)
  • 반대칭적: $m_{ij} = 1$이고 $i \neq j$이면 $m_{ji} = 0$

관계의 합성: 관계 $R_1$과 $R_2$의 합성 $R_1 \circ R_2$의 행렬은 부울 행렬 곱으로 구합니다:

$$M_{R_1 \circ R_2} = M_{R_1} \odot M_{R_2}$$

여기서 $\odot$는 부울 행렬 곱(AND를 곱으로, OR를 합으로 사용)입니다.

관계 그래프 (방향 그래프)

관계 $R$은 방향 그래프(Directed Graph)로 시각화할 수 있습니다. 집합의 각 원소를 정점(vertex)으로, 순서쌍 $(a, b) \in R$을 $a$에서 $b$로의 방향 간선(directed edge)으로 나타냅니다.

1 2 3 $R = \{(1,1),(1,2),(2,3),(3,1)\}$

동치 관계와 동치류

반사적이고 대칭적이고 추이적인 관계를 동치 관계(Equivalence Relation)라 하며, 기호 $\sim$으로 나타냅니다. 동치 관계는 집합을 서로소인 동치류(Equivalence Class)로 분할합니다.

쉬운 비유: 동치 관계는 "같은 그룹으로 묶기"입니다. 학교에서 학생들을 반(班)으로 나누는 것을 생각해 봅시다. "같은 반이다"는 관계는 동치 관계입니다:
  • 반사적: 나는 나 자신과 같은 반입니다.
  • 대칭적: A가 B와 같은 반이면, B도 A와 같은 반입니다.
  • 추이적: A와 B가 같은 반이고, B와 C가 같은 반이면, A와 C도 같은 반입니다.
이때 각 이 바로 동치류입니다. 모든 학생은 정확히 하나의 반에 속하고, 반끼리는 겹치지 않습니다.

원소 $a$의 동치류:

$$[a] = \{x \in A \mid x \sim a\}$$

예시: 정수 집합 $\mathbb{Z}$ 위에서 "법 3에 대한 합동(congruence modulo 3)" 관계:

$$a \sim b \iff 3 \mid (a - b)$$

이 관계는 동치 관계이며, 세 개의 동치류를 만듭니다:

모든 정수는 이 세 그룹 중 정확히 하나에 속합니다. 이것이 "분할"입니다.

분할 정리: 집합 $A$ 위의 동치 관계와 $A$의 분할은 일대일 대응됩니다. 즉, 동치 관계가 주어지면 유일한 분할을 결정하고, 분할이 주어지면 유일한 동치 관계를 결정합니다.

순서 관계 (부분순서)

반사적이고 반대칭적이고 추이적인 관계를 부분 순서(Partial Order)라 하며, $(A, \preceq)$를 부분 순서 집합(Poset)이라 합니다.

쉬운 비유: "전순서"는 줄 세우기입니다. 키 순서대로 줄을 세우면 어떤 두 사람이든 누가 더 큰지 비교할 수 있습니다. 반면 "부분 순서"는 과목 이수 체계와 같습니다. "미적분학 I"을 들어야 "미적분학 II"를 들을 수 있고, "선형대수"를 들어야 "수치해석"을 들을 수 있지만, "미적분학 II"와 "수치해석"은 서로 선후 관계가 없습니다 (비교 불가능).

전순서 vs 부분 순서:

하세 다이어그램

하세 다이어그램(Hasse Diagram)은 부분 순서 집합을 간결하게 시각화하는 방법입니다. 반사적 간선과 추이적 간선을 생략하고, 아래에서 위로 순서가 커지도록 배치합니다.

하세 다이어그램을 그리는 규칙은 간단합니다.

  1. 작은 원소를 아래쪽에, 큰 원소를 위쪽에 배치합니다.
  2. "바로 위" 관계만 선으로 연결합니다 (중간에 다른 원소를 거쳐 갈 수 있으면 생략합니다).
  3. 자기 자신으로의 화살표(반사적 간선)는 그리지 않습니다.
  4. 화살표 방향은 "아래에서 위"로 약속하므로, 화살촉도 생략합니다.

예시: 집합 $\{1, 2, 3, 6\}$ 위의 정수의 약수 관계 "$\mid$"에 대한 하세 다이어그램:

6 2 3 1

하세 다이어그램에서 중요한 개념:

용어정의위 예시에서
최대 원소다른 어떤 원소보다도 작지 않은 원소$6$
최소 원소다른 어떤 원소보다도 크지 않은 원소$1$
극대 원소자신보다 큰 원소가 없는 원소$6$
극소 원소자신보다 작은 원소가 없는 원소$1$
상한(LUB, join)부분집합의 최소 상계$\text{lub}(\{2,3\}) = 6$
하한(GLB, meet)부분집합의 최대 하계$\text{glb}(\{2,3\}) = 1$

함수

함수(Function) $f: A \to B$는 $A$의 각 원소에 $B$의 원소를 정확히 하나 대응시키는 관계입니다. 여기서 $A$는 정의역(Domain), $B$는 공역(Codomain)입니다.

함수의 종류

종류조건예시
단사(Injective, 1-1)$f(a) = f(b) \implies a = b$$f(x) = 2x$ ($\mathbb{R} \to \mathbb{R}$)
전사(Surjective, onto)$\forall b \in B, \exists a \in A, f(a) = b$$f(x) = x^3$ ($\mathbb{R} \to \mathbb{R}$)
전단사(Bijective)단사이면서 전사$f(x) = 2x + 1$ ($\mathbb{R} \to \mathbb{R}$)
참고: 두 유한 집합 사이에 전단사 함수가 존재하면 두 집합의 원소 개수가 같습니다. 무한 집합에 대해서도 같은 원리가 적용되며, 이것이 무한 집합의 크기(기수)를 비교하는 방법입니다.

함수의 개수

$|A| = m$, $|B| = n$일 때:

함수의 종류개수조건
모든 함수$n^m$없음
단사 함수$\displaystyle \frac{n!}{(n-m)!} = P(n, m)$$m \leq n$
전사 함수$\displaystyle \sum_{k=0}^{n} (-1)^k \binom{n}{k}(n-k)^m$$m \geq n$
전단사 함수$n!$$m = n$
전사 함수의 수와 스털링 수: $|A| = m$, $|B| = n$일 때 전사 함수의 수는 $n! \cdot S(m, n)$과 같습니다. 여기서 $S(m, n)$은 제2종 스털링 수로, $m$개의 원소를 $n$개의 비공집합으로 분할하는 방법의 수입니다.

합성 함수와 역함수

바닥 함수와 천장 함수

이산수학에서 특히 중요한 두 가지 실수-정수 변환 함수입니다.

바닥 함수(Floor Function): $x$를 넘지 않는 가장 큰 정수

$$\lfloor x \rfloor = \max\{n \in \mathbb{Z} \mid n \leq x\}$$

천장 함수(Ceiling Function): $x$ 이상인 가장 작은 정수

$$\lceil x \rceil = \min\{n \in \mathbb{Z} \mid n \geq x\}$$
$x$$\lfloor x \rfloor$$\lceil x \rceil$
$2.7$$2$$3$
$-1.3$$-2$$-1$
$5.0$$5$$5$
$\pi$$3$$4$

주요 성질:

알고리즘에서의 활용: 이진 탐색에서 중간 인덱스 계산 $\text{mid} = \lfloor (l + r) / 2 \rfloor$, 배열 분할, 해시 함수 설계 등에 바닥/천장 함수가 널리 사용됩니다.

재귀와 점화식

재귀적 정의란?

재귀(Recursion)란 자기 자신을 이용하여 정의하는 방법입니다. "거울 속의 거울"처럼 같은 구조가 반복되는 것이 핵심입니다.

쉬운 비유: 러시아 전통 인형 마트료시카를 떠올려 봅시다. 큰 인형을 열면 안에 작은 인형이 있고, 그 안에 더 작은 인형이 있고... 가장 작은 인형(더 이상 열 수 없는 인형)이 기저 조건(Base Case)이고, "열면 안에 더 작은 인형이 있다"는 규칙이 재귀 단계(Recursive Step)입니다.

재귀적 정의에는 반드시 두 가지가 필요합니다:

  1. 기저 조건(Base Case): 재귀를 멈추는 시작점. 예: $F_0 = 0$, $F_1 = 1$
  2. 재귀 단계(Recursive Step): 이전 값으로 다음 값을 정의하는 규칙. 예: $F_n = F_{n-1} + F_{n-2}$

점화식(Recurrence Relation)은 수열의 항을 이전 항들로 표현하는 식입니다. 알고리즘 분석에서 시간 복잡도를 표현하는 데 핵심적으로 사용됩니다.

피보나치 수열 - 단계별 이해

피보나치 수열은 "앞의 두 수를 더해서 다음 수를 만드는" 가장 유명한 재귀적 수열입니다.

$$F_0 = 0, \; F_1 = 1, \; F_n = F_{n-1} + F_{n-2} \quad (n \geq 2)$$

단계별로 값을 구해 봅시다:

  1. $F_0 = 0$, $F_1 = 1$ (기저 조건, 그냥 외웁니다)
  2. $F_2 = F_1 + F_0 = 1 + 0 = 1$
  3. $F_3 = F_2 + F_1 = 1 + 1 = 2$
  4. $F_4 = F_3 + F_2 = 2 + 1 = 3$
  5. $F_5 = F_4 + F_3 = 3 + 2 = 5$
  6. $F_6 = F_5 + F_4 = 5 + 3 = 8$ ...

처음 몇 항: $0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, \ldots$

자연 속의 피보나치: 해바라기 씨앗의 나선 개수, 파인애플 껍질의 나선, 나뭇가지가 갈라지는 패턴 등 자연에서 피보나치 수가 자주 나타납니다. 연속하는 두 피보나치 수의 비 $F_{n+1}/F_n$은 $n$이 커질수록 황금비 $\phi \approx 1.618$에 가까워집니다.

일반항 (비네 공식):

$$F_n = \frac{1}{\sqrt{5}}\left[\left(\frac{1+\sqrt{5}}{2}\right)^n - \left(\frac{1-\sqrt{5}}{2}\right)^n\right] = \frac{\phi^n - \hat{\phi}^n}{\sqrt{5}}$$

여기서 $\phi = \frac{1+\sqrt{5}}{2} \approx 1.618$ (황금비), $\hat{\phi} = \frac{1-\sqrt{5}}{2} \approx -0.618$입니다.

하노이 탑 - 재귀적 사고의 정수

하노이 탑(Tower of Hanoi)은 대표적인 재귀 문제입니다. 3개의 기둥과 $n$개의 크기가 다른 원반이 있습니다. 모든 원반을 한 기둥에서 다른 기둥으로 옮기되, 한 번에 하나의 원반만, 그리고 큰 원반 위에 작은 원반만 놓을 수 있습니다.

재귀적 전략 (3단계):

  1. 위쪽 $(n-1)$개의 원반을 보조 기둥으로 옮깁니다 → $H_{n-1}$회
  2. 가장 큰 원반을 목표 기둥으로 옮깁니다 → $1$회
  3. 보조 기둥의 $(n-1)$개의 원반을 목표 기둥으로 옮깁니다 → $H_{n-1}$회

이것을 점화식으로 쓰면:

$$H_1 = 1, \quad H_n = 2H_{n-1} + 1$$

풀이: $H_n + 1 = 2(H_{n-1} + 1)$로 놓으면 $H_n + 1 = 2^n$이므로:

$$H_n = 2^n - 1$$
원반 수 $n$123451064
이동 횟수 $H_n$$1$$3$$7$$15$$31$$1023$$\approx 1.8 \times 10^{19}$
전설: 하노이 탑 전설에 따르면, 64개의 금 원반을 모두 옮기면 세상이 끝난다고 합니다. 초당 1회 이동으로 약 5850억 년이 걸립니다.

선형 점화식의 풀이 - 특성방정식

$k$차 선형 상수 계수 동차 점화식:

$$a_n = c_1 a_{n-1} + c_2 a_{n-2} + \cdots + c_k a_{n-k}$$

특성방정식(Characteristic Equation):

$$r^k - c_1 r^{k-1} - c_2 r^{k-2} - \cdots - c_k = 0$$

해의 형태:

근의 유형일반해 기여 항
단근 $r_i$$A_i \cdot r_i^n$
중근 $r$ (중복도 $m$)$(A_1 + A_2 n + A_3 n^2 + \cdots + A_m n^{m-1}) r^n$

예시: $a_n = 5a_{n-1} - 6a_{n-2}$, $a_0 = 1$, $a_1 = 4$를 풀어보겠습니다.

  1. 특성방정식: $r^2 - 5r + 6 = 0 \implies (r-2)(r-3) = 0$
  2. 근: $r_1 = 2$, $r_2 = 3$
  3. 일반해: $a_n = A \cdot 2^n + B \cdot 3^n$
  4. 초기 조건 적용:
    • $a_0 = A + B = 1$
    • $a_1 = 2A + 3B = 4$
  5. $A = -1$, $B = 2$
  6. 답: $a_n = -2^n + 2 \cdot 3^n = 2 \cdot 3^n - 2^n$

비동차 선형 점화식

$a_n = c_1 a_{n-1} + c_2 a_{n-2} + f(n)$ 형태에서, 일반해 = 동차해 + 특수해입니다.

$f(n)$의 형태특수해의 시도 형태
상수 $c$$p$ (상수)
$cn$$pn + q$
$c \cdot d^n$$p \cdot d^n$ ($d$가 특성근이 아닐 때)
$c \cdot d^n$ ($d$가 특성근)$p \cdot n \cdot d^n$

생성함수를 이용한 풀이

생성함수(Generating Function)는 수열 $\{a_n\}$을 멱급수의 계수로 인코딩합니다:

$$G(x) = \sum_{n=0}^{\infty} a_n x^n = a_0 + a_1 x + a_2 x^2 + \cdots$$

피보나치 수열의 생성함수 유도:

  1. $F_n = F_{n-1} + F_{n-2}$, $F_0 = 0$, $F_1 = 1$
  2. $G(x) = \sum F_n x^n$이라 놓으면
  3. $G(x) = xG(x) + x^2 G(x) + x$ (점화식 대입 후 정리)
  4. $G(x)(1 - x - x^2) = x$
$$G(x) = \frac{x}{1 - x - x^2}$$

부분분수 분해 후 각 항의 계수를 구하면 비네 공식을 얻습니다.

생성함수의 위력: 생성함수는 단순한 풀이 도구를 넘어, 두 수열의 합성곱(convolution), 수열의 변환, 조합론적 항등식 증명 등에 폭넓게 활용됩니다.

마스터 정리

분할 정복 알고리즘의 점화식 $T(n) = aT(n/b) + O(n^d)$에서:

조건결론직관
$d < \log_b a$$T(n) = O(n^{\log_b a})$재귀 호출이 지배
$d = \log_b a$$T(n) = O(n^d \log n)$모든 단계 균등
$d > \log_b a$$T(n) = O(n^d)$최상위 단계가 지배

적용 예시:

알고리즘 복잡도

시간 복잡도(Time Complexity)는 입력 크기에 따른 알고리즘의 실행 시간 증가율을 나타냅니다. 공간 복잡도(Space Complexity)는 메모리 사용량의 증가율입니다.

점근 표기법

표기정의의미
$O(g(n))$$\exists c > 0, n_0$ s.t. $f(n) \leq c \cdot g(n)$ for $n \geq n_0$점근 상한
$\Omega(g(n))$$\exists c > 0, n_0$ s.t. $f(n) \geq c \cdot g(n)$ for $n \geq n_0$점근 하한
$\Theta(g(n))$$f(n) = O(g(n))$ 이면서 $f(n) = \Omega(g(n))$점근적으로 정확
$o(g(n))$$\lim_{n \to \infty} f(n)/g(n) = 0$진정한 상한 (strict)
$\omega(g(n))$$\lim_{n \to \infty} f(n)/g(n) = \infty$진정한 하한 (strict)

흔한 복잡도 비교

$$O(1) < O(\log n) < O(\sqrt{n}) < O(n) < O(n \log n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)$$
주의: Big-O 표기법은 상수 계수와 낮은 차수 항을 무시합니다. $3n^2 + 5n + 100 = O(n^2)$입니다. 실무에서는 상수 계수도 중요할 수 있습니다.

정렬 알고리즘의 복잡도

알고리즘최선평균최악공간안정성
버블 정렬$O(n)$$O(n^2)$$O(n^2)$$O(1)$안정
선택 정렬$O(n^2)$$O(n^2)$$O(n^2)$$O(1)$불안정
삽입 정렬$O(n)$$O(n^2)$$O(n^2)$$O(1)$안정
병합 정렬$O(n \log n)$$O(n \log n)$$O(n \log n)$$O(n)$안정
퀵 정렬$O(n \log n)$$O(n \log n)$$O(n^2)$$O(\log n)$불안정
힙 정렬$O(n \log n)$$O(n \log n)$$O(n \log n)$$O(1)$불안정
계수 정렬$O(n + k)$$O(n + k)$$O(n + k)$$O(k)$안정
비교 기반 정렬의 하한: 비교 기반 정렬 알고리즘의 최악의 경우 시간 복잡도 하한은 $\Omega(n \log n)$입니다. 이는 결정 트리 모델에서 $n!$개의 가능한 순열을 구분하려면 최소 $\lceil \log_2(n!) \rceil \approx n \log_2 n$ 번의 비교가 필요하기 때문입니다.

P vs NP 문제

계산 복잡도 이론에서 가장 중요한 미해결 문제입니다.

복잡도 클래스정의예시
P결정적 튜링 기계로 다항 시간 내에 풀 수 있는 문제정렬, 최단 경로, 소수 판별
NP비결정적 튜링 기계로 다항 시간 내에 풀 수 있는 문제
(또는 해가 주어지면 다항 시간 내에 검증 가능한 문제)
SAT, 해밀턴 경로, 부분합
NP-완전NP에 속하면서 NP의 모든 문제가 다항 시간 환원 가능한 문제SAT, 3-SAT, 정점 덮개
NP-난해NP의 모든 문제가 다항 시간 환원 가능한 문제 (NP에 속할 필요 없음)정지 문제, TSP 최적화
NP NP-완전 SAT, 3색칠 해밀턴 경로 P 정렬, 최단경로 소수판별 $P \neq NP$ 가정 시의 관계도
밀레니엄 문제: "P = NP인가?"는 클레이 수학연구소가 선정한 7대 밀레니엄 문제 중 하나입니다. P = NP가 증명되면 현재 사용하는 대부분의 암호 체계가 무력화될 수 있습니다.

명제 논리와 부울 대수 - 컴퓨터와의 관계

명제 논리란?

명제(Proposition)란 참(True) 또는 거짓(False) 중 정확히 하나의 값을 가지는 문장입니다. 예를 들어 "2는 짝수이다"는 참인 명제이고, "3 > 5"는 거짓인 명제입니다.

컴퓨터와 명제 논리의 관계: 컴퓨터는 모든 것을 0과 1로 처리합니다. 여기서 0은 "거짓(False)", 1은 "참(True)"에 해당합니다. 프로그래밍에서 if문의 조건이 바로 명제입니다. 예를 들어 if (age >= 18)는 "나이가 18 이상이다"라는 명제의 참/거짓에 따라 실행 흐름이 달라집니다. 즉, 명제 논리는 컴퓨터가 판단하고 결정하는 방식의 수학적 기초입니다.

명제를 연결하는 논리 연산자는 다음과 같습니다.

연산자기호의미프로그래밍 대응예시
부정(NOT)$\neg p$"$p$가 아니다"!p$\neg$(2는 짝수) = 거짓
논리곱(AND)$p \wedge q$"$p$이고 $q$이다"p && q둘 다 참이어야 참
논리합(OR)$p \vee q$"$p$이거나 $q$이다"p || q하나만 참이어도 참
조건문(IF)$p \to q$"$p$이면 $q$이다"if(p) then q$p$가 거짓이면 항상 참
쌍조건문(IFF)$p \leftrightarrow q$"$p$와 $q$가 같다"p == q둘 다 참이거나 둘 다 거짓이면 참

핵심 포인트: 조건문 $p \to q$에서 $p$가 거짓이면 $q$의 값에 관계없이 전체가 입니다. 이것은 처음에 직관과 다르게 느껴질 수 있지만, "거짓인 전제에서는 무엇이든 따라 나올 수 있다"고 약속한 것입니다. 예를 들어 "만약 내가 새라면, 하늘을 날 수 있다"는 참인 명제입니다 (나는 새가 아니므로).

부울 대수가 컴퓨터의 심장인 이유

명제 논리에서 참/거짓을 1/0으로 바꾸면 그것이 바로 부울 대수입니다. 컴퓨터의 CPU 내부에는 수십억 개의 논리 게이트(Logic Gate)가 있으며, 이 게이트들이 AND, OR, NOT 연산을 물리적으로 수행합니다. 여러분이 키보드를 누르거나 게임을 할 때, 그 모든 계산은 결국 부울 대수의 연산으로 이루어집니다.

부울 대수

부울 대수(Boolean Algebra)는 $\{0, 1\}$ 위에서 AND($\cdot$), OR($+$), NOT($'$) 연산이 정의된 대수 구조입니다.

기본 법칙

법칙AND 형태OR 형태
항등$x \cdot 1 = x$$x + 0 = x$
$x \cdot 0 = 0$$x + 1 = 1$
멱등$x \cdot x = x$$x + x = x$
보수$x \cdot x' = 0$$x + x' = 1$
교환$x \cdot y = y \cdot x$$x + y = y + x$
결합$(x \cdot y) \cdot z = x \cdot (y \cdot z)$$(x + y) + z = x + (y + z)$
분배$x \cdot (y + z) = x \cdot y + x \cdot z$$x + y \cdot z = (x + y)(x + z)$
흡수$x \cdot (x + y) = x$$x + x \cdot y = x$
드모르간$(x \cdot y)' = x' + y'$$(x + y)' = x' \cdot y'$
이중 부정$(x')' = x$

정규형

모든 부울 함수는 두 가지 정규형(Canonical Form)으로 표현할 수 있습니다:

최소항 표기: $n$개 변수의 최소항 $m_i$는 $i$의 이진 표현에 대응합니다. 예를 들어 변수 $x, y, z$에 대해 $m_5 = m_{101_2} = xy'z$입니다.

카르노 맵

카르노 맵(Karnaugh Map)은 부울 함수를 시각적으로 간소화하는 방법입니다. 인접한 칸이 하나의 변수만 다르도록 (그레이 코드 순서) 배치합니다.

2변수 카르노 맵 예시: $f(A, B) = A'B + AB' + AB = A + B$

$B=0$$B=1$
$A=0$$0$$1$
$A=1$$1$$1$

인접한 1을 묶어 간소화합니다: 세로 두 칸 ($B=1$ 열) → $B$, 가로 두 칸 ($A=1$ 행) → $A$. 결과: $f = A + B$.

3변수 카르노 맵 예시: $f(A, B, C) = \sum m(0, 2, 4, 5, 6)$

$A \backslash BC$$00$$01$$11$$10$
$0$$1$$0$$0$$1$
$1$$1$$1$$0$$1$

묶음: $\{m_0, m_2, m_4, m_6\}$ (4칸 묶음) → $C'$, $\{m_4, m_5\}$ → $AB'$.

결과: $f = C' + AB'$

카르노 맵 규칙:
  • 1로 채워진 칸을 $2^k$개씩(1, 2, 4, 8, ...) 직사각형으로 묶습니다.
  • 맵의 상하/좌우는 연결되어 있습니다(토러스 구조).
  • 모든 1을 한 번 이상 포함하되, 가능한 한 큰 묶음을 사용합니다.
  • 4변수까지는 쉽게 적용 가능하며, 5변수 이상은 퀸-맥클러스키 알고리즘을 사용합니다.

논리 게이트

부울 함수는 논리 게이트(Logic Gate)로 물리적으로 구현됩니다.

AND $A \cdot B$ OR $A + B$ NOT $A'$ NAND $(A \cdot B)'$ XOR $A \oplus B$ NOR $(A + B)'$ 기본 논리 게이트
범용 게이트: NAND 게이트와 NOR 게이트는 각각 범용 게이트(Universal Gate)입니다. 즉, NAND 게이트만으로(또는 NOR 게이트만으로) 모든 부울 함수를 구현할 수 있습니다. 이는 실제 디지털 회로 설계에서 매우 중요합니다.

부울 대수는 디지털 회로 설계와 프로그래밍의 조건 논리에서 핵심적으로 사용됩니다.

격자와 부울 대수의 관계

격자(Lattice)는 임의의 두 원소가 상한(join, $\vee$)과 하한(meet, $\wedge$)을 가지는 부분 순서 집합입니다.

격자의 정의와 성질

부분 순서 집합 $(L, \preceq)$이 격자이려면:

격자 연산의 법칙:

법칙$\vee$ (join)$\wedge$ (meet)
교환$a \vee b = b \vee a$$a \wedge b = b \wedge a$
결합$(a \vee b) \vee c = a \vee (b \vee c)$$(a \wedge b) \wedge c = a \wedge (b \wedge c)$
멱등$a \vee a = a$$a \wedge a = a$
흡수$a \vee (a \wedge b) = a$$a \wedge (a \vee b) = a$

격자의 종류

종류추가 조건예시
유계 격자최대원소 $1$과 최소원소 $0$이 존재$(\{1,2,3,6\}, \mid)$
분배 격자$a \wedge (b \vee c) = (a \wedge b) \vee (a \wedge c)$$(\mathcal{P}(S), \subseteq)$
상보 격자유계이고 모든 원소에 보원이 존재$(\mathcal{P}(S), \subseteq)$
부울 격자분배이면서 상보인 격자$(\mathcal{P}(S), \subseteq)$
부울 대수 = 부울 격자: 부울 대수는 정확히 분배이면서 상보인 유계 격자입니다. 즉, $\wedge$는 AND, $\vee$는 OR, 보원은 NOT에 대응합니다. 멱집합 $\mathcal{P}(S)$가 대표적인 부울 대수이며, $|S| = n$이면 원소의 수가 $2^n$인 부울 대수가 됩니다.

스톤 표현 정리: 모든 유한 부울 대수는 어떤 유한 집합의 멱집합 부울 대수와 동형입니다. 따라서 유한 부울 대수의 원소 수는 반드시 $2$의 거듭제곱입니다.

예시: 약수 격자

양의 정수 $n$의 약수 집합에 약수 관계를 부분 순서로 놓으면 격자가 됩니다:

$n$이 서로 다른 소수의 곱(제곱 인수 없음)이면 약수 격자는 부울 대수가 됩니다. 예를 들어 $n = 30 = 2 \cdot 3 \cdot 5$의 약수 격자는 3원소 집합의 멱집합과 동형인 부울 대수입니다.

오토마타와 형식 언어

오토마타 이론(Automata Theory)은 추상적인 계산 기계와 그것이 인식할 수 있는 형식 언어를 연구합니다. 컴파일러, 정규 표현식, 프로토콜 검증 등의 기초 이론입니다.

기본 용어

결정적 유한 오토마톤 (DFA)

DFA(Deterministic Finite Automaton)는 5-튜플 $(Q, \Sigma, \delta, q_0, F)$로 정의됩니다:

구성 요소의미
$Q$유한한 상태의 집합
$\Sigma$입력 알파벳
$\delta: Q \times \Sigma \to Q$전이 함수
$q_0 \in Q$시작 상태
$F \subseteq Q$받아들이는 상태(종결 상태)의 집합

예시: 이진 문자열에서 $1$이 짝수 개인 문자열을 인식하는 DFA:

$q_0$ $q_1$ q1 (상단 화살표) --> $1$ q0 (하단 화살표) --> $1$ $0$ $0$ $q_0$: 짝수 개의 1 (수락), $q_1$: 홀수 개의 1

전이 표:

상태입력 $0$입력 $1$
$\to *\, q_0$$q_0$$q_1$
$q_1$$q_1$$q_0$

($\to$: 시작 상태, $*$: 수락 상태)

비결정적 유한 오토마톤 (NFA)

NFA(Nondeterministic Finite Automaton)는 DFA와 유사하지만:

DFA와 NFA의 동치성: 모든 NFA에 대해 같은 언어를 인식하는 DFA가 존재합니다 (부분집합 구성법). 다만 NFA의 상태 수가 $n$이면 동치 DFA의 상태 수는 최대 $2^n$이 될 수 있습니다.

정규 언어

DFA(또는 NFA)로 인식 가능한 언어를 정규 언어(Regular Language)라 합니다.

정규 표현식과의 관계: 정규 언어는 정규 표현식으로 표현 가능하고, 역도 성립합니다.

정규 표현식의미예시 문자열
$a$문자 $a$ 하나$a$
$R_1 + R_2$합집합$a + b$: $a$ 또는 $b$
$R_1 R_2$연결$ab$: $ab$
$R^*$클리니 스타 (0회 이상 반복)$a^*$: $\varepsilon, a, aa, aaa, \ldots$

정규 언어의 닫힘 성질: 정규 언어는 합집합, 교집합, 여집합, 연결, 클리니 스타 연산에 대해 닫혀 있습니다.

펌핑 보조정리 (Pumping Lemma): 정규 언어가 아닌 언어를 증명하는 도구입니다. 모든 정규 언어 $L$에 대해 어떤 수 $p$(펌핑 길이)가 존재하여, 길이 $p$ 이상의 모든 문자열 $s \in L$은 $s = xyz$로 분할할 수 있되, $|y| > 0$, $|xy| \leq p$, 그리고 모든 $i \geq 0$에 대해 $xy^iz \in L$입니다. 예: $L = \{0^n 1^n \mid n \geq 0\}$은 정규 언어가 아닙니다.

촘스키 계층

촘스키 계층(Chomsky Hierarchy)은 형식 문법을 인식 능력에 따라 4단계로 분류합니다:

유형문법인식기언어 예시
유형 3정규 문법유한 오토마톤 (DFA/NFA)$a^*b^*$
유형 2문맥 자유 문법푸시다운 오토마톤 (PDA)$\{a^n b^n \mid n \geq 0\}$
유형 1문맥 의존 문법선형 유계 오토마톤 (LBA)$\{a^n b^n c^n \mid n \geq 0\}$
유형 0무제한 문법튜링 기계 (TM)재귀 열거 가능 언어
유형 0: 재귀 열거 가능 (튜링 기계) 유형 1: 문맥 의존 (LBA) 유형 2: 문맥 자유 (PDA) 유형 3: 정규 (DFA / NFA) 정규 표현식 $a^*b$, $(0+1)^*00$

각 유형의 포함 관계:

$$\text{정규} \subsetneq \text{문맥 자유} \subsetneq \text{문맥 의존} \subsetneq \text{재귀 열거 가능}$$
실용적 의미: 프로그래밍 언어의 어휘 분석(lexical analysis)은 정규 언어 수준에서, 구문 분석(parsing)은 문맥 자유 문법 수준에서 처리됩니다. 이 계층 구조를 이해하면 컴파일러 설계와 자연어 처리의 이론적 한계를 파악할 수 있습니다.

수학적 귀납법

수학적 귀납법(Mathematical Induction)은 자연수에 관한 명제를 증명하는 강력한 방법입니다. "도미노 쓰러뜨리기"와 완전히 같은 원리입니다.

도미노 비유: 수학적 귀납법은 무한히 긴 도미노 줄을 모두 쓰러뜨리는 것과 같습니다.
  • 1단계 (기초 단계): 첫 번째 도미노를 손으로 밀어 쓰러뜨립니다.
  • 2단계 (귀납 단계): "어떤 도미노가 쓰러지면, 그 다음 도미노도 반드시 쓰러진다"는 것을 보입니다.
이 두 가지가 확인되면, 모든 도미노가 쓰러진다는 것을 확신할 수 있습니다.

수학적 귀납법의 형식

자연수 $n$에 대한 명제 $P(n)$을 증명하려면:

  1. 기초 단계(Base Case): $P(1)$(또는 시작하는 자연수)이 참임을 보입니다.
  2. 귀납 단계(Inductive Step): "$P(k)$가 참이면 $P(k+1)$도 참이다"를 보입니다. 여기서 "$P(k)$가 참이다"라는 가정을 귀납 가설(Inductive Hypothesis)이라 합니다.

이 두 단계가 모두 성립하면, 모든 자연수 $n$에 대해 $P(n)$이 참입니다.

예제 1: 자연수의 합

명제: 모든 자연수 $n \geq 1$에 대하여 $1 + 2 + 3 + \cdots + n = \dfrac{n(n+1)}{2}$

증명:

기초 단계: $n = 1$일 때, 좌변 $= 1$, 우변 $= \frac{1 \cdot 2}{2} = 1$. 양변이 같으므로 성립합니다.

귀납 단계: $n = k$일 때 성립한다고 가정합니다 (귀납 가설):

$$1 + 2 + \cdots + k = \frac{k(k+1)}{2}$$

$n = k + 1$일 때를 보입니다:

$$1 + 2 + \cdots + k + (k+1) = \frac{k(k+1)}{2} + (k+1) = \frac{k(k+1) + 2(k+1)}{2} = \frac{(k+1)(k+2)}{2}$$

이것은 $n = k+1$일 때의 공식과 일치합니다. 따라서 귀납법에 의해 모든 자연수 $n$에 대해 성립합니다. $\blacksquare$

예제 2: 부등식 증명

명제: 모든 자연수 $n \geq 4$에 대하여 $2^n > n^2$

증명:

기초 단계: $n = 4$일 때, $2^4 = 16 > 16 = 4^2$... 아, 같습니다. $n = 5$일 때를 확인합니다: $2^5 = 32 > 25 = 5^2$. 성립합니다. (시작점을 $n = 5$로 조정합니다.)

귀납 단계: $k \geq 5$에서 $2^k > k^2$이 성립한다고 가정합니다.

$$2^{k+1} = 2 \cdot 2^k > 2k^2$$

$2k^2 > (k+1)^2 = k^2 + 2k + 1$임을 보이면 충분합니다. 이는 $k^2 > 2k + 1$, 즉 $k^2 - 2k - 1 > 0$과 같으며, $k \geq 5$이면 $25 - 10 - 1 = 14 > 0$이므로 성립합니다.

따라서 $2^{k+1} > 2k^2 > (k+1)^2$입니다. $\blacksquare$

예제 3: 하노이 탑의 이동 횟수

명제: $n$개의 원반을 가진 하노이 탑의 최소 이동 횟수는 $H_n = 2^n - 1$입니다.

증명:

기초 단계: $n = 1$일 때, $H_1 = 1 = 2^1 - 1$. 성립합니다.

귀납 단계: $H_k = 2^k - 1$이 성립한다고 가정합니다.

$$H_{k+1} = 2H_k + 1 = 2(2^k - 1) + 1 = 2^{k+1} - 2 + 1 = 2^{k+1} - 1$$

따라서 $n = k + 1$일 때도 성립합니다. $\blacksquare$

강한 귀납법

강한 귀납법(Strong Induction)에서는 귀납 단계에서 $P(k)$만 가정하는 것이 아니라, $P(1), P(2), \ldots, P(k)$가 모두 참이라고 가정합니다. 이 방법은 피보나치 수열처럼 두 개 이상의 이전 항에 의존하는 점화식을 다룰 때 유용합니다.

보통 귀납법 vs 강한 귀납법: 사실 두 방법의 증명 능력은 동일합니다. 보통 귀납법으로 증명할 수 있는 것은 강한 귀납법으로도 증명할 수 있고, 그 역도 마찬가지입니다. 다만 강한 귀납법을 쓰면 증명이 더 자연스러운 경우가 많습니다.

수학적 귀납법 심화

약한 귀납법 vs 강한 귀납법 — 비교

약한(보통) 귀납법과 강한 귀납법의 구조를 비교합니다.

구분약한 귀납법 (Weak Induction)강한 귀납법 (Strong Induction)
귀납 가설$P(k)$만 참이라고 가정$P(1), P(2), \ldots, P(k)$ 모두 참이라고 가정
증명 목표$P(k+1)$이 참$P(k+1)$이 참
적합한 경우바로 직전 항만 필요할 때여러 이전 항이 필요하거나 "어떤" 이전 항이 필요할 때
증명 능력동일 — 한쪽으로 증명 가능한 것은 다른 쪽으로도 가능

강한 귀납법 예제: 소인수분해의 존재성

명제: 모든 $n \geq 2$인 정수는 소수들의 곱으로 표현할 수 있습니다.

증명 (강한 귀납법):

기초 단계: $n = 2$는 소수이므로, 자기 자신이 소인수분해입니다.

귀납 단계: $2, 3, \ldots, k$ 모두 소인수분해가 가능하다고 가정합니다 (강한 귀납 가설).

$n = k + 1$을 살펴봅니다.

왜 강한 귀납법이 필수인가: 위 증명에서 $a$와 $b$는 $k$일 수도 있지만, $2$에 가까운 작은 수일 수도 있습니다. "바로 직전" 값 $k$만으로는 $a$, $b$에 대한 귀납 가설을 적용할 수 없으므로, $2$부터 $k$까지 모든 경우를 가정하는 강한 귀납법이 필요합니다.

구조적 귀납법

구조적 귀납법(Structural Induction)은 자연수가 아닌 재귀적으로 정의된 구조(트리, 수식, 문자열 등)에 대해 귀납법을 적용하는 방법입니다.

원리: 재귀적으로 정의된 집합 $S$에 대해 성질 $P$를 증명하려면:

  1. 기초 단계: 기저 원소들에 대해 $P$가 성립함을 보입니다.
  2. 귀납 단계: 재귀 규칙으로 만들어지는 원소가 $P$를 만족함을 보입니다 (구성 요소들이 $P$를 만족한다고 가정).

예제: 이진 트리에서 "잎 노드의 수 $\ell$과 내부 노드의 수 $i$는 $\ell = i + 1$ 관계를 만족합니다."

기초 단계: 노드가 하나뿐인 트리에서 $\ell = 1$, $i = 0$이므로 $\ell = i + 1$ 성립합니다.

귀납 단계: 이진 트리 $T$가 루트와 두 부분 트리 $T_1$, $T_2$로 구성되고, 각각 $\ell_1 = i_1 + 1$, $\ell_2 = i_2 + 1$을 만족한다고 가정합니다. 그러면 $T$의 잎 노드 수 $\ell = \ell_1 + \ell_2$이고, 내부 노드 수 $i = i_1 + i_2 + 1$이므로:

$$\ell = \ell_1 + \ell_2 = (i_1 + 1) + (i_2 + 1) = (i_1 + i_2 + 1) + 1 = i + 1 \quad \blacksquare$$

잘 정렬 원리와 귀납법의 동치

잘 정렬 원리(Well-Ordering Principle): 자연수의 모든 비공 부분집합은 최소 원소를 가집니다.

동치 관계: 다음 세 명제는 서로 동치입니다:
  • (1) 수학적 귀납법의 원리
  • (2) 강한 귀납법의 원리
  • (3) 잘 정렬 원리

잘 정렬 원리 $\Rightarrow$ 귀납법 (증명 스케치):

$P(1)$이 참이고, $P(k) \Rightarrow P(k+1)$이 성립한다고 합시다. 귀류법으로, $P(n)$이 거짓인 $n$이 존재한다고 가정합니다. $S = \{n \in \mathbb{N} \mid P(n) \text{ 거짓}\}$이라 놓으면, 잘 정렬 원리에 의해 $S$에 최소 원소 $m$이 존재합니다. $P(1)$이 참이므로 $m > 1$이고, $m - 1 \notin S$이므로 $P(m - 1)$이 참입니다. 귀납 가정에 의해 $P(m)$도 참이어야 하는데, 이는 $m \in S$에 모순됩니다. $\blacksquare$

재귀관계 심화 — 다양한 풀이 비교

같은 재귀 관계를 여러 방법으로 풀어 보면서, 각 방법의 장단점을 비교합니다.

대상: $a_n = 3a_{n-1} - 2a_{n-2}$, $a_0 = 1$, $a_1 = 3$

풀이 1: 특성방정식

  1. 특성방정식: $r^2 - 3r + 2 = 0 \implies (r - 1)(r - 2) = 0$
  2. 근: $r_1 = 1$, $r_2 = 2$
  3. 일반해: $a_n = A \cdot 1^n + B \cdot 2^n = A + B \cdot 2^n$
  4. 초기 조건: $$A + B = 1, \quad A + 2B = 3 \implies B = 2, \; A = -1$$
  5. 답: $a_n = 2^{n+1} - 1$

풀이 2: 반복 대입 (Iteration)

점화식을 반복 적용하여 패턴을 찾습니다:

$$a_n = 3a_{n-1} - 2a_{n-2}$$

처음 몇 항을 직접 계산합니다:

패턴 관찰: $1, 3, 7, 15, 31, \ldots$ → $a_n = 2^{n+1} - 1$로 추측합니다.

검증 (귀납법): $a_n = 2^{n+1} - 1$이 점화식을 만족하는지 확인합니다:

$$3(2^n - 1) - 2(2^{n-1} - 1) = 3 \cdot 2^n - 3 - 2^n + 2 = 2 \cdot 2^n - 1 = 2^{n+1} - 1 \;\checkmark$$

풀이 3: 생성함수

  1. $G(x) = \sum_{n=0}^{\infty} a_n x^n$으로 놓습니다.
  2. 점화식 양변에 $x^n$을 곱하고 $n \geq 2$에서 합산합니다: $$\sum_{n=2}^{\infty} a_n x^n = 3\sum_{n=2}^{\infty} a_{n-1} x^n - 2\sum_{n=2}^{\infty} a_{n-2} x^n$$
  3. 정리하면: $$G(x) - 1 - 3x = 3x(G(x) - 1) - 2x^2 G(x)$$ $$G(x)(1 - 3x + 2x^2) = 1$$ $$G(x) = \frac{1}{(1-x)(1-2x)}$$
  4. 부분분수 분해: $$G(x) = \frac{-1}{1-x} + \frac{2}{1-2x} = -\sum_{n=0}^{\infty} x^n + 2\sum_{n=0}^{\infty} (2x)^n$$
  5. $x^n$의 계수: $a_n = -1 + 2 \cdot 2^n = 2^{n+1} - 1$ $\checkmark$
세 풀이법의 비교:
  • 특성방정식: 가장 체계적이고 빠릅니다. 선형 상수 계수 점화식에 최적입니다.
  • 반복 대입: 직관적이지만 패턴을 발견한 뒤 별도로 검증해야 합니다.
  • 생성함수: 강력하지만 계산이 복잡합니다. 비선형이나 변수 계수 점화식에도 적용 가능한 것이 장점입니다.

중근이 있는 경우: $a_n = 4a_{n-1} - 4a_{n-2}$

초기 조건: $a_0 = 1$, $a_1 = 4$

특성방정식: $r^2 - 4r + 4 = (r - 2)^2 = 0$ → 중근 $r = 2$

일반해: $a_n = (A + Bn) \cdot 2^n$

초기 조건 적용: $A = 1$, $2A + 2B = 4 \implies B = 1$

$$a_n = (1 + n) \cdot 2^n = (n + 1) \cdot 2^n$$

관계 심화 — 동치관계와 분할의 대응

동치관계 $\Leftrightarrow$ 분할 정리 (상세 증명)

이 정리는 동치관계와 분할이 "동전의 양면"이라는 것을 보여줍니다.

방향 1: 동치관계 $\Rightarrow$ 분할

집합 $A$ 위의 동치관계 $\sim$이 주어졌을 때, 동치류의 모임 $\{[a] \mid a \in A\}$는 $A$의 분할입니다.

증명해야 할 것:

  1. 각 동치류는 비공집합: $a \in [a]$ (반사적 성질)
  2. 동치류들의 합집합이 $A$: 모든 $a \in A$에 대해 $a \in [a]$
  3. 서로 다른 동치류는 서로소: $[a] \cap [b] \neq \emptyset$이면 $[a] = [b]$임을 보입니다. $c \in [a] \cap [b]$이면, $c \sim a$이고 $c \sim b$이므로, 대칭적·추이적 성질에 의해 $a \sim b$이고, 따라서 $[a] = [b]$입니다.

방향 2: 분할 $\Rightarrow$ 동치관계

$A$의 분할 $\{A_1, A_2, \ldots\}$이 주어졌을 때, "$a \sim b$ $\iff$ 같은 블록에 속한다"로 정의하면 $\sim$은 동치관계입니다.

증명: 반사적(자기 자신과 같은 블록), 대칭적(같은 블록 관계는 방향 무관), 추이적(같은 블록은 전이됨)이 모두 명백합니다. $\blacksquare$

분할 수와 벨 수

$n$-원소 집합의 서로 다른 분할의 수를 벨 수(Bell Number) $B_n$이라 합니다.

$$B_0 = 1, \quad B_{n+1} = \sum_{k=0}^{n} \binom{n}{k} B_k$$
$n$0123456
$B_n$$1$$1$$2$$5$$15$$52$$203$

순서관계 심화 — 반순서와 전순서

전순서(Total Order, Linear Order)반순서(Partial Order)의 핵심 차이는 비교 가능성입니다.

반사슬과 사슬:

딜워스 정리(Dilworth's Theorem): 유한 부분 순서 집합에서, 최대 반사슬의 크기 = 사슬로 분해할 때의 최소 사슬 수

하세 다이어그램 심화 예시: $D_{30}$의 약수 격자

$30$의 약수 집합 $\{1, 2, 3, 5, 6, 10, 15, 30\}$ 위의 약수 관계 하세 다이어그램입니다.

30 6 10 15 2 3 5 1 $D_{30}$의 하세 다이어그램 (부울 대수)

$30 = 2 \cdot 3 \cdot 5$는 제곱 인수가 없으므로, 이 약수 격자는 $\{2, 3, 5\}$의 멱집합 부울 대수 $\mathcal{P}(\{2,3,5\})$와 동형입니다. 사슬의 예: $\{1, 2, 6, 30\}$, 반사슬의 예: $\{2, 3, 5\}$.

격자 이론 기초

격자의 대수적 정의

격자는 두 가지 관점에서 정의할 수 있습니다:

  1. 순서론적 정의: 임의의 두 원소가 상한과 하한을 가지는 부분 순서 집합
  2. 대수적 정의: 두 이항 연산 $\vee$와 $\wedge$가 교환·결합·흡수 법칙을 만족하는 대수 구조

두 정의는 동치입니다. 순서론적 격자에서 $a \preceq b \iff a \wedge b = a \iff a \vee b = b$로 순서를 복원할 수 있습니다.

분배 격자와 비분배 격자

분배 격자(Distributive Lattice)는 분배 법칙이 성립하는 격자입니다:

$$a \wedge (b \vee c) = (a \wedge b) \vee (a \wedge c)$$

분배 격자가 아닌 대표적인 예는 두 가지입니다:

격자구조특징
$M_3$ (다이아몬드)$\{0, a, b, c, 1\}$, $a, b, c$가 서로 비교 불가능$a \wedge (b \vee c) \neq (a \wedge b) \vee (a \wedge c)$
$N_5$ (펜타곤)$\{0, a, b, c, 1\}$, $0 < a < b < 1$, $0 < c < 1$, $c$와 $a, b$ 비교 불가비분배이면서 비모듈러
버코프 정리: 격자가 분배 격자인 것은 $M_3$도 $N_5$도 부분 격자로 포함하지 않는 것과 동치입니다. 이것은 분배 격자를 판별하는 간단한 기준입니다.

모듈러 격자

모듈러 격자(Modular Lattice)는 $a \preceq c$이면 $a \vee (b \wedge c) = (a \vee b) \wedge c$가 성립하는 격자입니다. 모든 분배 격자는 모듈러 격자이지만, 역은 성립하지 않습니다 ($M_3$는 모듈러이지만 비분배). $N_5$가 부분 격자로 나타나지 않는 격자가 정확히 모듈러 격자입니다.

부울 대수와 부울 함수 심화

퀸-맥클러스키 알고리즘

퀸-맥클러스키(Quine-McCluskey) 알고리즘은 카르노 맵의 체계적인 확장으로, 5변수 이상의 부울 함수도 최소화할 수 있습니다.

알고리즘 단계:

  1. 1단계 — 소항(Prime Implicant) 찾기: 최소항을 1의 개수별로 그룹화하고, 인접 그룹의 항끼리 하나의 비트만 다른 경우를 결합합니다. 더 이상 결합할 수 없는 항이 소항입니다.
  2. 2단계 — 소항 표(Prime Implicant Chart): 행에 소항, 열에 최소항을 배치하고, 각 소항이 포함하는 최소항에 표시합니다.
  3. 3단계 — 필수 소항(Essential Prime Implicant) 선택: 어떤 최소항이 오직 하나의 소항에만 포함되면, 그 소항은 필수입니다.
  4. 4단계 — 나머지 처리: 아직 포함되지 않은 최소항을 최소 비용으로 포함하도록 소항을 선택합니다.

예시: $f(A, B, C, D) = \sum m(0, 1, 2, 5, 6, 7, 8, 9, 10, 14)$

그룹 (1의 수)최소항이진
0$m_0$$0000$
1$m_1, m_2, m_8$$0001, 0010, 1000$
2$m_5, m_6, m_9, m_{10}$$0101, 0110, 1001, 1010$
3$m_7, m_{14}$$0111, 1110$

결합 과정을 거쳐 소항을 구하고, 필수 소항을 선택하여 최소식을 얻습니다.

논리 회로 설계 예제

부울 함수 $f = AB' + A'BC$를 NAND 게이트만으로 구현하는 과정입니다.

  1. 원래 식: $f = AB' + A'BC$
  2. 이중 부정 적용: $f = ((AB')' \cdot (A'BC)')' $
  3. 각 항을 NAND로 변환: NAND$(x, y) = (xy)'$이므로, $AB' = $ NAND(NAND$(A, B'), $ NAND$(A, B'))$처럼 분해합니다.
NAND의 범용성: 모든 기본 게이트를 NAND로 구현할 수 있습니다:
  • NOT $A$ = NAND$(A, A)$
  • AND$(A, B)$ = NAND(NAND$(A, B)$, NAND$(A, B)$)
  • OR$(A, B)$ = NAND(NAND$(A, A)$, NAND$(B, B)$)

알고리즘 분석 심화

마스터 정리의 증명 스케치

$T(n) = aT(n/b) + cn^d$에서 재귀 트리를 분석합니다.

총 비용은 등비급수의 합입니다:

$$T(n) = cn^d \sum_{i=0}^{\log_b n} \left(\frac{a}{b^d}\right)^i$$

분할 정복 재귀 트리 다이어그램

$cn^d$ 비용: $cn^d$ $c(n/b)^d$ $c(n/b)^d$ $\cdots$ $c(n/b)^d$ $\times a$개 $a$개 $c(n/b^2)^d$ $c(n/b^2)^d$ $c(n/b^2)^d$ $\times a^2$개 $\vdots$ $\vdots$ $\vdots$ 깊이 $\log_b n$: 잎 노드 $a^{\log_b n} = n^{\log_b a}$개 총 비용 = $cn^d \displaystyle\sum_{i=0}^{\log_b n}(a/b^d)^i$

분할상환 분석 (Amortized Analysis)

분할상환 분석(Amortized Analysis)은 일련의 연산에서 최악의 경우 단일 연산 비용이 아니라, 연산 시퀀스의 평균 비용을 분석하는 기법입니다.

세 가지 주요 방법이 있습니다:

방법핵심 아이디어적합한 경우
총합법 (Aggregate)$n$번 연산의 총 비용 $T(n)$을 구한 뒤 $T(n)/n$을 계산단순한 패턴
회계법 (Accounting)싼 연산에 "저축"하고, 비싼 연산에서 "인출"직관적 설명
포텐셜법 (Potential)포텐셜 함수 $\Phi$를 정의하여 $\hat{c}_i = c_i + \Phi(D_i) - \Phi(D_{i-1})$복잡한 데이터 구조

예시: 동적 배열 (Dynamic Array)

크기가 꽉 찰 때마다 용량을 2배로 늘리는 배열에서 $n$번 삽입의 분할상환 비용:

실용적 의미: 동적 배열의 개별 삽입은 최악의 경우 $O(n)$이지만, 분할상환 분석에 의해 평균적으로 $O(1)$입니다. 이것이 C++의 std::vector, 파이썬의 list, 자바의 ArrayList가 효율적인 이유입니다.

오토마타 이론 심화

NFA에서 DFA로의 변환: 부분집합 구성법

부분집합 구성법(Subset Construction)은 NFA를 동치인 DFA로 변환하는 체계적인 방법입니다.

알고리즘:

  1. DFA의 각 상태는 NFA 상태의 부분집합입니다.
  2. 시작 상태: NFA 시작 상태의 $\varepsilon$-폐포
  3. 전이: $\delta'(S, a) = \bigcup_{q \in S} \varepsilon\text{-closure}(\delta(q, a))$
  4. 수락 상태: NFA 수락 상태를 포함하는 모든 부분집합

예시: NFA가 상태 $\{q_0, q_1, q_2\}$를 가지고 $q_0$에서 입력 $a$에 대해 $\{q_0, q_1\}$로 전이하면, DFA에서는 $\{q_0\} \xrightarrow{a} \{q_0, q_1\}$이 됩니다.

상태 폭발: NFA 상태가 $n$개이면 DFA 상태는 최대 $2^n$개가 될 수 있습니다. 실제로는 도달 불가능한 상태가 많아 훨씬 적은 경우가 대부분이지만, 최악의 경우 지수적 증가가 불가피합니다.

정규 표현식 → NFA 변환 (톰슨 구성법)

정규 표현식의 기본 연산 각각을 NFA 구성 요소로 변환합니다:

정규 표현식NFA 구성
문자 $a$$q_0 \xrightarrow{a} q_f$
합집합 $R_1 + R_2$새 시작/종결 상태에서 $R_1$, $R_2$의 NFA로 $\varepsilon$-전이
연결 $R_1 R_2$$R_1$의 종결에서 $R_2$의 시작으로 $\varepsilon$-전이
클리니 스타 $R^*$새 시작/종결 + $R$의 종결에서 시작으로 $\varepsilon$-전이 루프

DFA 최소화

DFA 최소화(DFA Minimization)는 동치인 최소 상태 수의 DFA를 찾는 과정입니다.

호프크로프트 알고리즘 (개요):

  1. 상태를 수락/비수락 두 그룹으로 분할합니다.
  2. 같은 그룹의 두 상태가 어떤 입력에 대해 다른 그룹으로 전이하면, 그 그룹을 분리합니다.
  3. 더 이상 분리할 수 없을 때까지 반복합니다.
  4. 각 최종 그룹이 최소 DFA의 한 상태가 됩니다.
마이힐-네로드 정리: 정규 언어 $L$에 대한 최소 DFA의 상태 수는 $L$에 의해 유도되는 마이힐-네로드 동치류의 수와 같습니다. 이 정리는 최소 DFA의 유일성(동형을 제외하고)을 보장합니다.

형식 언어 심화 — 촘스키 계층의 구분

문맥 자유 문법 (CFG)

문맥 자유 문법(Context-Free Grammar)은 $G = (V, \Sigma, R, S)$으로 정의됩니다:

예시: $\{a^n b^n \mid n \geq 0\}$을 생성하는 CFG:

$$S \to aSb \mid \varepsilon$$

유도 과정: $S \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaaSbbb \Rightarrow aaabbb = a^3 b^3$

푸시다운 오토마톤 (PDA)

푸시다운 오토마톤(Pushdown Automaton)은 유한 오토마톤에 스택을 추가한 것입니다. 스택 덕분에 "개수를 세는" 능력이 생깁니다.

PDA vs DFA/NFA:

특성DFA/NFAPDA
메모리유한 (상태만)무한 (스택)
인식 능력정규 언어문맥 자유 언어
결정적/비결정적동치비결정적 PDA가 더 강력
주의: DFA와 NFA는 인식 능력이 동등하지만, DPDA(결정적 PDA)와 NPDA(비결정적 PDA)는 인식 능력이 다릅니다. $\{ww^R \mid w \in \{a,b\}^*\}$ (회문)은 NPDA로 인식 가능하지만, DPDA로는 인식할 수 없습니다.

각 유형의 언어 예시와 증명 전략

언어유형증명 도구
$\{w \in \{0,1\}^* \mid w\text{에 }00\text{이 부분문자열}\}$정규DFA 구성
$\{0^n 1^n \mid n \geq 0\}$문맥 자유 (정규 아님)CFG: $S \to 0S1 \mid \varepsilon$, 펌핑 보조정리로 비정규 증명
$\{a^n b^n c^n \mid n \geq 0\}$문맥 의존 (문맥 자유 아님)문맥 자유 언어 펌핑 보조정리로 비문맥자유 증명
$\{w \mid w\text{를 인코딩한 TM이 정지}\}$재귀 열거 가능 (재귀 아님)정지 문제의 비결정가능성

계산 복잡도 이론

결정 문제와 복잡도 클래스

결정 문제(Decision Problem)는 "예/아니오"로 답할 수 있는 문제입니다. 복잡도 클래스는 결정 문제를 해결하는 데 필요한 자원(시간, 공간)에 따라 분류합니다.

다항 시간 환원

문제 $A$가 문제 $B$로 다항 시간 환원 가능(Polynomial-time reducible)하다는 것은, 다항 시간에 계산 가능한 함수 $f$가 존재하여:

$$x \in A \iff f(x) \in B$$

이것을 $A \leq_P B$로 표기합니다. 직관적으로, "A를 풀 수 있으면 B도 풀 수 있다" 또는 "$B$가 $A$보다 적어도 같은 정도로 어렵다"는 의미입니다.

NP-완전의 정의와 쿡-레빈 정리

문제 $L$이 NP-완전(NP-complete)이려면:

  1. $L \in \text{NP}$
  2. 모든 $L' \in \text{NP}$에 대해 $L' \leq_P L$ (NP-난해)

쿡-레빈 정리 (Cook-Levin Theorem): SAT (부울 만족 가능성 문제)는 NP-완전입니다.

NP-완전 문제의 연쇄: SAT가 NP-완전임이 증명된 후, 다른 문제들은 기존 NP-완전 문제로부터의 환원을 통해 NP-완전성을 증명합니다: $$\text{SAT} \leq_P \text{3-SAT} \leq_P \text{CLIQUE} \leq_P \text{VERTEX-COVER} \leq_P \cdots$$

대표적인 NP-완전 문제

문제설명
SAT부울 식의 만족 가능성
3-SAT절 당 리터럴 3개인 CNF-SAT
CLIQUE그래프에서 크기 $k$인 완전 부분그래프 존재 여부
정점 덮개 (Vertex Cover)크기 $k$ 이하의 정점 집합으로 모든 간선 덮기
해밀턴 경로모든 정점을 정확히 한 번 방문하는 경로 존재 여부
부분합 (Subset Sum)부분집합의 원소 합이 목표값과 같은지 여부
그래프 색칠$k$-색칠 가능 여부 ($k \geq 3$)

P vs NP에 대한 현재 상태

$P = NP$인지 $P \neq NP$인지는 2026년 현재까지 미해결입니다. 대다수의 컴퓨터 과학자는 $P \neq NP$라고 추측하지만, 증명은 아직 없습니다.

$P = NP$라면:

$P \neq NP$라면:

NP-완전 환원 다이어그램

SAT 3-SAT CLIQUE 독립 집합 부분합 정점 덮개 해밀턴 경로 화살표: 다항 시간 환원 ($\leq_P$) 방향

코딩 이론 기초

코딩 이론(Coding Theory)은 데이터 전송 및 저장 과정에서 발생하는 오류를 검출하고 정정하는 수학적 방법을 연구합니다.

기본 개념

용어정의
부호어(Codeword)부호화된 유효한 비트열
해밍 거리 $d(x, y)$두 비트열에서 다른 비트의 수
최소 거리 $d_{\min}$임의의 두 부호어 사이 해밍 거리의 최솟값
$[n, k, d]$ 부호길이 $n$, 메시지 $k$ 비트, 최소 거리 $d$

오류 검출/정정 능력:

패리티 검사 부호

가장 간단한 오류 검출 부호입니다. $k$ 비트 메시지에 1비트의 패리티 비트를 추가합니다.

해밍 부호

해밍 부호(Hamming Code)는 1비트 오류를 검출하고 정정할 수 있는 부호입니다.

해밍(7,4) 부호: $[7, 4, 3]$ 부호로, 4비트 메시지에 3비트의 검사 비트를 추가합니다.

메시지 비트: $d_1, d_2, d_3, d_4$ (위치 3, 5, 6, 7)

검사 비트: $p_1, p_2, p_3$ (위치 1, 2, 4)

부호어 $[p_1, p_2, d_1, p_3, d_2, d_3, d_4]$에서 검사 비트는 다음 조건을 만족합니다:

$$p_1 = d_1 \oplus d_2 \oplus d_4$$ $$p_2 = d_1 \oplus d_3 \oplus d_4$$ $$p_3 = d_2 \oplus d_3 \oplus d_4$$

오류 정정 과정:

  1. 수신된 비트열로 증후군(syndrome) $s_1, s_2, s_3$을 계산합니다.
  2. $s_3 s_2 s_1$을 이진수로 해석하면 오류 위치를 나타냅니다.
  3. $s_3 s_2 s_1 = 000$이면 오류 없음, 그 외에는 해당 위치의 비트를 반전합니다.

예시: 메시지 $1010$을 해밍(7,4)로 부호화합니다.

만약 5번째 비트에서 오류가 발생하여 $[1, 0, 1, 1, \mathbf{1}, 1, 0]$을 수신했다면:

해밍 부호의 오류 검출/정정 원리

해밍(7,4) 부호의 구조 $p_1$ 검사 $p_2$ 검사 $p_3$ 검사 $p_1$ 위치 1 $p_2$ 위치 2 $d_1$ 위치 3 $p_3$ 위치 4 $d_2$ 위치 5 $d_3$ 위치 6 $d_4$ 위치 7
해밍 부호의 의의: 해밍 부호는 정보 이론의 선구적 결과 중 하나로, 리처드 해밍이 1950년에 발표하였습니다. 오늘날 ECC 메모리, QR 코드, 통신 프로토콜 등에서 오류 정정 부호의 기본 원리로 활용되고 있습니다.

해밍 한계와 길버트-바시햄로프 한계

$[n, k, d]$ 이진 부호가 존재하기 위한 이론적 한계입니다:

참고자료