<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>김신건의 로그 - 위키 / discrete-math</title><description>&apos;discrete-math&apos; 카테고리 위키 페이지 최신 업데이트</description><link>https://shinkeonkim.com/</link><language>ko-KR</language><item><title>그래프 이론 기초 (Graph Theory)</title><link>https://shinkeonkim.com/wiki/discrete-math/graph-theory-basics/</link><guid isPermaLink="true">https://shinkeonkim.com/wiki/discrete-math/graph-theory-basics/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;정의&quot;&gt;정의&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;그래프 (Graph)&lt;/strong&gt; $G = (V, E)$ 는 &lt;strong&gt;정점 (vertex)&lt;/strong&gt; 의 집합 $V$ 와 &lt;strong&gt;간선 (edge)&lt;/strong&gt; 의 집합 $E$ 로 이루어진 이산 구조입니다. 간선은 정점의 쌍 (또는 순서쌍) 을 나타내며 정점 간 관계를 표현합니다.&lt;/p&gt;
&lt;p&gt;컴퓨터 과학의 다양한 분야 (네트워크, 자료구조, 알고리즘, 데이터베이스, 컴파일러) 에서 그래프는 근본 언어.&lt;/p&gt;
&lt;h2 id=&quot;그래프의-종류&quot;&gt;그래프의 종류&lt;/h2&gt;
&lt;h3 id=&quot;무향-그래프-undirected-graph&quot;&gt;무향 그래프 (Undirected Graph)&lt;/h3&gt;
&lt;p&gt;간선이 방향 없음. ${u, v}$ 로 표기 (순서 무관).&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A((A)) --- B((B))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A --- C((C))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  B --- D((D))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  C --- D&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;유향-그래프-directed-graph-digraph&quot;&gt;유향 그래프 (Directed Graph, Digraph)&lt;/h3&gt;
&lt;p&gt;간선이 방향 있음. $(u, v)$ 순서쌍.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A((A)) --&gt; B((B))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A --&gt; C((C))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  B --&gt; D((D))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  C --&gt; D&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;가중-그래프-weighted-graph&quot;&gt;가중 그래프 (Weighted Graph)&lt;/h3&gt;
&lt;p&gt;각 간선에 가중치 (weight, cost). 최단 경로 알고리즘의 대상.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A((A)) --&gt;|5| B((B))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A --&gt;|3| C((C))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  B --&gt;|2| D((D))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  C --&gt;|8| D&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;다중-그래프-vs-단순-그래프&quot;&gt;다중 그래프 vs 단순 그래프&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;단순 그래프&lt;/strong&gt;: 자기 루프 없고 다중 간선 없음&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;다중 그래프&lt;/strong&gt;: 두 정점 간 여러 간선 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;완전-그래프-k_n&quot;&gt;완전 그래프 $K_n$&lt;/h3&gt;
&lt;p&gt;모든 정점 쌍이 연결. $|E| = \binom{n}{2}$.&lt;/p&gt;
&lt;h3 id=&quot;이분-그래프-bipartite-graph&quot;&gt;이분 그래프 (Bipartite Graph)&lt;/h3&gt;
&lt;p&gt;정점을 두 집합 $X, Y$ 로 나눌 수 있고 모든 간선은 $X$ 와 $Y$ 사이:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  X1((X1)) --- Y1((Y1))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  X1 --- Y2((Y2))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  X2((X2)) --- Y2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  X3((X3)) --- Y3((Y3))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  style X1 fill:#fee2e2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  style X2 fill:#fee2e2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  style X3 fill:#fee2e2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  style Y1 fill:#dbeafe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  style Y2 fill:#dbeafe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  style Y3 fill:#dbeafe&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;정리&lt;/strong&gt;: 그래프가 이분 그래프 $\iff$ &lt;strong&gt;홀수 길이 사이클이 없음&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;차수-degree&quot;&gt;차수 (Degree)&lt;/h2&gt;
&lt;p&gt;정점 $v$ 의 &lt;strong&gt;차수&lt;/strong&gt; $\deg(v)$ = 인접한 간선의 수.&lt;/p&gt;
&lt;h3 id=&quot;악수-정리-handshake-theorem&quot;&gt;악수 정리 (Handshake Theorem)&lt;/h3&gt;
&lt;p&gt;$$
\sum_{v \in V} \deg(v) = 2|E|
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;직관&lt;/strong&gt;: 각 간선은 두 정점의 차수에 각 1씩 기여.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;따름&lt;/strong&gt;: 홀수 차수 정점의 개수는 짝수.&lt;/p&gt;
&lt;h3 id=&quot;유향-그래프의-inout-degree&quot;&gt;유향 그래프의 in/out-degree&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$\deg^-(v)$ = 들어오는 간선 수 (in-degree)&lt;/li&gt;
&lt;li&gt;$\deg^+(v)$ = 나가는 간선 수 (out-degree)&lt;/li&gt;
&lt;li&gt;$\sum \deg^-(v) = \sum \deg^+(v) = |E|$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;경로와-사이클&quot;&gt;경로와 사이클&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;경로 (path)&lt;/strong&gt;: 정점의 나열 $v_0, v_1, \ldots, v_k$ 로 각 $(v_i, v_{i+1})$ 이 간선.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;단순 경로&lt;/strong&gt;: 정점이 중복되지 않음.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;사이클 (cycle)&lt;/strong&gt;: 시작과 끝이 같은 경로 ($v_0 = v_k$).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;단순 사이클&lt;/strong&gt;: 시작/끝 외에 중복 정점 없음.&lt;/p&gt;
&lt;h3 id=&quot;연결성-connectivity&quot;&gt;연결성 (Connectivity)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;연결 그래프&lt;/strong&gt;: 임의의 두 정점 사이에 경로 존재 (무향).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;연결 요소 (connected component)&lt;/strong&gt;: 최대 연결 부분 그래프.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;유향 그래프&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;약한 연결&lt;/strong&gt;: 무향으로 만들면 연결&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;강한 연결&lt;/strong&gt;: 모든 순서쌍 $(u, v)$ 에 대해 $u \to v$ 경로 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;트리-tree&quot;&gt;트리 (Tree)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;연결이며 사이클이 없는&lt;/strong&gt; 무향 그래프.&lt;/p&gt;
&lt;h3 id=&quot;성질&quot;&gt;성질&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$|V|$ 개 정점의 트리는 $|V| - 1$ 개 간선을 가짐&lt;/li&gt;
&lt;li&gt;임의의 두 정점 사이에 &lt;strong&gt;유일한&lt;/strong&gt; 경로 존재&lt;/li&gt;
&lt;li&gt;어떤 간선을 제거하면 연결성 잃음&lt;/li&gt;
&lt;li&gt;어떤 두 정점 사이에 간선을 추가하면 사이클 생김&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;트리와-관련-개념&quot;&gt;트리와 관련 개념&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;뿌리 트리 (rooted tree)&lt;/strong&gt;: 하나의 정점을 뿌리로 지정&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;잎 (leaf)&lt;/strong&gt;: 차수 1인 정점&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;이진 트리&lt;/strong&gt;: 각 정점의 자식이 최대 2개&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;완전 이진 트리&lt;/strong&gt;: 모든 잎이 같은 깊이&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;자세한 것은 [[trees|트리 (알고리즘)]] 참조.&lt;/p&gt;
&lt;h2 id=&quot;그래프-표현&quot;&gt;그래프 표현&lt;/h2&gt;
&lt;h3 id=&quot;인접-행렬-adjacency-matrix&quot;&gt;인접 행렬 (Adjacency Matrix)&lt;/h3&gt;
&lt;p&gt;$|V| \times |V|$ 행렬. $A[i][j] = 1$ 이면 간선 존재.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;장점&lt;/strong&gt;: $O(1)$ 간선 조회.
&lt;strong&gt;단점&lt;/strong&gt;: $O(|V|^2)$ 공간. 희소 그래프에 낭비.&lt;/p&gt;
&lt;h3 id=&quot;인접-리스트-adjacency-list&quot;&gt;인접 리스트 (Adjacency List)&lt;/h3&gt;
&lt;p&gt;각 정점에 인접 정점 리스트.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;장점&lt;/strong&gt;: $O(|V| + |E|)$ 공간.
&lt;strong&gt;단점&lt;/strong&gt;: 특정 간선 존재 확인 $O(\deg(v))$.&lt;/p&gt;
&lt;h3 id=&quot;간선-리스트&quot;&gt;간선 리스트&lt;/h3&gt;
&lt;p&gt;간선의 순서쌍 목록. 크루스칼 알고리즘 등에 활용.&lt;/p&gt;
&lt;h2 id=&quot;그래프-탐색&quot;&gt;그래프 탐색&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;깊이 우선 탐색 (DFS)&lt;/strong&gt;: 스택 (재귀). 사이클 감지, 위상 정렬, SCC.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;너비 우선 탐색 (BFS)&lt;/strong&gt;: 큐. 최단 거리 (간선 가중치 1).&lt;/p&gt;
&lt;p&gt;자세한 것은 [[dfs|DFS]], [[bfs|BFS]] 참조.&lt;/p&gt;
&lt;h2 id=&quot;그래프-색칠&quot;&gt;그래프 색칠&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;색칠 (coloring)&lt;/strong&gt;: 인접한 정점이 다른 색을 갖도록 색을 부여.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;색깔 수 최소 = 색채 수 (chromatic number)&lt;/strong&gt; $\chi(G)$.&lt;/p&gt;
&lt;h3 id=&quot;대표-예&quot;&gt;대표 예&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;이분 그래프: $\chi = 2$&lt;/li&gt;
&lt;li&gt;$K_n$: $\chi = n$&lt;/li&gt;
&lt;li&gt;홀수 사이클: $\chi = 3$&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;4색-정리&quot;&gt;4색 정리&lt;/h3&gt;
&lt;p&gt;평면 그래프는 항상 4개 이하 색으로 색칠 가능. 지도 색칠 문제.&lt;/p&gt;
&lt;h3 id=&quot;응용&quot;&gt;응용&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;레지스터 할당&lt;/strong&gt;: 컴파일러가 변수를 레지스터에 배치. 겹치는 라이프타임 = 인접 간선.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;스케줄링&lt;/strong&gt;: 시험 시간표 (같은 학생 = 인접 = 다른 시간).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주파수 할당&lt;/strong&gt;: 인접 기지국 = 다른 주파수.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;오일러-경로와-해밀턴-경로&quot;&gt;오일러 경로와 해밀턴 경로&lt;/h2&gt;
&lt;h3 id=&quot;오일러-경로-eulerian-path&quot;&gt;오일러 경로 (Eulerian Path)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;모든 간선을 정확히 한 번씩&lt;/strong&gt; 지나는 경로.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;정리&lt;/strong&gt;: 오일러 경로 존재 $\iff$ 홀수 차수 정점 수가 0 또는 2. (2이면 그 두 정점이 시작/끝).&lt;/p&gt;
&lt;h3 id=&quot;해밀턴-경로-hamiltonian-path&quot;&gt;해밀턴 경로 (Hamiltonian Path)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;모든 정점을 정확히 한 번씩&lt;/strong&gt; 지나는 경로.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;결정 문제 NP-완전&lt;/strong&gt; (오일러와 대조적).&lt;/p&gt;
&lt;h2 id=&quot;매칭-matching&quot;&gt;매칭 (Matching)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;매칭&lt;/strong&gt;: 간선의 부분집합으로, 어떤 두 간선도 공통 정점을 갖지 않음.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;완벽 매칭&lt;/strong&gt;: 모든 정점이 매칭에 포함.&lt;/p&gt;
&lt;h3 id=&quot;이분-그래프-매칭&quot;&gt;이분 그래프 매칭&lt;/h3&gt;
&lt;p&gt;이분 그래프 $G = (X \cup Y, E)$ 에서 $|X|$ 만큼의 매칭.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hall 의 정리&lt;/strong&gt;: $X$ 를 모두 매칭 $\iff$ 임의의 $S \subseteq X$ 에 대해 $|N(S)| \geq |S|$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;응용&lt;/strong&gt;: 작업 할당, 자원 배분.&lt;/p&gt;
&lt;h2 id=&quot;그래프의-활용&quot;&gt;그래프의 활용&lt;/h2&gt;
&lt;h3 id=&quot;네트워크&quot;&gt;네트워크&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;인터넷 라우팅&lt;/strong&gt;: 최단 경로 (다익스트라, BGP)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;소셜 네트워크&lt;/strong&gt;: 친구 관계 (연결성, 커뮤니티 감지)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P2P&lt;/strong&gt;: 그래프 위상&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;컴파일러&quot;&gt;컴파일러&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CFG (Control Flow Graph)&lt;/strong&gt;: 프로그램 실행 흐름&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DFG (Data Flow Graph)&lt;/strong&gt;: 데이터 의존&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSA 변환&lt;/strong&gt;: 지배자 트리&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;레지스터 할당&lt;/strong&gt;: 색칠&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;데이터베이스&quot;&gt;데이터베이스&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;관계형&lt;/strong&gt;: 외래 키 = 간선&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;그래프 DB&lt;/strong&gt;: Neo4j, Neptune&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;기계학습&quot;&gt;기계학습&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;베이지안 네트워크&lt;/strong&gt;: DAG&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CRF&lt;/strong&gt;: 무향 그래프&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GNN (Graph Neural Networks)&lt;/strong&gt;: 그래프 위 학습&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;게임&quot;&gt;게임&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;미로&lt;/strong&gt;: 그래프 최단 경로&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;체스, 오목&lt;/strong&gt;: 상태 그래프&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;함정&quot;&gt;함정&lt;/h2&gt;
&lt;h3 id=&quot;1-방향무방향-혼동&quot;&gt;1. 방향/무방향 혼동&lt;/h3&gt;
&lt;p&gt;무향 그래프에서 ${u, v}$ 는 ${v, u}$ 와 같음. 유향은 다름.&lt;/p&gt;
&lt;h3 id=&quot;2-다중-간선&quot;&gt;2. 다중 간선&lt;/h3&gt;
&lt;p&gt;인접 행렬은 다중 간선 표현 힘듦. 인접 리스트 사용.&lt;/p&gt;
&lt;h3 id=&quot;3-그래프-vs-트리&quot;&gt;3. 그래프 vs 트리&lt;/h3&gt;
&lt;p&gt;트리는 그래프의 특수 케이스. 사이클 없는 연결 그래프.&lt;/p&gt;
&lt;h3 id=&quot;4-자기-루프&quot;&gt;4. 자기 루프&lt;/h3&gt;
&lt;p&gt;$(v, v)$ 형태 간선. 차수 계산 시 보통 2로 카운트 (양끝 같음).&lt;/p&gt;
&lt;h2 id=&quot;관련-위키&quot;&gt;관련 위키&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[[discrete-mathematics|이산수학 (개요)]]&lt;/li&gt;
&lt;li&gt;[[sets-relations-functions|집합, 관계, 함수]]&lt;/li&gt;
&lt;li&gt;[[trees|트리]]&lt;/li&gt;
&lt;li&gt;[[dfs|DFS]]&lt;/li&gt;
&lt;li&gt;[[bfs|BFS]]&lt;/li&gt;
&lt;li&gt;[[dijkstra|다익스트라]]&lt;/li&gt;
&lt;li&gt;[[combinatorics-basics|조합론]] - 그래프 계수&lt;/li&gt;
&lt;li&gt;[[matching|매칭]]&lt;/li&gt;
&lt;li&gt;[[topological-sort|위상 정렬]]&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>discrete-math</category><category>graph-theory</category><category>graphs</category><category>trees</category><author>koa (김신건)</author></item><item><title>명제 논리 (Propositional Logic)</title><link>https://shinkeonkim.com/wiki/discrete-math/propositional-logic/</link><guid isPermaLink="true">https://shinkeonkim.com/wiki/discrete-math/propositional-logic/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;정의&quot;&gt;정의&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;명제 (Proposition)&lt;/strong&gt; 는 참 (T) 또는 거짓 (F) 값을 가지는 서술문입니다. 참/거짓을 판단할 수 없는 문장 (질문, 명령, 감탄) 은 명제가 아닙니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예 (명제)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“2 + 2 = 4” (참)&lt;/li&gt;
&lt;li&gt;“지구는 정사각형이다” (거짓)&lt;/li&gt;
&lt;li&gt;“$n$ 은 소수이다” (변수 있음: 술어)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;예 (명제 아님)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“안녕하세요?”&lt;/li&gt;
&lt;li&gt;“문을 닫아라”&lt;/li&gt;
&lt;li&gt;“$x + 3$“&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;논리-연산자&quot;&gt;논리 연산자&lt;/h2&gt;
&lt;p&gt;명제 $p, q$ 를 결합해 새 명제 생성.&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;연산&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;기호&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;의미&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;부정&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;$\neg p$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;not p&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;논리곱&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;$p \land q$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;p 그리고 q&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;논리합&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;$p \lor q$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;p 또는 q (포함적 or)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;배타적 논리합&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;$p \oplus q$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;p 또는 q 이지만 둘 다는 아님&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;함의&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;$p \to q$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;p 이면 q (implication)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;동치&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;$p \leftrightarrow q$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;p 이면 q 이고 q 이면 p&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;진리표&quot;&gt;진리표&lt;/h2&gt;
&lt;p&gt;각 연산의 정의:&lt;/p&gt;
&lt;h3 id=&quot;and-land&quot;&gt;AND ($\land$)&lt;/h3&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;$p$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$q$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$p \land q$&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;or-lor&quot;&gt;OR ($\lor$)&lt;/h3&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;$p$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$q$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$p \lor q$&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;함의-to&quot;&gt;함의 ($\to$)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;가장 헷갈리는 연산&lt;/strong&gt;. “p 이면 q” 는 &lt;strong&gt;p 가 참인데 q 가 거짓일 때만 거짓&lt;/strong&gt;, 나머지는 참.&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;$p$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$q$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$p \to q$&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;직관&lt;/strong&gt;: “비가 오면 우산을 든다” 라는 약속.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;비 O, 우산 O -&gt; 약속 지킴 (T)&lt;/li&gt;
&lt;li&gt;비 O, 우산 X -&gt; 약속 어김 (F)&lt;/li&gt;
&lt;li&gt;비 X, 우산 O -&gt; 약속과 무관 (T, vacuously true)&lt;/li&gt;
&lt;li&gt;비 X, 우산 X -&gt; 약속과 무관 (T)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;전제가 거짓이면 함의는 항상 참 = &lt;strong&gt;vacuous truth&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;동치-leftrightarrow&quot;&gt;동치 ($\leftrightarrow$)&lt;/h3&gt;
&lt;p&gt;$p \leftrightarrow q$ 는 두 명제의 진리값이 같음.&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;$p$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$q$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$p \leftrightarrow q$&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;진리표로-논리-등식-검증&quot;&gt;진리표로 논리 등식 검증&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 드모르간 법칙 $\neg (p \land q) \equiv \neg p \lor \neg q$&lt;/p&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;$p$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$q$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$p \land q$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$\neg(p \land q)$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$\neg p$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$\neg q$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$\neg p \lor \neg q$&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;F&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;4번째, 7번째 열이 일치 -&gt; 등식 성립.&lt;/p&gt;
&lt;h2 id=&quot;시각화-진리표를-다이어그램으로&quot;&gt;시각화: 진리표를 다이어그램으로&lt;/h2&gt;
&lt;h3 id=&quot;and--or-벤-다이어그램&quot;&gt;AND / OR 벤 다이어그램&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  subgraph &quot;AND: p ∧ q (교집합)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    A1[&quot;p 만&quot;]:::p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    B1[&quot;q 만&quot;]:::q&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    AB1[&quot;p ∧ q&quot;]:::and&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  classDef p fill:#fee2e2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  classDef q fill:#dbeafe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  classDef and fill:#a7f3d0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;$p \land q$ 는 두 원의 &lt;strong&gt;교집합&lt;/strong&gt;, $p \lor q$ 는 두 원의 &lt;strong&gt;합집합&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;논리-동치-주요-법칙&quot;&gt;논리 동치 (주요 법칙)&lt;/h2&gt;

























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;법칙&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;등식&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;항등&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$p \land T \equiv p$, $p \lor F \equiv p$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;지배&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$p \lor T \equiv T$, $p \land F \equiv F$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;멱등&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$p \land p \equiv p$, $p \lor p \equiv p$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;이중부정&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\neg (\neg p) \equiv p$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;교환&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$p \land q \equiv q \land p$, $p \lor q \equiv q \lor p$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;결합&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$(p \land q) \land r \equiv p \land (q \land r)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;분배&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$p \land (q \lor r) \equiv (p \land q) \lor (p \land r)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;드모르간&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\neg(p \land q) \equiv \neg p \lor \neg q$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;흡수&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$p \lor (p \land q) \equiv p$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;함의 재작성&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$p \to q \equiv \neg p \lor q$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;대우&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$p \to q \equiv \neg q \to \neg p$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;동치 재작성&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$p \leftrightarrow q \equiv (p \to q) \land (q \to p)$&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;함의의-관련-명제&quot;&gt;함의의 관련 명제&lt;/h2&gt;
&lt;p&gt;$p \to q$ 에 대해:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;역 (converse)&lt;/strong&gt;: $q \to p$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;이 (inverse)&lt;/strong&gt;: $\neg p \to \neg q$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;대우 (contrapositive)&lt;/strong&gt;: $\neg q \to \neg p$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;중요&lt;/strong&gt;: 원 명제와 &lt;strong&gt;대우 는 논리적으로 동치&lt;/strong&gt;. 역/이는 원 명제와 동치가 아님.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 원 명제 “비가 오면 땅이 젖는다”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;대우: “땅이 젖지 않으면 비가 오지 않는다” (동치 O)&lt;/li&gt;
&lt;li&gt;역: “땅이 젖으면 비가 온다” (동치 X, 물뿌리개일 수도)&lt;/li&gt;
&lt;li&gt;이: “비가 오지 않으면 땅이 젖지 않는다” (동치 X)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;항진명제와-모순&quot;&gt;항진명제와 모순&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;항진명제 (tautology)&lt;/strong&gt;: 모든 진리 할당에서 참. 예: $p \lor \neg p$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;모순 (contradiction)&lt;/strong&gt;: 모든 진리 할당에서 거짓. 예: $p \land \neg p$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;가능명제 (contingency)&lt;/strong&gt;: 참 또는 거짓 (진리 할당에 의존).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;정규형&quot;&gt;정규형&lt;/h2&gt;
&lt;p&gt;명제 논리식은 두 가지 표준형으로.&lt;/p&gt;
&lt;h3 id=&quot;논리곱-정규형-cnf-conjunctive-normal-form&quot;&gt;논리곱 정규형 (CNF, Conjunctive Normal Form)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;절 (clause) 의 논리곱&lt;/strong&gt;. 각 절은 리터럴의 논리합.&lt;/p&gt;
&lt;p&gt;$$(l_1 \lor l_2 \lor \ldots) \land (l_3 \lor \ldots) \land \ldots$$&lt;/p&gt;
&lt;p&gt;SAT solver 의 표준 입력. [[boolean-algebra|Boolean Algebra]] 참조.&lt;/p&gt;
&lt;h3 id=&quot;논리합-정규형-dnf&quot;&gt;논리합 정규형 (DNF)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;항 (term) 의 논리합&lt;/strong&gt;. 각 항은 리터럴의 논리곱.&lt;/p&gt;
&lt;p&gt;$$(l_1 \land l_2 \land \ldots) \lor (l_3 \land \ldots) \lor \ldots$$&lt;/p&gt;
&lt;h2 id=&quot;추론-규칙&quot;&gt;추론 규칙&lt;/h2&gt;
&lt;p&gt;전제로부터 결론을 도출하는 규칙:&lt;/p&gt;
&lt;h3 id=&quot;modus-ponens-긍정-논법&quot;&gt;Modus Ponens (긍정 논법)&lt;/h3&gt;
&lt;p&gt;$$
\frac{p \to q, \quad p}{\therefore q}
$$&lt;/p&gt;
&lt;p&gt;“p 이면 q, 그리고 p 이다. 따라서 q.”&lt;/p&gt;
&lt;h3 id=&quot;modus-tollens-부정-논법&quot;&gt;Modus Tollens (부정 논법)&lt;/h3&gt;
&lt;p&gt;$$
\frac{p \to q, \quad \neg q}{\therefore \neg p}
$$&lt;/p&gt;
&lt;p&gt;“p 이면 q, 그런데 q 가 아니다. 따라서 p 도 아니다.” (대우 활용)&lt;/p&gt;
&lt;h3 id=&quot;삼단논법&quot;&gt;삼단논법&lt;/h3&gt;
&lt;p&gt;$$
\frac{p \to q, \quad q \to r}{\therefore p \to r}
$$&lt;/p&gt;
&lt;h3 id=&quot;분리-규칙&quot;&gt;분리 규칙&lt;/h3&gt;
&lt;p&gt;$$
\frac{p \lor q, \quad \neg p}{\therefore q}
$$&lt;/p&gt;
&lt;h2 id=&quot;컴퓨터-과학-응용&quot;&gt;컴퓨터 과학 응용&lt;/h2&gt;
&lt;h3 id=&quot;프로그래밍-조건문&quot;&gt;프로그래밍 조건문&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (age &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 18&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (has_license):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    can_drive &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; True&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이는 명제 논리의 AND. &lt;code&gt;and&lt;/code&gt; 는 $\land$, &lt;code&gt;or&lt;/code&gt; 는 $\lor$, &lt;code&gt;not&lt;/code&gt; 은 $\neg$.&lt;/p&gt;
&lt;h3 id=&quot;회로-설계&quot;&gt;회로 설계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;AND 게이트, OR 게이트, NOT 게이트&lt;/li&gt;
&lt;li&gt;진리표 -&gt; DNF/CNF -&gt; 회로&lt;/li&gt;
&lt;li&gt;최소화: 카르노 맵&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;형식-검증&quot;&gt;형식 검증&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;프로그램의 사전조건 / 사후조건을 명제로 표현&lt;/li&gt;
&lt;li&gt;정리 증명기가 논리식 검사&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;sat-문제&quot;&gt;SAT 문제&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CNF 논리식이 만족 가능한 진리 할당이 있는가?&lt;/li&gt;
&lt;li&gt;NP-완전. 많은 조합 최적화 문제가 SAT 로 환원.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;함정&quot;&gt;함정&lt;/h2&gt;
&lt;h3 id=&quot;1-함의의-vacuous-truth&quot;&gt;1. 함의의 vacuous truth&lt;/h3&gt;
&lt;p&gt;전제 $p$ 가 거짓이면 $p \to q$ 는 자동으로 참. 이를 잊으면 오류.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: “5 &gt; 10 이면 지구는 평평하다” 는 논리적으로 참 (전제 거짓).&lt;/p&gt;
&lt;h3 id=&quot;2-역과-원-명제-혼동&quot;&gt;2. 역과 원 명제 혼동&lt;/h3&gt;
&lt;p&gt;“모든 소수는 홀수이다” 의 역은 “모든 홀수는 소수이다” (거짓, 예: 9). 원 명제와 동치가 아님. (사실 원 명제도 거짓, 2 는 짝수 소수).&lt;/p&gt;
&lt;h3 id=&quot;3-배타적-or-와-포함적-or&quot;&gt;3. 배타적 or 와 포함적 or&lt;/h3&gt;
&lt;p&gt;일상 언어의 “or” 는 종종 배타적 (either-or). 논리 $\lor$ 는 &lt;strong&gt;포함적&lt;/strong&gt; (둘 다 참이어도 참). SQL 의 &lt;code&gt;OR&lt;/code&gt; 등도 포함적.&lt;/p&gt;
&lt;h3 id=&quot;4-드모르간-실수&quot;&gt;4. 드모르간 실수&lt;/h3&gt;
&lt;p&gt;$\neg (p \land q) \equiv \neg p \lor \neg q$ 를 $\neg p \land \neg q$ 로 착각. 부정하면 연산자도 뒤집힘.&lt;/p&gt;
&lt;h2 id=&quot;다음-학습&quot;&gt;다음 학습&lt;/h2&gt;
&lt;p&gt;명제 논리 이후:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[[proof-techniques|증명 기법]]&lt;/strong&gt;: 명제 논리를 이용한 증명 방법&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[[boolean-algebra|부울 대수]]&lt;/strong&gt;: 회로 설계로 확장&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;술어 논리 (Predicate Logic)&lt;/strong&gt;: 양화사 ($\forall, \exists$) 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;관련-위키&quot;&gt;관련 위키&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[[discrete-mathematics|이산수학 (개요)]]&lt;/li&gt;
&lt;li&gt;[[proof-techniques|증명 기법]]&lt;/li&gt;
&lt;li&gt;[[boolean-algebra|부울 대수]]&lt;/li&gt;
&lt;li&gt;[[sets-relations-functions|집합, 관계, 함수]]&lt;/li&gt;
&lt;li&gt;[[combinatorics-basics|조합론]]&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>discrete-math</category><category>logic</category><category>boolean</category><category>propositional</category><author>koa (김신건)</author></item><item><title>부울 대수 (Boolean Algebra)</title><link>https://shinkeonkim.com/wiki/discrete-math/boolean-algebra/</link><guid isPermaLink="true">https://shinkeonkim.com/wiki/discrete-math/boolean-algebra/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;정의&quot;&gt;정의&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;부울 대수 (Boolean Algebra)&lt;/strong&gt; 는 두 값 (참/거짓, 1/0) 과 세 연산 (AND, OR, NOT) 을 다루는 대수 시스템입니다. 1854년 George Boole 이 창시.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;컴퓨터의 심장&lt;/strong&gt;: 모든 디지털 회로는 부울 함수의 물리적 구현.&lt;/p&gt;
&lt;h2 id=&quot;기본-연산&quot;&gt;기본 연산&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;정의역&lt;/strong&gt;: $B = {0, 1}$&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;연산&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;기호&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;대안&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;AND&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;$\cdot$ 또는 $\land$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$ab, a \cdot b$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;OR&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;$+$ 또는 $\lor$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$a + b$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;NOT&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;$\overline{\cdot}$ 또는 $\neg$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\overline{a}, a’$&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;진리표&lt;/strong&gt;:&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;$a$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$b$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$a \cdot b$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$a + b$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$\overline{a}$&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;부울-대수-법칙&quot;&gt;부울 대수 법칙&lt;/h2&gt;
&lt;h3 id=&quot;항등원&quot;&gt;항등원&lt;/h3&gt;
&lt;p&gt;$$a + 0 = a, \quad a \cdot 1 = a$$&lt;/p&gt;
&lt;h3 id=&quot;지배원-domination&quot;&gt;지배원 (Domination)&lt;/h3&gt;
&lt;p&gt;$$a + 1 = 1, \quad a \cdot 0 = 0$$&lt;/p&gt;
&lt;h3 id=&quot;멱등-idempotent&quot;&gt;멱등 (Idempotent)&lt;/h3&gt;
&lt;p&gt;$$a + a = a, \quad a \cdot a = a$$&lt;/p&gt;
&lt;h3 id=&quot;이중-부정&quot;&gt;이중 부정&lt;/h3&gt;
&lt;p&gt;$$\overline{\overline{a}} = a$$&lt;/p&gt;
&lt;h3 id=&quot;교환&quot;&gt;교환&lt;/h3&gt;
&lt;p&gt;$$a + b = b + a, \quad a \cdot b = b \cdot a$$&lt;/p&gt;
&lt;h3 id=&quot;결합&quot;&gt;결합&lt;/h3&gt;
&lt;p&gt;$$a + (b + c) = (a + b) + c$$&lt;/p&gt;
&lt;h3 id=&quot;분배&quot;&gt;분배&lt;/h3&gt;
&lt;p&gt;$$a + (b \cdot c) = (a + b) \cdot (a + c)$$
$$a \cdot (b + c) = (a \cdot b) + (a \cdot c)$$&lt;/p&gt;
&lt;h3 id=&quot;드모르간&quot;&gt;드모르간&lt;/h3&gt;
&lt;p&gt;$$\overline{a + b} = \overline{a} \cdot \overline{b}$$
$$\overline{a \cdot b} = \overline{a} + \overline{b}$$&lt;/p&gt;
&lt;h3 id=&quot;흡수&quot;&gt;흡수&lt;/h3&gt;
&lt;p&gt;$$a + (a \cdot b) = a, \quad a \cdot (a + b) = a$$&lt;/p&gt;
&lt;h3 id=&quot;여원&quot;&gt;여원&lt;/h3&gt;
&lt;p&gt;$$a + \overline{a} = 1, \quad a \cdot \overline{a} = 0$$&lt;/p&gt;
&lt;h2 id=&quot;쌍대성-duality&quot;&gt;쌍대성 (Duality)&lt;/h2&gt;
&lt;p&gt;부울 대수의 모든 등식은 &lt;strong&gt;AND ↔ OR&lt;/strong&gt;, &lt;strong&gt;0 ↔ 1&lt;/strong&gt; 을 교체해도 성립. 이것이 쌍대 원리.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$a + 0 = a$ 의 쌍대: $a \cdot 1 = a$&lt;/li&gt;
&lt;li&gt;$a + (a \cdot b) = a$ 의 쌍대: $a \cdot (a + b) = a$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;부울-함수&quot;&gt;부울 함수&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;$n$ 변수 부울 함수&lt;/strong&gt;: $f: B^n \to B$.&lt;/p&gt;
&lt;p&gt;$2^n$ 개의 입력 조합에 대해 각각 0 또는 1 -&gt; &lt;strong&gt;$2^{2^n}$ 개의 서로 다른 부울 함수&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;예: 2변수는 $2^4 = 16$ 개 함수, 3변수는 $2^8 = 256$ 개.&lt;/p&gt;
&lt;h2 id=&quot;정규형&quot;&gt;정규형&lt;/h2&gt;
&lt;h3 id=&quot;논리합-정규형-dnf-sum-of-products&quot;&gt;논리합 정규형 (DNF, Sum of Products)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;민텀 (minterm)&lt;/strong&gt; = 모든 변수를 포함하는 AND 항.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DNF&lt;/strong&gt; = 민텀들의 OR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: $f(a, b, c) = a \overline{b} c + \overline{a} b c + a b \overline{c}$&lt;/p&gt;
&lt;p&gt;3변수 민텀은 $2^3 = 8$ 개.&lt;/p&gt;
&lt;h3 id=&quot;논리곱-정규형-cnf-product-of-sums&quot;&gt;논리곱 정규형 (CNF, Product of Sums)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;맥스텀 (maxterm)&lt;/strong&gt; = 모든 변수를 포함하는 OR 항.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CNF&lt;/strong&gt; = 맥스텀들의 AND.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: $f(a, b, c) = (a + b + c)(\overline{a} + b + c)(a + \overline{b} + c)$&lt;/p&gt;
&lt;h3 id=&quot;dnfcnf-유도&quot;&gt;DNF/CNF 유도&lt;/h3&gt;
&lt;p&gt;진리표에서:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DNF&lt;/strong&gt;: 출력 1인 행마다 민텀 (해당 행의 변수 조합) OR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CNF&lt;/strong&gt;: 출력 0인 행마다 맥스텀 OR&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;시각화-진리표--회로&quot;&gt;시각화: 진리표 → 회로&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: $f(a, b, c) = ab + \overline{a}c$&lt;/p&gt;













































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;$a$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$b$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$c$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$ab$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$\overline{a}c$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$f$&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;회로&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A[a] --&gt; AB[AND: ab]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  B[b] --&gt; AB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A --&gt; NOTA[NOT: ā]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  NOTA --&gt; ANC[AND: āc]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  C[c] --&gt; ANC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  AB --&gt; OUT[OR: f]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ANC --&gt; OUT&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;카르노-맵-karnaugh-map&quot;&gt;카르노 맵 (Karnaugh Map)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;진리표를 격자로 정리&lt;/strong&gt; 하여 부울 함수를 시각적으로 최소화.&lt;/p&gt;
&lt;h3 id=&quot;2변수-카르노-맵&quot;&gt;2변수 카르노 맵&lt;/h3&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$b=0$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$b=1$&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;$a=0$&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;$a=1$&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;이 맵의 함수 = $\overline{a} b$.&lt;/p&gt;
&lt;h3 id=&quot;3변수-카르노-맵&quot;&gt;3변수 카르노 맵&lt;/h3&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$c=0$&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;$c=1$&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;$ab=00$&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;$ab=01$&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;$ab=11$&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;$ab=10$&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Gray code&lt;/strong&gt; 순서로 배치 ($00, 01, 11, 10$) 하여 인접 셀이 한 변수만 다름.&lt;/p&gt;
&lt;h3 id=&quot;최소화&quot;&gt;최소화&lt;/h3&gt;
&lt;p&gt;인접한 1 셀들을 &lt;strong&gt;최대 2의 거듭제곱&lt;/strong&gt; 크기로 묶어 항 축소.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 개 셀 = 3변수 민텀&lt;/li&gt;
&lt;li&gt;2 개 인접 셀 = 2변수 항&lt;/li&gt;
&lt;li&gt;4 개 인접 셀 = 1변수 항&lt;/li&gt;
&lt;li&gt;8 개 인접 셀 = 상수 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;목적&lt;/strong&gt;: DNF 의 항 수와 리터럴 수 최소화 -&gt; 회로 게이트 최소화.&lt;/p&gt;
&lt;h2 id=&quot;논리-게이트&quot;&gt;논리 게이트&lt;/h2&gt;
&lt;p&gt;물리적 회로:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AND 게이트&lt;/strong&gt;: &lt;code&gt;⊃&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OR 게이트&lt;/strong&gt;: &lt;code&gt;⊃&lt;/code&gt; (곡선 표현)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NOT 게이트&lt;/strong&gt;: &lt;code&gt;▷○&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NAND&lt;/strong&gt;: AND + NOT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NOR&lt;/strong&gt;: OR + NOT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XOR&lt;/strong&gt;: 배타적 OR ($a \oplus b = a\overline{b} + \overline{a}b$)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;보편-게이트&quot;&gt;보편 게이트&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NAND&lt;/strong&gt; 하나만 있으면 모든 부울 함수 구현 가능.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NOT($a$) = NAND($a$, $a$)&lt;/li&gt;
&lt;li&gt;AND($a$, $b$) = NOT(NAND($a$, $b$))&lt;/li&gt;
&lt;li&gt;OR($a$, $b$) = NAND(NOT($a$), NOT($b$))&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;NOR&lt;/strong&gt; 도 마찬가지.&lt;/p&gt;
&lt;h2 id=&quot;부울-함수의-응용&quot;&gt;부울 함수의 응용&lt;/h2&gt;
&lt;h3 id=&quot;하드웨어-설계&quot;&gt;하드웨어 설계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ALU (Arithmetic Logic Unit)&lt;/strong&gt;: 덧셈, AND, OR 등의 회로&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;디코더&lt;/strong&gt;: n 비트 입력 -&gt; $2^n$ 개 출력 (하나만 1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;멀티플렉서&lt;/strong&gt;: 여러 입력 중 하나 선택&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;레지스터, 플립플롭&lt;/strong&gt;: 순차 회로&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;cpu-명령어&quot;&gt;CPU 명령어&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;비트 연산 (&lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;, &lt;code&gt;XOR&lt;/code&gt;, &lt;code&gt;NOT&lt;/code&gt;, &lt;code&gt;SHL&lt;/code&gt;, &lt;code&gt;SHR&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;조건 플래그 (Zero, Negative, Overflow)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;프로그래밍&quot;&gt;프로그래밍&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;비트마스킹&lt;/strong&gt;: 상태 저장 (권한, 플래그)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;부울 표현식 최적화&lt;/strong&gt;: 컴파일러가 카르노 맵 유사 알고리즘&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;sat-satisfiability&quot;&gt;SAT (Satisfiability)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;CNF 논리식이 만족 가능한가?&lt;/strong&gt; NP-완전.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;응용&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;하드웨어 검증&lt;/li&gt;
&lt;li&gt;소프트웨어 검증&lt;/li&gt;
&lt;li&gt;스케줄링&lt;/li&gt;
&lt;li&gt;계획 (planning)&lt;/li&gt;
&lt;li&gt;조합 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;완전-함수-집합&quot;&gt;완전 함수 집합&lt;/h2&gt;
&lt;p&gt;부울 함수 $f: B^n \to B$ 를 &lt;strong&gt;유한한 연산 집합&lt;/strong&gt; 으로 표현할 수 있으면 “완전 (functionally complete)”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;대표 완전 집합&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;${\text{AND}, \text{OR}, \text{NOT}}$&lt;/li&gt;
&lt;li&gt;${\text{AND}, \text{NOT}}$&lt;/li&gt;
&lt;li&gt;${\text{OR}, \text{NOT}}$&lt;/li&gt;
&lt;li&gt;${\text{NAND}}$&lt;/li&gt;
&lt;li&gt;${\text{NOR}}$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;불완전 집합&lt;/strong&gt;: ${\text{AND}, \text{OR}}$ 는 NOT 필요.&lt;/p&gt;
&lt;h2 id=&quot;함정&quot;&gt;함정&lt;/h2&gt;
&lt;h3 id=&quot;1-and-우선순위&quot;&gt;1. AND 우선순위&lt;/h3&gt;
&lt;p&gt;수식에서 곱 $\cdot$ 이 합 $+$ 보다 우선. $a + bc = a + (bc)$.&lt;/p&gt;
&lt;h3 id=&quot;2-드모르간-실수&quot;&gt;2. 드모르간 실수&lt;/h3&gt;
&lt;p&gt;$\overline{a + b} \neq \overline{a} + \overline{b}$. 부정하면 연산자도 바뀜.&lt;/p&gt;
&lt;h3 id=&quot;3-카르노-맵-순서&quot;&gt;3. 카르노 맵 순서&lt;/h3&gt;
&lt;p&gt;인접한 열/행이 &lt;strong&gt;한 변수만&lt;/strong&gt; 달라야 함 -&gt; Gray code ($00, 01, 11, 10$).&lt;/p&gt;
&lt;h3 id=&quot;4-nand-만으로-모든-것&quot;&gt;4. NAND 만으로 모든 것&lt;/h3&gt;
&lt;p&gt;가능하지만 실제 회로는 비효율. 표준 게이트 조합이 나음.&lt;/p&gt;
&lt;h2 id=&quot;관련-위키&quot;&gt;관련 위키&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[[discrete-mathematics|이산수학 (개요)]]&lt;/li&gt;
&lt;li&gt;[[propositional-logic|명제 논리]]&lt;/li&gt;
&lt;li&gt;[[sets-relations-functions|집합, 관계, 함수]]&lt;/li&gt;
&lt;li&gt;[[proof-techniques|증명 기법]]&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>discrete-math</category><category>boolean-algebra</category><category>logic-circuit</category><author>koa (김신건)</author></item><item><title>이산수학 (Discrete Mathematics)</title><link>https://shinkeonkim.com/wiki/discrete-math/discrete-mathematics/</link><guid isPermaLink="true">https://shinkeonkim.com/wiki/discrete-math/discrete-mathematics/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;정의&quot;&gt;정의&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;이산수학 (Discrete Mathematics)&lt;/strong&gt; 은 이산 (discrete, 셀 수 있는) 대상을 다루는 수학의 분야입니다. &lt;strong&gt;연속 (continuous) 대상&lt;/strong&gt; 을 다루는 미적분학과 대조되며, 컴퓨터 과학의 근간을 이룹니다.&lt;/p&gt;
&lt;p&gt;이산수학이 다루는 대상은 &lt;strong&gt;자연수, 정수, 그래프, 집합, 명제, 문자열, 알고리즘&lt;/strong&gt; 등 셀 수 있는 개별 요소들이며, 이들에 대한 &lt;strong&gt;논리, 계수, 관계, 구조&lt;/strong&gt; 를 다룹니다.&lt;/p&gt;
&lt;h2 id=&quot;왜-컴퓨터-과학의-기초인가&quot;&gt;왜 컴퓨터 과학의 기초인가&lt;/h2&gt;
&lt;p&gt;컴퓨터는 근본적으로 이산적입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;비트, 바이트&lt;/strong&gt;: 유한한 상태&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;명령어&lt;/strong&gt;: 이산 실행&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;알고리즘&lt;/strong&gt;: 이산 단계의 나열&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;데이터 구조&lt;/strong&gt;: 이산 관계&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;네트워크&lt;/strong&gt;: 그래프&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;컴파일러&lt;/strong&gt;: 형식 언어 (문자열)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;암호학&lt;/strong&gt;: 정수 이론&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이산수학을 모르면 알고리즘 정확성 증명, 복잡도 분석, 데이터 구조 설계, 형식 검증이 불가능합니다.&lt;/p&gt;
&lt;h2 id=&quot;학습-지도&quot;&gt;학습 지도&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  L[명제 논리&amp;#x3C;br/&gt;Propositional Logic] --&gt; P[증명 기법&amp;#x3C;br/&gt;Proof Techniques]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  L --&gt; Q[술어 논리&amp;#x3C;br/&gt;Predicate Logic]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  S[집합론&amp;#x3C;br/&gt;Sets] --&gt; R[관계와 함수&amp;#x3C;br/&gt;Relations &amp;#x26; Functions]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  R --&gt; EQ[동치 관계]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  R --&gt; PO[부분 순서]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  R --&gt; FUNC[함수의 종류]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  P --&gt; IND[수학적 귀납법]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  IND --&gt; REC[재귀]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  C[조합론&amp;#x3C;br/&gt;Combinatorics] --&gt; PN[순열, 조합]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  C --&gt; IE[포함배제]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  C --&gt; GF[생성함수]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  N[정수론&amp;#x3C;br/&gt;Number Theory] --&gt; MOD[모듈러 산술]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  N --&gt; GCD[유클리드 호제법]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  N --&gt; CRT[중국인 나머지 정리]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  G[그래프 이론&amp;#x3C;br/&gt;Graph Theory] --&gt; DEG[차수, 경로]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  G --&gt; TREE[트리]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  G --&gt; COLOR[그래프 색칠]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  G --&gt; MATCH[매칭]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  B[부울 대수&amp;#x3C;br/&gt;Boolean Algebra] --&gt; CIRCUIT[논리 회로]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  B --&gt; CNF[정규형]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  REC --&gt; RECUR[점화식&amp;#x3C;br/&gt;Recurrence Relations]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  RECUR --&gt; ALG[알고리즘 복잡도]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;주요-분야&quot;&gt;주요 분야&lt;/h2&gt;
&lt;h3 id=&quot;1-논리-logic&quot;&gt;1. 논리 (Logic)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;명제, 진리표, 술어, 양화사, 추론 규칙&lt;/strong&gt;. 모든 수학과 컴퓨터 프로그램의 기초.&lt;/p&gt;
&lt;p&gt;자세한 것은 [[propositional-logic|명제 논리]] 참조.&lt;/p&gt;
&lt;h3 id=&quot;2-집합과-함수-sets-relations-functions&quot;&gt;2. 집합과 함수 (Sets, Relations, Functions)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;집합 연산, 관계의 성질, 함수의 정의역/치역, 단사/전사/전단사&lt;/strong&gt;. 자료구조와 데이터베이스의 이론적 배경.&lt;/p&gt;
&lt;p&gt;자세한 것은 [[sets-relations-functions|집합, 관계, 함수]] 참조.&lt;/p&gt;
&lt;h3 id=&quot;3-조합론-combinatorics&quot;&gt;3. 조합론 (Combinatorics)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;계수 원리, 순열, 조합, 이항 정리, 포함배제 원리&lt;/strong&gt;. 알고리즘의 경우의 수 분석.&lt;/p&gt;
&lt;p&gt;자세한 것은 [[combinatorics-basics|조합론]] 참조.&lt;/p&gt;
&lt;h3 id=&quot;4-정수론-number-theory&quot;&gt;4. 정수론 (Number Theory)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;나눗셈, 소수, gcd, 모듈러 산술&lt;/strong&gt;. 암호학과 해싱의 근간.&lt;/p&gt;
&lt;p&gt;관련: [[euclidean|유클리드 호제법]], [[modular-arithmetic|모듈러 산술]], [[crt|중국인 나머지 정리]]&lt;/p&gt;
&lt;h3 id=&quot;5-그래프-이론-graph-theory&quot;&gt;5. 그래프 이론 (Graph Theory)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;정점, 간선, 경로, 사이클, 연결성, 트리, 그래프 색칠&lt;/strong&gt;. 네트워크와 알고리즘의 필수 언어.&lt;/p&gt;
&lt;p&gt;자세한 것은 [[graph-theory-basics|그래프 이론]] 참조.&lt;/p&gt;
&lt;h3 id=&quot;6-부울-대수-boolean-algebra&quot;&gt;6. 부울 대수 (Boolean Algebra)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;AND, OR, NOT, 진리표, 정규형 (DNF/CNF), 논리 회로&lt;/strong&gt;. 디지털 회로 설계의 이론.&lt;/p&gt;
&lt;p&gt;자세한 것은 [[boolean-algebra|부울 대수]] 참조.&lt;/p&gt;
&lt;h3 id=&quot;7-점화식과-알고리즘-recurrence-relations&quot;&gt;7. 점화식과 알고리즘 (Recurrence Relations)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;재귀 정의, 마스터 정리, 생성함수&lt;/strong&gt;. 재귀 알고리즘의 시간 복잡도 분석.&lt;/p&gt;
&lt;p&gt;자세한 것은 [[recurrence-relations|점화식]] 참조.&lt;/p&gt;
&lt;h3 id=&quot;8-증명-기법-proof-techniques&quot;&gt;8. 증명 기법 (Proof Techniques)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;직접 증명, 대우 증명, 귀류법, 수학적 귀납법, 구조 귀납법&lt;/strong&gt;. 알고리즘 정확성 증명의 도구.&lt;/p&gt;
&lt;p&gt;자세한 것은 [[proof-techniques|증명 기법]] 참조.&lt;/p&gt;
&lt;h2 id=&quot;이산-vs-연속-예시&quot;&gt;이산 vs 연속: 예시&lt;/h2&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;개념&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;이산&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;연속&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;수&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;정수&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;실수&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;함수&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$f: \mathbb{Z} \to \mathbb{Z}$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$f: \mathbb{R} \to \mathbb{R}$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;최적화&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;정수계획법, 조합최적화&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;미적분&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;확률&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;이산확률 (동전, 주사위)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;연속확률 (정규분포)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;기하&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;격자, 다각형&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;곡선, 곡면&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;미분/합&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;유한 차분&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;도함수&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;컴퓨터-과학-응용&quot;&gt;컴퓨터 과학 응용&lt;/h2&gt;
&lt;h3 id=&quot;알고리즘&quot;&gt;알고리즘&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;최단 경로&lt;/strong&gt;: 그래프 이론&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;정렬&lt;/strong&gt;: 비교 횟수 분석 (조합론)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;탐색&lt;/strong&gt;: 이진 탐색의 정확성 (귀납법)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;동적 계획법&lt;/strong&gt;: 점화식 설계&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;자료구조&quot;&gt;자료구조&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;트리, 힙&lt;/strong&gt;: 그래프 이론&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;해시&lt;/strong&gt;: 정수론 (mod, 소수)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B-tree&lt;/strong&gt;: 조합론적 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;시스템&quot;&gt;시스템&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;파일 시스템&lt;/strong&gt;: 트리 구조&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;네트워크&lt;/strong&gt;: 그래프 라우팅&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;분산 합의&lt;/strong&gt;: 그래프 색칠, 그룹 이론&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;암호학&quot;&gt;암호학&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSA&lt;/strong&gt;: 정수론 (오일러 정리, 소인수 분해)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AES&lt;/strong&gt;: 갈루아 필드 (유한체)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;해시 함수&lt;/strong&gt;: 조합론&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;기계-학습&quot;&gt;기계 학습&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;정보이론&lt;/strong&gt;: 엔트로피 (이산 확률)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;결정 트리&lt;/strong&gt;: 그래프 이론&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;베이지안 네트워크&lt;/strong&gt;: DAG&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;형식-검증&quot;&gt;형식 검증&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;모델 검사&lt;/strong&gt;: 유한 상태 기계&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;정리 증명&lt;/strong&gt;: 논리&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;타입 시스템&lt;/strong&gt;: 집합론&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;학습-자원&quot;&gt;학습 자원&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rosen, Discrete Mathematics and Its Applications&lt;/strong&gt;: 정석 교과서 (한글 번역 있음)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graham, Knuth, Patashnik, Concrete Mathematics&lt;/strong&gt;: 알고리즘 배경으로 심화&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Oscar Levin, Discrete Mathematics: An Open Introduction&lt;/strong&gt;: 온라인 무료 교과서&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MIT 6.042J&lt;/strong&gt;: 이산수학과 확률 (온라인 강의)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;학습-순서-권장&quot;&gt;학습 순서 (권장)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;논리 + 증명 기법&lt;/strong&gt; ([[propositional-logic]] → [[proof-techniques]])&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;집합 + 함수&lt;/strong&gt; ([[sets-relations-functions]])&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;조합론&lt;/strong&gt; ([[combinatorics-basics]])&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;그래프 이론&lt;/strong&gt; ([[graph-theory-basics]])&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;부울 대수&lt;/strong&gt; ([[boolean-algebra]])&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;점화식&lt;/strong&gt; ([[recurrence-relations]])&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이 순서는 &lt;a href=&quot;https://shinkeonkim.com/courses/discrete-mathematics-foundations/&quot;&gt;이산수학 코스&lt;/a&gt; 로 구성되어 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;이산-최적화와-np&quot;&gt;이산 최적화와 NP&lt;/h2&gt;
&lt;p&gt;이산수학은 계산 복잡도 이론과 직결됩니다.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    P[&quot;P 문제&amp;#x3C;br/&gt;다항 시간 결정 가능&quot;] --&gt; NP[&quot;NP 문제&amp;#x3C;br/&gt;다항 시간 검증 가능&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    NP --&gt; PC[&quot;NP-Complete&amp;#x3C;br/&gt;SAT, TSP, 그래프 색칠&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    NP --&gt; PH[&quot;NP-Hard&amp;#x3C;br/&gt;정수 프로그래밍&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    PC --&gt; REDUCE[&quot;NP-Complete 상호 다항 환원 가능&quot;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;P&lt;/strong&gt;: 다항 시간에 결정 가능한 문제&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NP&lt;/strong&gt;: 다항 시간에 검증 가능한 문제&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P vs NP&lt;/strong&gt;: 미해결 문제 (Clay 밀레니엄 문제)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NP-Complete&lt;/strong&gt;: 가장 어려운 NP 문제, 하나만 P 이면 P=NP&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
TSP 결정 버전은 NP-Complete, 최적화 버전은 NP-Hard 입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;형식-언어와-오토마타&quot;&gt;형식 언어와 오토마타&lt;/h2&gt;
&lt;p&gt;컴파일러와 정규식의 이론적 기반. 이산수학의 직접적인 응용.&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;계층&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;언어&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;오토마타&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;응용&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;정규 언어&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;정규 표현식&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;유한 오토마타&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;lexer, grep&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;문맥 자유 언어&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;CFG&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;푸시다운 오토마타&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;parser, HTML&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;문맥 의존 언어&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;CSG&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;선형 경계 오토마타&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;자연어 처리&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;재귀 가능 언어&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;재귀 가능&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;튜링 기계&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;일반 프로그래밍&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Chomsky 계층에서 각 계층은 바로 아래 계층을 포함합니다.&lt;/p&gt;
&lt;h2 id=&quot;증명-기법-빠른-참조&quot;&gt;증명 기법 빠른 참조&lt;/h2&gt;
&lt;p&gt;알고리즘 설계와 분석에 가장 많이 쓰는 증명 방법:&lt;/p&gt;
&lt;h3 id=&quot;수학적-귀납법&quot;&gt;수학적 귀납법&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;목표: P(n) 이 모든 n &gt;= n0 에서 성립&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1. Base case: P(n0) 성립을 보임&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2. Inductive step: P(k) 가 성립하면 P(k+1) 도 성립&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;예: 이진 탐색의 정확성, 재귀 알고리즘의 종료 조건.&lt;/p&gt;
&lt;h3 id=&quot;귀류법&quot;&gt;귀류법&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;목표: P 가 참임을 보임&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1. P 가 거짓이라고 가정&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2. 모순 도출&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;결론: P 는 참&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;예: 소수 무한 개 증명, 알고리즘 하한 증명.&lt;/p&gt;
&lt;h3 id=&quot;비둘기-집-원리&quot;&gt;비둘기 집 원리&lt;/h3&gt;
&lt;p&gt;N+1 마리의 비둘기를 N 개의 집에 넣으면 적어도 한 집에 2마리 이상.&lt;/p&gt;
&lt;p&gt;응용:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;해시 충돌의 불가피성 증명&lt;/li&gt;
&lt;li&gt;생일 역설: 23명 중 동일 생일자 존재 확률 &gt; 50%&lt;/li&gt;
&lt;li&gt;공간 압축의 한계 증명&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;이산-확률&quot;&gt;이산 확률&lt;/h2&gt;
&lt;p&gt;이산 확률론 (Discrete Probability) 은 알고리즘 분석의 핵심 도구입니다.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; math &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; comb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 이항 분포: n번 시행, 성공 확률 p, k번 성공 확률&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; binomial&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(n, k, p):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; comb(n, k) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (p &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; k) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ((&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; p) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (n &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; k))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;알고리즘 분석에서 쓰이는 핵심 도구:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;기댓값 분석&lt;/strong&gt;: 퀵소트 평균 O(N log N) 증명&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;지시 확률 변수&lt;/strong&gt;: 해시 충돌 기대 횟수 계산&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markov 부등식&lt;/strong&gt;: 꼬리 확률 상한&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chernoff 경계&lt;/strong&gt;: 집중 부등식, 랜덤 알고리즘 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;관련-위키&quot;&gt;관련 위키&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[[propositional-logic|명제 논리]]&lt;/li&gt;
&lt;li&gt;[[sets-relations-functions|집합, 관계, 함수]]&lt;/li&gt;
&lt;li&gt;[[combinatorics-basics|조합론]]&lt;/li&gt;
&lt;li&gt;[[graph-theory-basics|그래프 이론]]&lt;/li&gt;
&lt;li&gt;[[boolean-algebra|부울 대수]]&lt;/li&gt;
&lt;li&gt;[[recurrence-relations|점화식]]&lt;/li&gt;
&lt;li&gt;[[proof-techniques|증명 기법]]&lt;/li&gt;
&lt;li&gt;[[euclidean|유클리드 호제법]]&lt;/li&gt;
&lt;li&gt;[[crt|중국인 나머지 정리]]&lt;/li&gt;
&lt;li&gt;[[combinatorics|조합론 심화]]&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>discrete-math</category><category>mathematics</category><category>foundations</category><category>computer-science</category><author>koa (김신건)</author></item><item><title>점화식 (Recurrence Relations)</title><link>https://shinkeonkim.com/wiki/discrete-math/recurrence-relations/</link><guid isPermaLink="true">https://shinkeonkim.com/wiki/discrete-math/recurrence-relations/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;정의&quot;&gt;정의&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;점화식 (Recurrence Relation)&lt;/strong&gt; 은 수열 $(a_n)$ 의 $n$ 번째 항을 앞선 항 (또는 몇 개) 로 표현하는 관계식입니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;초기 조건&lt;/strong&gt; 과 점화식이 함께 있으면 수열의 모든 항을 순차적으로 결정 가능.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 피보나치 $F_n = F_{n-1} + F_{n-2}$, $F_0 = 0, F_1 = 1$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;컴퓨터 과학 응용&lt;/strong&gt;: 재귀 알고리즘의 시간 복잡도, 자료구조의 크기 분석, 동적 계획법의 상태 전이.&lt;/p&gt;
&lt;h2 id=&quot;유명한-점화식&quot;&gt;유명한 점화식&lt;/h2&gt;
&lt;h3 id=&quot;1-피보나치-수열&quot;&gt;1. 피보나치 수열&lt;/h3&gt;
&lt;p&gt;$$F_n = F_{n-1} + F_{n-2}, \quad F_0 = 0, F_1 = 1$$&lt;/p&gt;
&lt;p&gt;값: $0, 1, 1, 2, 3, 5, 8, 13, 21, 34, \ldots$&lt;/p&gt;
&lt;h3 id=&quot;2-팩토리얼&quot;&gt;2. 팩토리얼&lt;/h3&gt;
&lt;p&gt;$$n! = n \cdot (n-1)!, \quad 0! = 1$$&lt;/p&gt;
&lt;h3 id=&quot;3-하노이-탑&quot;&gt;3. 하노이 탑&lt;/h3&gt;
&lt;p&gt;$n$ 판을 옮기는 최소 이동 수:&lt;/p&gt;
&lt;p&gt;$$T_n = 2 T_{n-1} + 1, \quad T_1 = 1$$&lt;/p&gt;
&lt;p&gt;풀이: $T_n = 2^n - 1$.&lt;/p&gt;
&lt;h3 id=&quot;4-병합-정렬-시간-복잡도&quot;&gt;4. 병합 정렬 시간 복잡도&lt;/h3&gt;
&lt;p&gt;$$T(n) = 2 T(n/2) + O(n)$$&lt;/p&gt;
&lt;p&gt;풀이 ([[recurrence-master-theorem|마스터 정리]]): $T(n) = O(n \log n)$.&lt;/p&gt;
&lt;h3 id=&quot;5-이항-계수&quot;&gt;5. 이항 계수&lt;/h3&gt;
&lt;p&gt;$$\binom{n}{k} = \binom{n-1}{k-1} + \binom{n-1}{k}$$&lt;/p&gt;
&lt;h3 id=&quot;6-카탈란-수&quot;&gt;6. 카탈란 수&lt;/h3&gt;
&lt;p&gt;$$C_n = \sum_{i=0}^{n-1} C_i C_{n-1-i}, \quad C_0 = 1$$&lt;/p&gt;
&lt;p&gt;값: $1, 1, 2, 5, 14, 42, \ldots$&lt;/p&gt;
&lt;h2 id=&quot;시각화-재귀-트리&quot;&gt;시각화: 재귀 트리&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: $T(n) = 2 T(n/2) + n$ 의 재귀 트리.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    n&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                   /  \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                 n/2   n/2       (합 = n)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                / \   / \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              n/4 n/4 n/4 n/4    (합 = n)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;             ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;             1 1 1 ... 1          (n 개의 잎)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;레벨 수&lt;/strong&gt; = $\log_2 n$. &lt;strong&gt;각 레벨의 합&lt;/strong&gt; = $n$. &lt;strong&gt;총 = $n \log n$&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;선형-점화식-풀이&quot;&gt;선형 점화식 풀이&lt;/h2&gt;
&lt;h3 id=&quot;형태&quot;&gt;형태&lt;/h3&gt;
&lt;p&gt;$$a_n = c_1 a_{n-1} + c_2 a_{n-2} + \ldots + c_k a_{n-k}$$&lt;/p&gt;
&lt;p&gt;$c_i$ 는 상수, $c_k \neq 0$. &lt;strong&gt;$k$ 차 선형 동차 상수 계수 점화식&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;특성-방정식&quot;&gt;특성 방정식&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;$a_n = r^n$&lt;/strong&gt; 이라고 가정. 대입:&lt;/p&gt;
&lt;p&gt;$$r^k = c_1 r^{k-1} + c_2 r^{k-2} + \ldots + c_k$$&lt;/p&gt;
&lt;p&gt;$$r^k - c_1 r^{k-1} - \ldots - c_k = 0$$&lt;/p&gt;
&lt;p&gt;이 방정식의 해 $r_1, r_2, \ldots, r_k$ 가 특성근.&lt;/p&gt;
&lt;h3 id=&quot;일반해-서로-다른-특성근&quot;&gt;일반해 (서로 다른 특성근)&lt;/h3&gt;
&lt;p&gt;$$a_n = A_1 r_1^n + A_2 r_2^n + \ldots + A_k r_k^n$$&lt;/p&gt;
&lt;p&gt;$A_i$ 는 초기 조건으로 결정.&lt;/p&gt;
&lt;h3 id=&quot;예-피보나치&quot;&gt;예: 피보나치&lt;/h3&gt;
&lt;p&gt;$F_n = F_{n-1} + F_{n-2}$.&lt;/p&gt;
&lt;p&gt;특성 방정식: $r^2 - r - 1 = 0$&lt;/p&gt;
&lt;p&gt;$r = \frac{1 \pm \sqrt{5}}{2}$&lt;/p&gt;
&lt;p&gt;$\phi = \frac{1 + \sqrt{5}}{2}$ (황금비), $\psi = \frac{1 - \sqrt{5}}{2}$.&lt;/p&gt;
&lt;p&gt;$F_n = A \phi^n + B \psi^n$&lt;/p&gt;
&lt;p&gt;초기 조건 $F_0 = 0, F_1 = 1$ 대입:&lt;/p&gt;
&lt;p&gt;$$F_n = \frac{1}{\sqrt{5}} \left( \phi^n - \psi^n \right)$$&lt;/p&gt;
&lt;p&gt;(&lt;strong&gt;Binet의 공식&lt;/strong&gt;)&lt;/p&gt;
&lt;h3 id=&quot;중복근&quot;&gt;중복근&lt;/h3&gt;
&lt;p&gt;특성근 $r$ 이 $m$ 중근이면 항: $(A_0 + A_1 n + \ldots + A_{m-1} n^{m-1}) r^n$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: $a_n = 4 a_{n-1} - 4 a_{n-2}$.&lt;/p&gt;
&lt;p&gt;특성 방정식: $r^2 - 4r + 4 = (r - 2)^2 = 0$. $r = 2$ (중근).&lt;/p&gt;
&lt;p&gt;일반해: $a_n = (A + Bn) 2^n$.&lt;/p&gt;
&lt;h2 id=&quot;비동차-비선형-항-있음&quot;&gt;비동차 (비선형 항 있음)&lt;/h2&gt;
&lt;p&gt;$$a_n = c_1 a_{n-1} + \ldots + c_k a_{n-k} + f(n)$$&lt;/p&gt;
&lt;p&gt;$f(n) \neq 0$ 이면 비동차.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;일반해 = 동차해 + 특수해&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;특수해 형태는 $f(n)$ 형태에 따라 시행. $f(n) = P(n) s^n$ (다항식 × 지수) 이면 특수해도 유사 형태.&lt;/p&gt;
&lt;h3 id=&quot;예-a_n--2-a_n-1--3n&quot;&gt;예: $a_n = 2 a_{n-1} + 3^n$&lt;/h3&gt;
&lt;p&gt;동차해: $r = 2 \Rightarrow A \cdot 2^n$&lt;/p&gt;
&lt;p&gt;특수해 시도: $a_n^{(p)} = c \cdot 3^n$. 대입:&lt;/p&gt;
&lt;p&gt;$c \cdot 3^n = 2 c \cdot 3^{n-1} + 3^n$&lt;/p&gt;
&lt;p&gt;$3c = 2c + 3$&lt;/p&gt;
&lt;p&gt;$c = 3$&lt;/p&gt;
&lt;p&gt;일반해: $a_n = A \cdot 2^n + 3 \cdot 3^n = A \cdot 2^n + 3^{n+1}$&lt;/p&gt;
&lt;h2 id=&quot;마스터-정리-master-theorem&quot;&gt;마스터 정리 (Master Theorem)&lt;/h2&gt;
&lt;p&gt;분할 정복 재귀:&lt;/p&gt;
&lt;p&gt;$$T(n) = a T(n/b) + f(n)$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$a \geq 1$: 하위 문제 수&lt;/li&gt;
&lt;li&gt;$b &gt; 1$: 크기 축소 비율&lt;/li&gt;
&lt;li&gt;$f(n)$: 분할/병합 비용&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;세 경우&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;$f(n) = O(n^{\log_b a - \epsilon})$ ($\epsilon &gt; 0$): $T(n) = \Theta(n^{\log_b a})$&lt;/li&gt;
&lt;li&gt;$f(n) = \Theta(n^{\log_b a})$: $T(n) = \Theta(n^{\log_b a} \log n)$&lt;/li&gt;
&lt;li&gt;$f(n) = \Omega(n^{\log_b a + \epsilon})$ 이고 정규 조건: $T(n) = \Theta(f(n))$&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;알고리즘-예&quot;&gt;알고리즘 예&lt;/h3&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;알고리즘&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;점화식&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;결과&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;이진 탐색&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$T(n) = T(n/2) + 1$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\Theta(\log n)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;병합 정렬&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$T(n) = 2 T(n/2) + n$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\Theta(n \log n)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;카라추바 곱셈&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$T(n) = 3 T(n/2) + n$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\Theta(n^{\log_2 3}) \approx \Theta(n^{1.585})$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;Strassen 행렬 곱&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$T(n) = 7 T(n/2) + n^2$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\Theta(n^{\log_2 7}) \approx \Theta(n^{2.807})$&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;생성함수-generating-functions&quot;&gt;생성함수 (Generating Functions)&lt;/h2&gt;
&lt;p&gt;수열을 함수로.&lt;/p&gt;
&lt;p&gt;$$G(x) = \sum_{n=0}^{\infty} a_n x^n$$&lt;/p&gt;
&lt;h3 id=&quot;예-피보나치-1&quot;&gt;예: 피보나치&lt;/h3&gt;
&lt;p&gt;$G(x) = \sum F_n x^n$. 점화식 $F_n = F_{n-1} + F_{n-2}$ 로:&lt;/p&gt;
&lt;p&gt;$G(x) - x G(x) - x^2 G(x) = F_0 + (F_1 - F_0) x = x$&lt;/p&gt;
&lt;p&gt;$$G(x) = \frac{x}{1 - x - x^2}$$&lt;/p&gt;
&lt;p&gt;부분 분수 분해 -&gt; $F_n$ 의 닫힌 공식.&lt;/p&gt;
&lt;h3 id=&quot;유용성&quot;&gt;유용성&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;조합 항등식 증명&lt;/li&gt;
&lt;li&gt;확률 생성 함수&lt;/li&gt;
&lt;li&gt;재귀 관계 해결&lt;/li&gt;
&lt;li&gt;점근 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;자세한 것은 [[generating-function|생성함수]] 참조.&lt;/p&gt;
&lt;h2 id=&quot;유용한-점화식-표&quot;&gt;유용한 점화식 표&lt;/h2&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;점화식&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;해&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$a_n = a_{n-1} + c$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$a_n = a_0 + cn$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$a_n = c \cdot a_{n-1}$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$a_n = a_0 c^n$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$a_n = a_{n-1} + f(n)$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$a_n = a_0 + \sum_{k=1}^{n} f(k)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$a_n = c a_{n-1} + f(n)$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$a_n = c^n a_0 + \sum_{k=1}^{n} c^{n-k} f(k)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$T(n) = 2T(n/2) + n$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\Theta(n \log n)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$T(n) = T(n-1) + O(1)$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\Theta(n)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$T(n) = T(n-1) + n$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\Theta(n^2)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$T(n) = 2 T(n-1) + 1$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\Theta(2^n)$&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;컴퓨터-과학-응용&quot;&gt;컴퓨터 과학 응용&lt;/h2&gt;
&lt;h3 id=&quot;알고리즘-분석&quot;&gt;알고리즘 분석&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;재귀 알고리즘의 시간 복잡도&lt;/strong&gt; = 점화식.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이진 탐색: $T(n) = T(n/2) + O(1)$&lt;/li&gt;
&lt;li&gt;병합 정렬: $T(n) = 2T(n/2) + O(n)$&lt;/li&gt;
&lt;li&gt;퀵 정렬 (worst): $T(n) = T(n-1) + O(n)$&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;동적-계획법&quot;&gt;동적 계획법&lt;/h3&gt;
&lt;p&gt;DP 는 근본적으로 점화식.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;피보나치 $F_n = F_{n-1} + F_{n-2}$&lt;/li&gt;
&lt;li&gt;LCS: $L[i][j] = \max(L[i-1][j], L[i][j-1], L[i-1][j-1] + \mathbb{1}[a_i = b_j])$&lt;/li&gt;
&lt;li&gt;배낭: $K[i][w] = \max(K[i-1][w], K[i-1][w - w_i] + v_i)$&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;자료구조&quot;&gt;자료구조&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B-tree 높이&lt;/strong&gt;: $h = O(\log_M n)$ ($M$ = 분기)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;힙 삽입/삭제&lt;/strong&gt;: $O(\log n)$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AVL 트리&lt;/strong&gt;: 회전 균형&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;확률&quot;&gt;확률&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;랜덤 워크의 재귀&lt;/strong&gt;: $E[T_n] = c + \frac{1}{2}(E[T_{n-1}] + E[T_{n+1}])$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;랜덤 알고리즘의 기댓값 분석&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;함정&quot;&gt;함정&lt;/h2&gt;
&lt;h3 id=&quot;1-초기-조건-개수&quot;&gt;1. 초기 조건 개수&lt;/h3&gt;
&lt;p&gt;$k$ 차 점화식은 $k$ 개의 초기 조건 필요. $F_n = F_{n-1} + F_{n-2}$ 는 $F_0, F_1$ 필요.&lt;/p&gt;
&lt;h3 id=&quot;2-특성-방정식-근&quot;&gt;2. 특성 방정식 근&lt;/h3&gt;
&lt;p&gt;중복근 처리 잊지 말 것. $(r - r_0)^m$ 이면 $n^0, n^1, \ldots, n^{m-1}$ 곱한 항.&lt;/p&gt;
&lt;h3 id=&quot;3-마스터-정리-경우-3&quot;&gt;3. 마스터 정리 경우 3&lt;/h3&gt;
&lt;p&gt;정규 조건 (regularity): $a f(n/b) \leq c f(n)$ ($c &amp;#x3C; 1$). 대부분 성립하지만 확인 필요.&lt;/p&gt;
&lt;h3 id=&quot;4-지수-vs-다항&quot;&gt;4. 지수 vs 다항&lt;/h3&gt;
&lt;p&gt;$T(n) = 2 T(n/2) + 1$ 는 $\Theta(n)$ (지수 $\log_2 2 = 1$).
$T(n) = 2 T(n-1) + 1$ 는 $\Theta(2^n)$ (분할 대신 감소).&lt;/p&gt;
&lt;p&gt;두 형태 구분 필수.&lt;/p&gt;
&lt;h2 id=&quot;관련-위키&quot;&gt;관련 위키&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[[discrete-mathematics|이산수학 (개요)]]&lt;/li&gt;
&lt;li&gt;[[proof-techniques|증명 기법]] - 귀납법&lt;/li&gt;
&lt;li&gt;[[combinatorics-basics|조합론]]&lt;/li&gt;
&lt;li&gt;[[generating-function|생성함수]]&lt;/li&gt;
&lt;li&gt;[[catalan-number|카탈란 수]]&lt;/li&gt;
&lt;li&gt;[[graph-theory-basics|그래프 이론]]&lt;/li&gt;
&lt;li&gt;[[dp-optimization|DP 최적화]] - 관련 알고리즘&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>discrete-math</category><category>recurrence</category><category>algorithm-analysis</category><author>koa (김신건)</author></item><item><title>조합론 기초 (Combinatorics)</title><link>https://shinkeonkim.com/wiki/discrete-math/combinatorics-basics/</link><guid isPermaLink="true">https://shinkeonkim.com/wiki/discrete-math/combinatorics-basics/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;정의&quot;&gt;정의&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;조합론 (Combinatorics)&lt;/strong&gt; 은 유한 집합의 원소를 세거나 배열하는 방법을 다루는 수학 분야입니다. “경우의 수 계산” 과 “구조의 존재/구성” 이 핵심 주제.&lt;/p&gt;
&lt;p&gt;컴퓨터 과학에서 알고리즘 복잡도 분석, 확률 계산, 데이터 구조 분석에 필수.&lt;/p&gt;
&lt;h2 id=&quot;두-기본-원리&quot;&gt;두 기본 원리&lt;/h2&gt;
&lt;h3 id=&quot;합의-법칙-sum-rule&quot;&gt;합의 법칙 (Sum Rule)&lt;/h3&gt;
&lt;p&gt;서로소인 사건 $A$ 와 $B$ 가 각각 $n_1, n_2$ 가지 방법으로 발생 가능하다면, $A$ 또는 $B$ 는 $n_1 + n_2$ 가지.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 도서관에 소설 20권, 시집 10권. 한 권 선택하는 방법 = $20 + 10 = 30$.&lt;/p&gt;
&lt;h3 id=&quot;곱의-법칙-product-rule&quot;&gt;곱의 법칙 (Product Rule)&lt;/h3&gt;
&lt;p&gt;절차가 두 단계로 이루어지고 첫 단계 $n_1$ 가지, 둘째 단계 $n_2$ 가지라면, 전체 방법 수 = $n_1 \cdot n_2$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 4자리 PIN (0-9 각 자리). $10 \times 10 \times 10 \times 10 = 10^4 = 10000$.&lt;/p&gt;
&lt;h2 id=&quot;순열-permutation&quot;&gt;순열 (Permutation)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;순서 있는 배열&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;n-개에서-r-개-뽑아-배열&quot;&gt;$n$ 개에서 $r$ 개 뽑아 배열&lt;/h3&gt;
&lt;p&gt;$$
P(n, r) = \frac{n!}{(n-r)!} = n \cdot (n-1) \cdot (n-2) \cdots (n-r+1)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 5명 중 3명을 정렬해 세우기 = $P(5, 3) = 5 \cdot 4 \cdot 3 = 60$.&lt;/p&gt;
&lt;h3 id=&quot;n-개-전체-순열&quot;&gt;$n$ 개 전체 순열&lt;/h3&gt;
&lt;p&gt;$$
P(n, n) = n!
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 5권의 책을 책장에 배열 = $5! = 120$.&lt;/p&gt;
&lt;h3 id=&quot;원순열-circular-permutation&quot;&gt;원순열 (Circular Permutation)&lt;/h3&gt;
&lt;p&gt;$n$ 개를 원형 배열 = $(n-1)!$ (회전으로 같은 것 제외).&lt;/p&gt;
&lt;h2 id=&quot;조합-combination&quot;&gt;조합 (Combination)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;순서 없는 선택&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;이항계수-binomnr&quot;&gt;이항계수 $\binom{n}{r}$&lt;/h3&gt;
&lt;p&gt;$$
\binom{n}{r} = C(n, r) = \frac{n!}{r! (n - r)!}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 10명 중 3명 선택 (순서 무관) = $\binom{10}{3} = \frac{10!}{3! 7!} = 120$.&lt;/p&gt;
&lt;h3 id=&quot;이항-정리&quot;&gt;이항 정리&lt;/h3&gt;
&lt;p&gt;$$
(x + y)^n = \sum_{k=0}^{n} \binom{n}{k} x^{n-k} y^k
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: $(x + y)^4 = x^4 + 4x^3 y + 6x^2 y^2 + 4 x y^3 + y^4$&lt;/p&gt;
&lt;h3 id=&quot;파스칼-삼각형&quot;&gt;파스칼 삼각형&lt;/h3&gt;
&lt;p&gt;$$
\binom{n}{k} = \binom{n-1}{k-1} + \binom{n-1}{k}
$$&lt;/p&gt;
&lt;p&gt;시각화:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      1   1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     1  2  1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    1  3  3  1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   1  4  6  4  1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1  5 10 10  5  1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; 1  6 15 20 15  6  1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;각 원소는 위의 두 원소의 합.&lt;/p&gt;
&lt;h2 id=&quot;시각화-순열-vs-조합&quot;&gt;시각화: 순열 vs 조합&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;${A, B, C}$ 에서 2개 선택&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  subgraph &quot;순열 P(3,2) = 6&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    AB1[&quot;AB&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    BA1[&quot;BA&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    AC1[&quot;AC&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    CA1[&quot;CA&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    BC1[&quot;BC&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    CB1[&quot;CB&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  subgraph &quot;조합 C(3,2) = 3&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    AB2[&quot;{A,B}&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    AC2[&quot;{A,C}&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    BC2[&quot;{B,C}&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;순열 6개 각각이 2! 씩 그룹지어 조합 3개로 축약. &lt;strong&gt;$P(n,r) = C(n,r) \cdot r!$&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;중복-순열조합&quot;&gt;중복 순열/조합&lt;/h2&gt;
&lt;h3 id=&quot;중복-순열&quot;&gt;중복 순열&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;중복 허용&lt;/strong&gt; 순서 있는 배열. $n^r$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 각 자리에 0-9 넣는 4자리 PIN = $10^4 = 10000$.&lt;/p&gt;
&lt;h3 id=&quot;중복-조합&quot;&gt;중복 조합&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;중복 허용&lt;/strong&gt; 순서 없는 선택. $\binom{n + r - 1}{r} = \binom{n + r - 1}{n - 1}$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 5가지 맛 아이스크림에서 3 스쿱 (중복 허용) 선택 = $\binom{5 + 3 - 1}{3} = \binom{7}{3} = 35$.&lt;/p&gt;
&lt;h3 id=&quot;별과-막대-stars-and-bars&quot;&gt;별과 막대 (Stars and Bars)&lt;/h3&gt;
&lt;p&gt;$x_1 + x_2 + \ldots + x_k = n$ ($x_i \geq 0$ 정수) 의 해의 수 = $\binom{n + k - 1}{k - 1}$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;시각화&lt;/strong&gt;: $n$ 개의 별 사이에 $k - 1$ 개의 막대를 배치.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;★★|★|★★★    (3개 그룹으로 나눔)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;n=6, k=3, 배치 = C(6+2, 2) = 28&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;포함배제-원리-inclusion-exclusion&quot;&gt;포함배제 원리 (Inclusion-Exclusion)&lt;/h2&gt;
&lt;p&gt;두 집합:
$$
|A \cup B| = |A| + |B| - |A \cap B|
$$&lt;/p&gt;
&lt;p&gt;세 집합:
$$
|A \cup B \cup C| = |A| + |B| + |C| - |A \cap B| - |A \cap C| - |B \cap C| + |A \cap B \cap C|
$$&lt;/p&gt;
&lt;p&gt;일반:
$$
|A_1 \cup A_2 \cup \ldots \cup A_n| = \sum_i |A_i| - \sum_{i&amp;#x3C;j} |A_i \cap A_j| + \sum_{i&amp;#x3C;j&amp;#x3C;k} |A_i \cap A_j \cap A_k| - \ldots
$$&lt;/p&gt;
&lt;h3 id=&quot;시각화-3-집합-벤-다이어그램&quot;&gt;시각화 (3 집합 벤 다이어그램)&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         A&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │  a   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ┌───┼──────┼───┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │ b │ ab   │ c │  B&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │   │  abc │   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │   │ ac bc│   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └───┼──────┼───┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │  ??  │  C&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        └──────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;교차 영역들의 중복 카운트를 부호 교대로 보정.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: 1부터 100까지 정수 중 2 또는 3 또는 5의 배수 개수.&lt;/p&gt;
&lt;p&gt;$|A \cup B \cup C| = 50 + 33 + 20 - 16 - 10 - 6 + 3 = 74$.&lt;/p&gt;
&lt;h2 id=&quot;계수-방법-카테고리&quot;&gt;계수 방법 카테고리&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;핵심 질문 3가지&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;순서 중요한가?&lt;/strong&gt; (yes -&gt; 순열, no -&gt; 조합)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;중복 허용?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;완전히 채우는가 (모두 사용) or 일부만?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;상황&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;공식&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$r$ 개 뽑아 배열 (중복 X)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$P(n, r) = n!/(n-r)!$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$r$ 개 뽑아 배열 (중복 O)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$n^r$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$r$ 개 선택 (중복 X)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$C(n, r) = n! / [r!(n-r)!]$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;$r$ 개 선택 (중복 O)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$C(n+r-1, r)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;원 순열&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$(n-1)!$&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;비둘기집-원리-pigeonhole-principle&quot;&gt;비둘기집 원리 (Pigeonhole Principle)&lt;/h2&gt;
&lt;p&gt;$n+1$ 마리의 비둘기를 $n$ 개의 집에 넣으면, 어떤 집에는 &lt;strong&gt;최소 2 마리&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;일반화&lt;/strong&gt;: $N$ 개 원소를 $k$ 개 상자에 넣으면 어떤 상자에는 최소 $\lceil N/k \rceil$ 개.&lt;/p&gt;
&lt;h3 id=&quot;응용-예&quot;&gt;응용 예&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;파일 시스템 해시 충돌&lt;/strong&gt;: 1000 파일을 100 버킷에 -&gt; 어떤 버킷은 최소 10 파일.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;생일 문제&lt;/strong&gt;: 366 명 있으면 반드시 생일 같은 사람 존재.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;정보이론&lt;/strong&gt;: 압축의 이론 한계.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;이항-항등식-binomial-identities&quot;&gt;이항 항등식 (Binomial Identities)&lt;/h2&gt;
&lt;p&gt;핵심 항등식 (모두 조합적 의미가 있음):&lt;/p&gt;
&lt;p&gt;$$
\binom{n}{k} = \binom{n}{n-k} \quad (\text{대칭})
$$&lt;/p&gt;
&lt;p&gt;$$
\sum_{k=0}^{n} \binom{n}{k} = 2^n \quad (\text{모든 부분집합 수})
$$&lt;/p&gt;
&lt;p&gt;$$
\sum_{k=0}^{n} (-1)^k \binom{n}{k} = 0 \quad (n \geq 1)
$$&lt;/p&gt;
&lt;p&gt;$$
\sum_{k=0}^{n} \binom{n}{k}^2 = \binom{2n}{n} \quad (\text{Vandermonde})
$$&lt;/p&gt;
&lt;p&gt;$$
\binom{n}{k} = \binom{n-1}{k-1} + \binom{n-1}{k} \quad (\text{파스칼})
$$&lt;/p&gt;
&lt;h2 id=&quot;컴퓨터-과학-응용&quot;&gt;컴퓨터 과학 응용&lt;/h2&gt;
&lt;h3 id=&quot;알고리즘&quot;&gt;알고리즘&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;정렬&lt;/strong&gt;: 비교 정렬의 최소 비교 횟수 $\Omega(n \log n)$ 는 &lt;strong&gt;판정 트리 (decision tree)&lt;/strong&gt; 조합론.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DP&lt;/strong&gt;: 상태 수 = 경우의 수 계산.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NP-완전&lt;/strong&gt;: 조합 최적화 대부분.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;해시&quot;&gt;해시&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;버킷 분배&lt;/strong&gt;: 비둘기집 -&gt; 충돌 불가피.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;해시 충돌 확률&lt;/strong&gt;: 생일 역설 응용.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;정보이론&quot;&gt;정보이론&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;엔트로피&lt;/strong&gt;: 이산 확률 분포의 정보량.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kraft 부등식&lt;/strong&gt;: 접두어 없는 코드의 조건.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;그래프-알고리즘&quot;&gt;그래프 알고리즘&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;경로 수&lt;/strong&gt;: 인접 행렬 거듭제곱.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;매칭 수&lt;/strong&gt;: permanent (계산 hard).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;함정&quot;&gt;함정&lt;/h2&gt;
&lt;h3 id=&quot;1-순서와-중복&quot;&gt;1. 순서와 중복&lt;/h3&gt;
&lt;p&gt;문제를 잘 읽어야. “선택” 이라도 순서가 중요한지, 중복 가능한지 별도 판단.&lt;/p&gt;
&lt;h3 id=&quot;2-케이스-분석-겹침&quot;&gt;2. 케이스 분석 겹침&lt;/h3&gt;
&lt;p&gt;집합을 나누어 세면 &lt;strong&gt;서로소&lt;/strong&gt; 여야 합의 법칙. 겹치면 포함배제로 보정.&lt;/p&gt;
&lt;h3 id=&quot;3-이항-계수-오버플로&quot;&gt;3. 이항 계수 오버플로&lt;/h3&gt;
&lt;p&gt;$C(100, 50) \approx 10^{29}$. &lt;code&gt;long long&lt;/code&gt; 도 넘음. mod 로 계산 필요.&lt;/p&gt;
&lt;h3 id=&quot;4-0-은-1&quot;&gt;4. $0!$ 은 1&lt;/h3&gt;
&lt;p&gt;관용. 조합 공식에서 자연스러움. $C(n, 0) = 1$.&lt;/p&gt;
&lt;h2 id=&quot;관련-위키&quot;&gt;관련 위키&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[[discrete-mathematics|이산수학 (개요)]]&lt;/li&gt;
&lt;li&gt;[[sets-relations-functions|집합, 관계, 함수]]&lt;/li&gt;
&lt;li&gt;[[combinatorics|조합론 심화]] (기존 위키)&lt;/li&gt;
&lt;li&gt;[[pascal-triangle|파스칼 삼각형]]&lt;/li&gt;
&lt;li&gt;[[inclusion-exclusion|포함배제 원리]]&lt;/li&gt;
&lt;li&gt;[[catalan-number|카탈란 수]]&lt;/li&gt;
&lt;li&gt;[[generating-function|생성함수]]&lt;/li&gt;
&lt;li&gt;[[graph-theory-basics|그래프 이론]]&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>discrete-math</category><category>combinatorics</category><category>counting</category><author>koa (김신건)</author></item><item><title>증명 기법 (Proof Techniques)</title><link>https://shinkeonkim.com/wiki/discrete-math/proof-techniques/</link><guid isPermaLink="true">https://shinkeonkim.com/wiki/discrete-math/proof-techniques/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;정의&quot;&gt;정의&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;증명 (proof)&lt;/strong&gt; 은 명제가 참임을 논리적으로 확립하는 절차입니다. 컴퓨터 과학에서는 &lt;strong&gt;알고리즘 정확성&lt;/strong&gt;, &lt;strong&gt;자료구조 불변식&lt;/strong&gt;, &lt;strong&gt;암호 안전성&lt;/strong&gt;, &lt;strong&gt;형식 검증&lt;/strong&gt; 등에 필수.&lt;/p&gt;
&lt;p&gt;이 문서는 주요 증명 기법을 정리합니다.&lt;/p&gt;
&lt;h2 id=&quot;1-직접-증명-direct-proof&quot;&gt;1. 직접 증명 (Direct Proof)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“if $P$ then $Q$”&lt;/strong&gt; 를 증명하려면:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;$P$ 를 가정&lt;/li&gt;
&lt;li&gt;논리 규칙과 이미 알려진 사실로부터&lt;/li&gt;
&lt;li&gt;$Q$ 를 도출&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;예-두-홀수의-합은-짝수&quot;&gt;예: 두 홀수의 합은 짝수&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;증명&lt;/strong&gt;: $a, b$ 를 홀수라고 하자. $a = 2m + 1$, $b = 2n + 1$ ($m, n \in \mathbb{Z}$).&lt;/p&gt;
&lt;p&gt;$a + b = (2m + 1) + (2n + 1) = 2(m + n + 1)$&lt;/p&gt;
&lt;p&gt;$m + n + 1 \in \mathbb{Z}$ 이므로 $a + b$ 는 짝수. &lt;strong&gt;QED&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;2-대우-증명-proof-by-contrapositive&quot;&gt;2. 대우 증명 (Proof by Contrapositive)&lt;/h2&gt;
&lt;p&gt;$P \to Q$ 를 증명하려면 대우 $\neg Q \to \neg P$ 를 증명.&lt;/p&gt;
&lt;h3 id=&quot;예-n2-가-짝수이면-n-도-짝수&quot;&gt;예: $n^2$ 가 짝수이면 $n$ 도 짝수&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;증명&lt;/strong&gt;: 대우로 “$n$ 이 홀수이면 $n^2$ 도 홀수” 를 증명.&lt;/p&gt;
&lt;p&gt;$n$ 이 홀수 -&gt; $n = 2k + 1$ -&gt; $n^2 = 4k^2 + 4k + 1 = 2(2k^2 + 2k) + 1$. 홀수. &lt;strong&gt;QED&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;3-귀류법-proof-by-contradiction-reductio-ad-absurdum&quot;&gt;3. 귀류법 (Proof by Contradiction, Reductio ad Absurdum)&lt;/h2&gt;
&lt;p&gt;명제 $P$ 를 증명하려면 $\neg P$ 를 가정하고 모순을 유도.&lt;/p&gt;
&lt;h3 id=&quot;예-sqrt2-는-무리수&quot;&gt;예: $\sqrt{2}$ 는 무리수&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;증명&lt;/strong&gt;: $\sqrt{2}$ 가 유리수라 가정. $\sqrt{2} = \frac{p}{q}$ (기약분수, $\gcd(p, q) = 1$).&lt;/p&gt;
&lt;p&gt;$2 q^2 = p^2$&lt;/p&gt;
&lt;p&gt;$p^2$ 가 짝수 -&gt; $p$ 짝수 -&gt; $p = 2m$.&lt;/p&gt;
&lt;p&gt;$2 q^2 = 4 m^2$&lt;/p&gt;
&lt;p&gt;$q^2 = 2 m^2$&lt;/p&gt;
&lt;p&gt;$q^2$ 짝수 -&gt; $q$ 짝수.&lt;/p&gt;
&lt;p&gt;$p$ 와 $q$ 모두 짝수 -&gt; $\gcd(p, q) \geq 2$. 기약분수 가정과 모순. &lt;strong&gt;QED&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;예-소수는-무한하다&quot;&gt;예: 소수는 무한하다&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;증명 (유클리드)&lt;/strong&gt;: 소수가 유한하다고 가정. $p_1, p_2, \ldots, p_n$ 이 모든 소수.&lt;/p&gt;
&lt;p&gt;$N = p_1 p_2 \cdots p_n + 1$ 을 고려.&lt;/p&gt;
&lt;p&gt;$N$ 을 어떤 $p_i$ 로 나누면 나머지 1. 따라서 $N$ 은 모든 $p_i$ 로 나누어떨어지지 않음.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;두 경우&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;$N$ 이 소수 -&gt; 목록에 없는 새 소수 -&gt; 모순&lt;/li&gt;
&lt;li&gt;$N$ 이 합성수 -&gt; 목록에 없는 소인수 존재 -&gt; 모순&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;QED&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;4-존재-증명-existence-proof&quot;&gt;4. 존재 증명 (Existence Proof)&lt;/h2&gt;
&lt;p&gt;$\exists x, P(x)$ 를 증명.&lt;/p&gt;
&lt;h3 id=&quot;구성적-constructive&quot;&gt;구성적 (Constructive)&lt;/h3&gt;
&lt;p&gt;실제로 $x$ 를 찾음.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: “짝수인 소수가 존재한다”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;증명: $2$ 를 제시. 짝수이고 소수. &lt;strong&gt;QED&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;비구성적-non-constructive&quot;&gt;비구성적 (Non-constructive)&lt;/h3&gt;
&lt;p&gt;존재를 논리적으로 보이지만 실제 $x$ 는 제시 안 함.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;: “$a^b$ 가 유리수인 무리수 $a, b$ 가 존재한다”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;후보: $a = \sqrt{2}, b = \sqrt{2}$.&lt;/li&gt;
&lt;li&gt;$\sqrt{2}^{\sqrt{2}}$ 가 유리수라면: $a = b = \sqrt{2}$ 로 완료.&lt;/li&gt;
&lt;li&gt;아니면 무리수. $a’ = \sqrt{2}^{\sqrt{2}}, b’ = \sqrt{2}$.
$a’^{b’} = (\sqrt{2}^{\sqrt{2}})^{\sqrt{2}} = \sqrt{2}^2 = 2$ 유리수. &lt;strong&gt;QED&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;두 경우 중 어느 것이 성립하는지 몰라도 존재 확인 가능.&lt;/p&gt;
&lt;h2 id=&quot;5-반례-증명-proof-by-counterexample&quot;&gt;5. 반례 증명 (Proof by Counterexample)&lt;/h2&gt;
&lt;p&gt;$\forall x, P(x)$ 가 &lt;strong&gt;거짓&lt;/strong&gt; 임을 보이려면 하나의 반례를 제시.&lt;/p&gt;
&lt;h3 id=&quot;예-모든-소수는-홀수-는-거짓&quot;&gt;예: “모든 소수는 홀수” 는 거짓&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;반례&lt;/strong&gt;: 2 는 소수이지만 짝수.&lt;/p&gt;
&lt;h2 id=&quot;6-수학적-귀납법-mathematical-induction&quot;&gt;6. 수학적 귀납법 (Mathematical Induction)&lt;/h2&gt;
&lt;p&gt;$P(n)$ 이 모든 $n \geq n_0$ 에 대해 참임을 증명.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;단계&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;기저 (base)&lt;/strong&gt;: $P(n_0)$ 참 증명.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;귀납 단계 (inductive step)&lt;/strong&gt;: $P(k)$ 참 -&gt; $P(k+1)$ 참 증명.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;결론&lt;/strong&gt;: $P(n)$ 이 모든 $n \geq n_0$ 에 대해 참.&lt;/p&gt;
&lt;h3 id=&quot;시각화&quot;&gt;시각화&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  Base[&quot;기저: P(n₀) 참&quot;] --&gt; Step1[&quot;P(n₀) → P(n₀+1)&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  Step1 --&gt; Step2[&quot;P(n₀+1) → P(n₀+2)&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  Step2 --&gt; Step3[&quot;P(n₀+2) → P(n₀+3)&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  Step3 --&gt; Dots[&quot;...&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  Dots --&gt; Concl[&quot;모든 n ≥ n₀&quot;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;도미노 비유&lt;/strong&gt;: 첫 도미노를 넘어뜨리면 (기저), 그리고 각 도미노가 다음을 넘어뜨리면 (귀납 단계), 모든 도미노가 넘어짐.&lt;/p&gt;
&lt;h3 id=&quot;예-1--2--ldots--n--nn12&quot;&gt;예: $1 + 2 + \ldots + n = n(n+1)/2$&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;기저&lt;/strong&gt;: $n = 1$. 좌변 = 1, 우변 = $1 \cdot 2 / 2 = 1$. 성립.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;귀납 단계&lt;/strong&gt;: $P(k)$ 참이라 가정, $P(k+1)$ 증명.&lt;/p&gt;
&lt;p&gt;$1 + 2 + \ldots + k + (k+1) = \frac{k(k+1)}{2} + (k+1)$ (귀납 가정)&lt;/p&gt;
&lt;p&gt;$= (k+1) \left( \frac{k}{2} + 1 \right) = \frac{(k+1)(k+2)}{2}$&lt;/p&gt;
&lt;p&gt;$P(k+1)$ 성립. &lt;strong&gt;QED&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;예-2n-개의-조합-부분집합-수&quot;&gt;예: 2^n 개의 조합 (부분집합 수)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;$n$ 원소 집합의 부분집합 수 = $2^n$&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;기저&lt;/strong&gt;: $n = 0$. 공집합 $\emptyset$ 의 부분집합은 $\emptyset$ 하나. $2^0 = 1$. 성립.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;귀납 단계&lt;/strong&gt;: $|S| = k$ 인 집합의 부분집합이 $2^k$ 라 가정.&lt;/p&gt;
&lt;p&gt;$|S’| = k + 1$ 인 집합 $S’ = S \cup {x}$ ($x \notin S$). $S’$ 의 부분집합은:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$x$ 를 포함 X: $S$ 의 부분집합 = $2^k$ 개&lt;/li&gt;
&lt;li&gt;$x$ 를 포함 O: $S$ 의 부분집합에 $x$ 추가 = $2^k$ 개&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;총 $2^k + 2^k = 2^{k+1}$. &lt;strong&gt;QED&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;7-강귀납법-strong-induction&quot;&gt;7. 강귀납법 (Strong Induction)&lt;/h2&gt;
&lt;p&gt;$P(k+1)$ 증명 시 $P(n_0), P(n_0+1), \ldots, P(k)$ &lt;strong&gt;모두&lt;/strong&gt; 를 가정.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;기저&lt;/strong&gt; + &lt;strong&gt;강한 귀납 가정&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;예-모든-n-geq-2-는-소인수-분해-가능&quot;&gt;예: 모든 $n \geq 2$ 는 소인수 분해 가능&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;기저&lt;/strong&gt;: $n = 2$ 는 소수. 성립.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;귀납 단계&lt;/strong&gt;: $2, 3, \ldots, k$ 가 모두 소인수 분해 가능이라 가정. $k+1$ 도 가능 증명.&lt;/p&gt;
&lt;p&gt;두 경우:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;$k + 1$ 이 소수. 완료.&lt;/li&gt;
&lt;li&gt;$k + 1 = ab$ ($1 &amp;#x3C; a, b &amp;#x3C; k+1$). 강귀납 가정으로 $a, b$ 각각 소인수 분해 가능. 그 곱이 $k+1$ 의 분해.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;QED&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;8-구조-귀납법-structural-induction&quot;&gt;8. 구조 귀납법 (Structural Induction)&lt;/h2&gt;
&lt;p&gt;트리, 리스트, 문자열 등 재귀적 구조에 대한 귀납.&lt;/p&gt;
&lt;h3 id=&quot;예-이진-트리의-잎-수&quot;&gt;예: 이진 트리의 잎 수&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;주장&lt;/strong&gt;: 정점이 $n$ 개인 이진 트리의 잎 수 $\leq \lceil n/2 \rceil + 1$ … (사실은 더 정확한 결과 있음)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;구조 귀납&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;기저: 정점 1 개 -&gt; 잎 1 개.&lt;/li&gt;
&lt;li&gt;귀납: 뿌리 + 왼쪽 부트리 + 오른쪽 부트리. 각 부트리에 귀납 가정 적용.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;9-반대칭-원리-well-ordering-principle&quot;&gt;9. 반대칭 원리 (Well-Ordering Principle)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;자연수의 공집합이 아닌 부분집합은 최소 원소를 가짐&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;귀납법과 논리적으로 동치.&lt;/p&gt;
&lt;h3 id=&quot;예-나눗셈-정리&quot;&gt;예: 나눗셈 정리&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;주장&lt;/strong&gt;: 정수 $a$ 와 양의 정수 $b$ 에 대해 유일한 $q, r$ 이 존재해 $a = bq + r$, $0 \leq r &amp;#x3C; b$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;증명&lt;/strong&gt;: 집합 $S = {a - bq \mid q \in \mathbb{Z}, a - bq \geq 0}$.&lt;/p&gt;
&lt;p&gt;$S$ 는 공집합 아님. 최소값 $r = a - bq$ 존재. $0 \leq r$. $r &amp;#x3C; b$ 를 보이면 완료.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;귀류&lt;/strong&gt;: $r \geq b$ 라 가정. $r’ = r - b = a - b(q+1) \geq 0$. $r’ &amp;#x3C; r$ 이면서 $S$ 에 속함. 최소성 모순.&lt;/p&gt;
&lt;h2 id=&quot;컴퓨터-과학-응용&quot;&gt;컴퓨터 과학 응용&lt;/h2&gt;
&lt;h3 id=&quot;알고리즘-정확성&quot;&gt;알고리즘 정확성&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;루프 불변식 (loop invariant)&lt;/strong&gt;: 루프의 각 반복마다 유지되는 성질.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;귀납법으로 증명&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;초기화&lt;/strong&gt;: 첫 반복 전에 성립&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;유지&lt;/strong&gt;: 한 반복 후에도 성립&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;종료&lt;/strong&gt;: 종료 시 원하는 성질 함의&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;자료구조-불변식&quot;&gt;자료구조 불변식&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AVL 트리&lt;/strong&gt;: 각 정점의 두 부트리 높이 차 $\leq 1$.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B-tree&lt;/strong&gt;: 모든 잎이 같은 깊이.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;각 연산이 불변식을 유지함을 귀납법으로 증명.&lt;/p&gt;
&lt;h3 id=&quot;형식-검증&quot;&gt;형식 검증&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;모델 검사&lt;/strong&gt;: 상태 공간 모든 경로 확인&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;정리 증명기&lt;/strong&gt; (Coq, Lean): 대화형 증명&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;재귀-알고리즘&quot;&gt;재귀 알고리즘&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;분할 정복&lt;/strong&gt;: 강귀납법으로 정확성&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;트리 순회&lt;/strong&gt;: 구조 귀납&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;함정&quot;&gt;함정&lt;/h2&gt;
&lt;h3 id=&quot;1-기저-오류&quot;&gt;1. 기저 오류&lt;/h3&gt;
&lt;p&gt;$n = 0$ 또는 $n = 1$ 이 실제 기저인지 확인. $n = 0$ 특수 케이스 잊기 쉬움.&lt;/p&gt;
&lt;h3 id=&quot;2-귀납-가정의-잘못된-적용&quot;&gt;2. 귀납 가정의 잘못된 적용&lt;/h3&gt;
&lt;p&gt;$P(k)$ 를 가정하고 $P(k+1)$ 증명해야. 순환 논증 (증명하려는 것을 가정) 주의.&lt;/p&gt;
&lt;h3 id=&quot;3-무한-케이스-오류&quot;&gt;3. 무한 케이스 오류&lt;/h3&gt;
&lt;p&gt;“모든 유한 케이스에 대해 성립하므로 무한 케이스에도” 는 오류. 귀납법으로 명시적 증명.&lt;/p&gt;
&lt;h3 id=&quot;4-존재-vs-유일&quot;&gt;4. 존재 vs 유일&lt;/h3&gt;
&lt;p&gt;$\exists x, P(x)$ 와 $\exists! x, P(x)$ (유일 존재) 는 다름. 유일성은 별도 증명.&lt;/p&gt;
&lt;h2 id=&quot;관련-위키&quot;&gt;관련 위키&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[[discrete-mathematics|이산수학 (개요)]]&lt;/li&gt;
&lt;li&gt;[[propositional-logic|명제 논리]]&lt;/li&gt;
&lt;li&gt;[[sets-relations-functions|집합, 관계, 함수]]&lt;/li&gt;
&lt;li&gt;[[recurrence-relations|점화식]]&lt;/li&gt;
&lt;li&gt;[[graph-theory-basics|그래프 이론]]&lt;/li&gt;
&lt;li&gt;[[combinatorics-basics|조합론]]&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>discrete-math</category><category>proof</category><category>induction</category><category>logic</category><author>koa (김신건)</author></item><item><title>집합, 관계, 함수 (Sets, Relations, Functions)</title><link>https://shinkeonkim.com/wiki/discrete-math/sets-relations-functions/</link><guid isPermaLink="true">https://shinkeonkim.com/wiki/discrete-math/sets-relations-functions/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;정의&quot;&gt;정의&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;집합 (set)&lt;/strong&gt;: 서로 다른 원소들의 모음&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;관계 (relation)&lt;/strong&gt;: 두 집합 사이의 원소들의 대응 규칙&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;함수 (function)&lt;/strong&gt;: 정의역의 각 원소를 치역의 유일한 원소로 대응시키는 관계&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 세 개념은 이산수학과 컴퓨터 과학의 근본. 자료구조, 데이터베이스, 타입 시스템, 함수형 프로그래밍의 이론적 배경.&lt;/p&gt;
&lt;h2 id=&quot;집합-sets&quot;&gt;집합 (Sets)&lt;/h2&gt;
&lt;h3 id=&quot;표기&quot;&gt;표기&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;나열&lt;/strong&gt;: ${1, 2, 3}$, ${a, b, c}$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;조건 제시&lt;/strong&gt;: ${x \mid x &gt; 0, x \in \mathbb{Z}}$ = 양의 정수&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;중요한 집합&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathbb{N}$: 자연수 ${0, 1, 2, \ldots}$ (또는 ${1, 2, \ldots}$)&lt;/li&gt;
&lt;li&gt;$\mathbb{Z}$: 정수&lt;/li&gt;
&lt;li&gt;$\mathbb{Q}$: 유리수&lt;/li&gt;
&lt;li&gt;$\mathbb{R}$: 실수&lt;/li&gt;
&lt;li&gt;$\mathbb{C}$: 복소수&lt;/li&gt;
&lt;li&gt;$\emptyset$ 또는 ${}$: 공집합&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;기본-연산&quot;&gt;기본 연산&lt;/h3&gt;
&lt;p&gt;주어진 $A, B$ 에 대해:&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;연산&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;정의&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;합집합&lt;/strong&gt; $A \cup B$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A$ 또는 $B$ 의 원소&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;교집합&lt;/strong&gt; $A \cap B$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A$ 그리고 $B$ 의 원소&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;차집합&lt;/strong&gt; $A - B$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A$ 이고 $B$ 가 아닌 원소&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;대칭차&lt;/strong&gt; $A \oplus B$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A$ 또는 $B$ 이지만 둘 다는 아닌 원소&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;여집합&lt;/strong&gt; $\overline{A}$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;전체집합 $U$ 에서 $A$ 아닌 원소&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;부분집합&lt;/strong&gt; $A \subseteq B$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A$ 의 모든 원소가 $B$ 에&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;진부분집합&lt;/strong&gt; $A \subsetneq B$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;부분집합이면서 같지 않음&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;곱집합&lt;/strong&gt; $A \times B$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;순서쌍 ${(a, b) \mid a \in A, b \in B}$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;멱집합&lt;/strong&gt; $\mathcal{P}(A)$&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A$ 의 모든 부분집합&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;시각화-벤-다이어그램&quot;&gt;시각화: 벤 다이어그램&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  subgraph &quot;합집합 A ∪ B&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    A1((&quot;A&quot;)):::a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    B1((&quot;B&quot;)):::b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  subgraph &quot;교집합 A ∩ B&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    A2((&quot;A&quot;)):::a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    B2((&quot;B&quot;)):::b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    I2[&quot;교집합&quot;]:::i&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  classDef a fill:#fee2e2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  classDef b fill:#dbeafe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  classDef i fill:#a7f3d0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;집합의-크기-기수&quot;&gt;집합의 크기 (기수)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;유한 집합&lt;/strong&gt;: $|A|$ = 원소 개수. $|{1, 2, 3}| = 3$.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;무한 집합&lt;/strong&gt;: 셀 수 있는 무한 (예: $\mathbb{N}$, $\mathbb{Z}$) 과 셀 수 없는 무한 (예: $\mathbb{R}$) 이 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;집합의-크기-공식&quot;&gt;집합의 크기 공식&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$|A \cup B| = |A| + |B| - |A \cap B|$&lt;/li&gt;
&lt;li&gt;$|\mathcal{P}(A)| = 2^{|A|}$ (부분집합의 수)&lt;/li&gt;
&lt;li&gt;$|A \times B| = |A| \cdot |B|$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;포함배제 원리로 3개 이상으로 확장. [[combinatorics-basics|조합론]] 참조.&lt;/p&gt;
&lt;h3 id=&quot;집합-항등식-드모르간-등&quot;&gt;집합 항등식 (드모르간 등)&lt;/h3&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;법칙&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;등식&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;결합&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A \cup (B \cup C) = (A \cup B) \cup C$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;교환&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A \cup B = B \cup A$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;분배&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A \cap (B \cup C) = (A \cap B) \cup (A \cap C)$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;드모르간&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$\overline{A \cup B} = \overline{A} \cap \overline{B}$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;흡수&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$A \cup (A \cap B) = A$&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;명제 논리와 완전히 대응 (isomorphic to Boolean algebra).&lt;/p&gt;
&lt;h2 id=&quot;관계-relations&quot;&gt;관계 (Relations)&lt;/h2&gt;
&lt;h3 id=&quot;정의-1&quot;&gt;정의&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;이항 관계 (binary relation)&lt;/strong&gt; $R$ 은 $A \times B$ 의 부분집합. 즉 순서쌍 $(a, b)$ 들의 모임.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;표기&lt;/strong&gt;: $(a, b) \in R$ 또는 $a R b$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$R = {(x, y) \mid x &amp;#x3C; y, x, y \in \mathbb{Z}}$ = 정수의 “미만” 관계&lt;/li&gt;
&lt;li&gt;$R = {(u, v) \mid u \text{ 는 } v \text{ 의 부모}}$ = 부모-자식 관계&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;관계의-성질&quot;&gt;관계의 성질&lt;/h3&gt;
&lt;p&gt;$A$ 위의 관계 $R$ 에 대해:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;성질&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;정의&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;반사&lt;/strong&gt; (reflexive)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;모든 $a \in A$ 에 대해 $a R a$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;대칭&lt;/strong&gt; (symmetric)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$a R b \implies b R a$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;반대칭&lt;/strong&gt; (antisymmetric)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$a R b \land b R a \implies a = b$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;추이&lt;/strong&gt; (transitive)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;$a R b \land b R c \implies a R c$&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;동치-관계&quot;&gt;동치 관계&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;반사 + 대칭 + 추이&lt;/strong&gt; 를 모두 만족하는 관계. 집합을 &lt;strong&gt;동치 클래스&lt;/strong&gt; 로 나눔.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“같다” ($=$)&lt;/li&gt;
&lt;li&gt;정수 mod $n$: $a \equiv b \pmod{n}$&lt;/li&gt;
&lt;li&gt;그래프의 “연결됨” 관계&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;부분-순서-partial-order&quot;&gt;부분 순서 (Partial Order)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;반사 + 반대칭 + 추이&lt;/strong&gt; 를 만족.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\leq$ (정수, 실수)&lt;/li&gt;
&lt;li&gt;$\subseteq$ (집합)&lt;/li&gt;
&lt;li&gt;정수의 나눗셈 관계 $a | b$&lt;/li&gt;
&lt;li&gt;그래프의 위상 정렬&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;hasse-diagram&quot;&gt;Hasse Diagram&lt;/h3&gt;
&lt;p&gt;부분 순서를 시각화:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  E[&quot;12&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  D[&quot;6&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  C[&quot;4&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  B[&quot;3&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A[&quot;2&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  Z[&quot;1&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  E --- D&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  E --- C&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  D --- B&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  D --- A&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  C --- A&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  B --- Z&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  A --- Z&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;정수 12 의 약수 집합 ${1, 2, 3, 4, 6, 12}$ 의 나눗셈 관계.&lt;/p&gt;
&lt;h2 id=&quot;함수-functions&quot;&gt;함수 (Functions)&lt;/h2&gt;
&lt;h3 id=&quot;정의-2&quot;&gt;정의&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;함수&lt;/strong&gt; $f: A \to B$ 는 $A$ 의 각 원소를 $B$ 의 &lt;strong&gt;유일한&lt;/strong&gt; 원소에 대응시키는 관계.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$A$: &lt;strong&gt;정의역 (domain)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;$B$: &lt;strong&gt;공역 (codomain)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;$f(A) = {f(a) \mid a \in A}$: &lt;strong&gt;치역 (range)&lt;/strong&gt; (공역의 부분집합)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;함수의-종류&quot;&gt;함수의 종류&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;단사 (injective, one-to-one)&lt;/strong&gt;: $f(a_1) = f(a_2) \implies a_1 = a_2$. 서로 다른 입력은 서로 다른 출력.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;전사 (surjective, onto)&lt;/strong&gt;: 모든 $b \in B$ 에 대해 $f(a) = b$ 인 $a \in A$ 존재. 치역 = 공역.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;전단사 (bijective)&lt;/strong&gt;: 단사 + 전사. 역함수 존재.&lt;/p&gt;
&lt;h3 id=&quot;시각화&quot;&gt;시각화&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;flowchart LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  subgraph &quot;단사 (injective)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    A1[&quot;1&quot;] --&gt;|f| B1[&quot;a&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    A2[&quot;2&quot;] --&gt;|f| B2[&quot;b&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    A3[&quot;3&quot;] --&gt;|f| B3[&quot;c&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    B4[&quot;d&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    B5[&quot;e&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  subgraph &quot;전사 (surjective)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    C1[&quot;1&quot;] --&gt;|f| D1[&quot;a&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    C2[&quot;2&quot;] --&gt;|f| D1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    C3[&quot;3&quot;] --&gt;|f| D2[&quot;b&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    C4[&quot;4&quot;] --&gt;|f| D3[&quot;c&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  subgraph &quot;전단사 (bijective)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    E1[&quot;1&quot;] --&gt;|f| F1[&quot;a&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    E2[&quot;2&quot;] --&gt;|f| F2[&quot;b&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    E3[&quot;3&quot;] --&gt;|f| F3[&quot;c&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;단사: 안 쓰인 공역 원소 OK, 하지만 중복 대응 안 됨&lt;/li&gt;
&lt;li&gt;전사: 공역 다 커버, 하지만 여러 정의역이 같은 곳으로 OK&lt;/li&gt;
&lt;li&gt;전단사: 위 둘 다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;함수의-합성&quot;&gt;함수의 합성&lt;/h3&gt;
&lt;p&gt;$f: A \to B$, $g: B \to C$ 이면 $g \circ f: A \to C$ 정의.&lt;/p&gt;
&lt;p&gt;$(g \circ f)(x) = g(f(x))$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;성질&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;결합: $(h \circ g) \circ f = h \circ (g \circ f)$&lt;/li&gt;
&lt;li&gt;교환 X: 일반적으로 $g \circ f \neq f \circ g$&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;역함수&quot;&gt;역함수&lt;/h3&gt;
&lt;p&gt;$f: A \to B$ 가 전단사이면 역함수 $f^{-1}: B \to A$ 존재.&lt;/p&gt;
&lt;p&gt;$f^{-1}(f(a)) = a$, $f(f^{-1}(b)) = b$&lt;/p&gt;
&lt;h2 id=&quot;컴퓨터-과학-응용&quot;&gt;컴퓨터 과학 응용&lt;/h2&gt;
&lt;h3 id=&quot;자료구조&quot;&gt;자료구조&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;집합&lt;/strong&gt;: &lt;code&gt;HashSet&lt;/code&gt;, &lt;code&gt;TreeSet&lt;/code&gt;, &lt;code&gt;set&lt;/code&gt; (Python)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;관계&lt;/strong&gt;: 데이터베이스의 테이블 = $A \times B$ 의 부분집합&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;함수&lt;/strong&gt;: &lt;code&gt;Map&lt;/code&gt;, &lt;code&gt;Dict&lt;/code&gt;, &lt;code&gt;HashMap&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;함수형-프로그래밍&quot;&gt;함수형 프로그래밍&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;First-class function&lt;/strong&gt;: 함수를 값으로&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;함수 합성&lt;/strong&gt;: $g \circ f$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;불변성&lt;/strong&gt;: 수학적 함수처럼&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;타입-시스템&quot;&gt;타입 시스템&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;타입 = 집합&lt;/strong&gt;: &lt;code&gt;int&lt;/code&gt; = 정수 집합, &lt;code&gt;bool&lt;/code&gt; = ${T, F}$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;함수 타입&lt;/strong&gt;: $A \to B$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;곱 타입&lt;/strong&gt;: &lt;code&gt;(int, string)&lt;/code&gt; = $\mathbb{Z} \times \text{String}$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;합 타입&lt;/strong&gt;: &lt;code&gt;Result&amp;#x3C;T, E&gt;&lt;/code&gt; = $T \sqcup E$ (disjoint union)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;관계형-데이터베이스&quot;&gt;관계형 데이터베이스&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;관계 (테이블)&lt;/strong&gt;: $R \subseteq A_1 \times A_2 \times \ldots \times A_n$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;정규화&lt;/strong&gt;: 함수 종속성 (functional dependency) 이론&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;결합 (JOIN)&lt;/strong&gt;: 관계의 곱&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;그래프&quot;&gt;그래프&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;그래프 $G = (V, E)$&lt;/strong&gt; 는 정점 집합 $V$ 와 간선 관계 $E \subseteq V \times V$.&lt;/p&gt;
&lt;h2 id=&quot;함정&quot;&gt;함정&lt;/h2&gt;
&lt;h3 id=&quot;1-집합의-원소-개수-vs-순서&quot;&gt;1. 집합의 원소 개수 vs 순서&lt;/h3&gt;
&lt;p&gt;집합은 &lt;strong&gt;순서 없음&lt;/strong&gt;: ${1, 2} = {2, 1}$
순서쌍은 &lt;strong&gt;순서 있음&lt;/strong&gt;: $(1, 2) \neq (2, 1)$&lt;/p&gt;
&lt;h3 id=&quot;2-in-vs-subseteq&quot;&gt;2. $\in$ vs $\subseteq$&lt;/h3&gt;
&lt;p&gt;$1 \in {1, 2}$ (원소)
${1} \subseteq {1, 2}$ (부분집합)&lt;/p&gt;
&lt;p&gt;$1 \subseteq {1, 2}$ 는 &lt;strong&gt;오류&lt;/strong&gt; (숫자 1 은 집합이 아님).&lt;/p&gt;
&lt;h3 id=&quot;3-함수의-well-defined&quot;&gt;3. 함수의 well-defined&lt;/h3&gt;
&lt;p&gt;$f: \mathbb{Q} \to \mathbb{Q}$, $f(\frac{p}{q}) = p + q$ 는 함수가 아님. 왜? $\frac{1}{2} = \frac{2}{4}$ 지만 $1+2 \neq 2+4$. Well-defined 하지 않음.&lt;/p&gt;
&lt;h3 id=&quot;4-관계-vs-함수&quot;&gt;4. 관계 vs 함수&lt;/h3&gt;
&lt;p&gt;관계는 한 입력에 여러 출력 가능. 함수는 유일.&lt;/p&gt;
&lt;h2 id=&quot;관련-위키&quot;&gt;관련 위키&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[[discrete-mathematics|이산수학 (개요)]]&lt;/li&gt;
&lt;li&gt;[[propositional-logic|명제 논리]] - 집합과의 대응&lt;/li&gt;
&lt;li&gt;[[combinatorics-basics|조합론]] - $|A \cup B|$&lt;/li&gt;
&lt;li&gt;[[graph-theory-basics|그래프 이론]] - 관계로서의 간선&lt;/li&gt;
&lt;li&gt;[[proof-techniques|증명 기법]] - 집합 등식 증명&lt;/li&gt;
&lt;li&gt;[[boolean-algebra|부울 대수]] - 집합 대수와 동형&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>discrete-math</category><category>sets</category><category>relations</category><category>functions</category><author>koa (김신건)</author></item></channel></rss>