Lesson 9 of 20
관계 — 누가 누구와 이어져 있는가
반사 · 대칭 · 추이, 그리고 데이터베이스의 조상
8강 끝에서 곱집합 A × B — 가능한 모든 짝의 모임 — 을 만들었습니다.
그 짝들 중에서 우리가 관심 있는 것만 골라낸 것이 관계(relation)입니다.
예를 들어 사람 집합 {민준, 서연, 지호} 에서
"~는 ~를 팔로우한다"는 관계는 이런 짝들의 집합이에요.
R = {(민준, 서연), (서연, 지호), (지호, 민준), (민준, 지호)}
(a, b) ∈ R 을 a R b 라고도 씁니다.
"a와 b가 이 관계에 있다"는 뜻이에요. 우리가 아는 <, =,
"~의 부모이다", "같은 반이다" 모두 관계입니다.
관계 행렬 — 이어져 있으면 1, 아니면 0.
Python
Runs in your browser
🎮 칸을 눌러 관계를 만들어 보세요
표의 칸을 클릭하면 화살표가 생기고 사라집니다. 그때그때 이 관계가 반사적인지 · 대칭적인지 · 추이적인지 판정해 드립니다. 성질이 깨지면 어느 짝 때문에 깨졌는지도 알려 줘요.
관계의 세 가지 성질
| 성질 | 조건 | 말로 하면 | 예 |
|---|---|---|---|
| 반사적 | ∀a, (a,a) ∈ R | 자기 자신과도 이어진다 | "같은 반이다", "≤" |
| 대칭적 | aRb → bRa | 이어지면 반대도 이어진다 | "친구다", "=" |
| 추이적 | aRb ∧ bRc → aRc | 징검다리로 건너뛸 수 있다 | "<", "조상이다" |
세 가지를 모두 만족하면 동치관계(equivalence relation)라고 합니다. 동치관계는 집합을 겹치지 않는 조각으로 깔끔하게 쪼갭니다 — 이걸 분할이라고 해요. "같은 반이다"라는 관계가 전교생을 반별로 쪼개는 것처럼요.
같은 조 = 동치관계. '<' 는 추이적이지만 반사·대칭이 아닙니다.
Python
Runs in your browser
순서관계 — 줄을 세우는 관계
반사적 · 반대칭적(aRb이고 bRa이면 a = b) · 추이적인 관계를
부분순서(partial order)라고 합니다. ≤, "~의 부분집합이다",
"~를 먼저 해야 한다" 같은 것들이에요.
작업 사이의 "먼저 해야 한다" 관계를 순서대로 늘어놓는 것을 위상 정렬이라 하고, 빌드 시스템·패키지 설치·과목 선수 관계가 전부 이 문제입니다.
순서관계를 한 줄로 펼치는 것을 위상 정렬이라 합니다.
Python
Runs in your browser
🤔 Check yourself
관계
R 이 대칭적이라는 것은?Answer 대칭은 화살표가 양방향이라는 뜻입니다. ①은 반사, ③은 추이예요. "친구다"는 대칭이지만 "팔로우한다"는 대칭이 아닙니다.
🤔 Check yourself
정수에서 관계 "
a < b" 가 갖지 못한 성질은?Answer
a < a 는 결코 참이 아니므로 반사적이 아닙니다. 추이성(a<b, b<c → a<c)은 성립하고, 반대칭도 (a<b이면서 b<a인 경우가 없어) 공허하게 성립해요. ≤ 였다면 반사적이었을 겁니다.🤔 Check yourself
동치관계가 집합에 하는 일은?
Answer 동치관계는 "서로 같다고 볼 원소들"을 묶어 동치류를 만들고, 그 동치류들이 전체를 빈틈없이, 겹침 없이 덮습니다. 줄 세우는 것은 순서관계의 일이에요.