프로그래머, 수학으로 생각하라
유키히로시 지음 | 안동현 옮김 | 프리렉
기수법
- 2진법 → 8진법 → 16진법
- 위치값 기수법 Positional Notation
$a_{3} \times N^3 + a_{2} \times N^2 + a_{1} \times N^1 + a_{0} \times N^0$
- 지수법칙
$10^0 ?$
$10^-1 ?$
$N^a \times N^b = N^{a+b}$
- 0의 역할; 자리확보, 패턴을 만들어 규칙을 간단하게 하기
$a_{n} \times \ m^n + a_{n-1} \times m^{n-1} + a_{n-2} \times m^{n-2} + \ldots + a_{2} \times m^2 + a_{1} \times m^1 + a_{0} \times m^0$
논리
애매함을 없애는 도구; 망라(網羅)적이고 배타적인 분할
명제; 참, 거짓
누락은 없는가, 중복은 없는가
부정; A가 아님
~A (Not A), ~~A == A
Venn Diagram, 진리표
논리곱; A 이고 B
$A \wedge B (A and B)$
논리합; A 또는 B
$A \vee B (A or B)$
배타적 논리합; A 또는 B (그러나 둘 다는 아님)
$A \oplus B$
등치; A와 B는 같다
A = B
배타적 논리합의 부정 ; $(\sim(A \oplus B)) = (A = B)$
조건 명제; A라면 B A⇒B
- 드 모르간의 법칙 de Morgan's Law;
$(\sim{A})\vee(\sim{B})=\sim(A\wedge{B})$
$(\sim{A})\wedge(\sim{B})=\sim(A\vee{B})$
쌍대성
true↔false
A↔~A
$\wedge \leftrightarrow \vee$
- 카르노 맵 Karnaugh Map); 모든 명제의 참, 거짓 조합을 2차원으로 나타낸 그림
- 정의되지 않음을 포함한 논리; true, false, undefined
- 조건 논리곱(&&) Conditional And, Short-circuit Logical And; A라는 조건에 따라 B를 조사할 것인지 안 할 것인지를 판단하는 것
- 조건 논리합(||)
- 3값 논리의 부정(!)
- 3값 논리에서 드 모르간 법칙
(!A) || (!B) = ! (A && B)
(!A) && (!B) = ! (A || B)
주기성과 그룹 나누기
나머지는 그룹 나누기. 패리티Parity; 통신에서 에러를 확인할 때 사용하는 중요한 개념
나머지의 주기성
- 한붓그리기; 오일러 (Leonard Euler, 1707~1783)는 쾨니히스베르크의 다리 건너기 문제 → 그래프 이론
'한붓 그리기 성공' ⇒ '모든 정점은 짝수점 또는 홀수점이 2개'
수학적 귀납법
Mathematical Induction, 정수에 관한 주장을 0 이상의 모든 정수(0,1,2,3,…)에 대해 증명할 때 이용하는 방법, 2단계로 증명을 수행
단계1(기저Base), 'P(0)이 성립함'을 증명한다.
단계2(귀납Induction), 0 이상의 어떤 정수 k를 선택해도 'P(k)가 성립한다면 P(k+1)도 성립함'을 증명한다.
- 가우스
$0 + 1 + 2 + 3 + \dots + n = \frac{(n + 1)\times{n}}{2}$
순열과 조합
- 덧셈법칙
$|A\cup{B}|=|A|+|B|$
포함과 배제의 원리; The Principle of Inclusion and Exclusion
$|A\cup{B}|=|A|+|B|-|A\cap{B}|$
- 곱셈법칙
$|A\times{B}|=|A|\times|B|$
- 치환Substitution; n개의 무엇가를 순서를 생각하며 나열하는 것, 계승Factorial
- 순열Permutation; n개의 무언가 중 일부만을 선택하여 나열
$_{n}P_{k}=\frac{n!}{(n-k)!}$
수형도Tree Diagram
- 조합Combination; 순서를 생각하지 않는 것
$_{n}C_{k}=\frac{n!}{(n-k)!k!}$
$_{n}C_{k}=\frac{_{n}P_{k}}{_{k}P_{k}}=\frac{(n-0)\times(n-1)\times(n-2)\times\dots\times(n-(k-1))}{(k-0)\times(k-1)\times(k-2)\times\dots\times(k-(k-1))}$
재귀
- 하노이의 탑; 1883년 뤼카(Edouard Lucas, 1842~1891)
닫힌식Closed-form Expression 또는 일반항 $H(n)=2^n-1$
[재귀를 사용한 표현] 'n 하노이'를 'n-1 하노이'를 이용하여 푸는 순서를 발견해낸다. [점화식] 'n 하노이'의 횟수를 'n-1 하노이'의 횟수를 이용하여 표현한다.
재귀Recursion와 귀납Induction은 모두 “큰 문제를 같은 형태의 작은 문제로 만든다.”
재귀적Recursive, 귀납적Inductive
- 피보나치 수열; Leonardo Fibonacci, 1170~1250
0,1,1,2,3,5,8,13,21,34,55,89,…
- 파스칼의 삼각형
시어핀스키 개스킨(Sierpinski Gasket, Sierpinski Triangle)
프랙털 도형
지수적 폭발
Exponential Explosion; 수가 급격하게 증가하는 것. 지수적 증가, 지수함수적 증가, 조합론적 폭발
- 이진검색; 지수적 폭발을 이용한 검색
- 로그; 지수적 폭발을 다루는 도구 Logarithm, 1614년 스코틀랜드의 수학자 네이피어(John Napier, 1550~1617)
- 암호; 지수적 폭발로 비밀을 지킴
무작위 공격(Brute-force Attack)
계산할 수 없는 문제
- 귀류법; 증명하고자 하는 것의 부정을 가정하면 모순이 생긴다. 배리법
- 우선 '증명하고자 하는 명제의 부정'이 성립한다고 가정
- 그 가정을 기본으로 증명을 진행하여 모순을 유도
소수Prime Number; 1과 자기 자신의 수만으로 나누어떨어지는 2 이상의 수
- countable; 집합의 요수 개수가 한정되거나 집합의 모든 요소를 1 이상의 정수와 1대 1로 대응할 수 있다.
- 대각선 논법
- 계산할 수 없는 문제; 프로그램으로 푸는 것이 원리적으로 불가능한 문제
페르마의 마지막정리; $x^n+y^n=z^n$
골드바흐의 추측Goldbach's conjecture; 4 이상의 모든 짝수는 소수2개의 합으로 나타낼 수 있다
정리
- '0'은 규칙을 간단하게 만든다
- '논리'는 둘로 나누기
- '나머지'로 그룹화
- '수학적 귀납법'은 2단계로 무한에 도전한다
- '순열과 조합'에서는 대상의 성질을 파악하는 것이 중요하다
- '재귀'는 자신 안에서 자신을 발견하는 것
- '지수적 폭발'이란
- '계산할 수 없는 문제'는 원리적인 제한을 나타낸다