2. 왜 하필 알고리즘?
• 이 책 공부가 별로 가성비 좋지는 않을 것
• 실무와는 큰 연관 없는 반면
• 꽤 오랫동안 공부가 필요하니까
• 차라리 신기술/라이브러리 API 하나 더 외우는게 나을지도?
• 다음의 경우에는 반드시 도움이 될 것
• 문제 해결 능력 향상
• 문제 / 풀이 절차의 패턴화
• 설계 단계에서 estimation
• 코딩 면접
3. 이번 주제의 목표
• 알고리즘 배경지식 습득 -> 어디 가서 아는 체
• 문제/알고리즘 패턴 습득 -> 문제해결 능력 향상
• Input 규모 / 문제의 복잡도 기반 estimation -> 아키텍트 기본 소양
• AI / ML 스터디 기본 소양
• 문제 풀이 연습 -> 코딩 면접 대비
4. 알고리즘?
• Input
• Output
• Procedure
• Finite state
• Efficiency
주어짐
찾아내야 함
주어지는 Input의 규모가 클 수록
알고리즘의 Efficiency 가 빛을 발함
5. 복잡도?
• O(n) , Ω(n) 어쩌구 저쩌구 복잡하지만
• 시간 복잡도
• loop 중첩
• 공간 복잡도
• memory allocation size
• 알고리즘 성능 추정을 위한 유용한 도구
7. P / NP / NP-hard / NP-complete
• P : polynomial time 이내에 해결 가능한 문제
• NP : 답이 맞았는지 여부를 polynomial time 이내에 찾을 수 있는 문제
• NP-hard : polynomial time 이내에 임의의 NP 문제를 환산 가능한 문제
• Ex : 어떤 np문제 a 를 더하고 빼고 곱하고 나누어서 np-hard 문제 x 가 된다면
• x = a + a -
• 적어도 문제 x 는 a 보다 더하고 빼고 곱하고 나눈 만큼은 더 어려운 문제
• NP-complete : np 이면서 np-hard 인 문제
8. P / NP / NP-hard / NP-complete
World of Problems
NP
P
NP-hard
NP
complete
9. 모든 P = NP ?
World of Problems
NP-hard
P=NP=NP-complete
10. 알고리즘 정당성 증명
• 수학적 귀납법
• 점화식
• 귀류법
• A가 참이면 모순이므로 A는 거짓
• 비둘기집 원리
• 4인승 자동차에 5명이 타면 적어도 1자리는 2명이 낑겨 앉음
• 구성적 증명
• 이 알고리즘이 되는 걸 보여주는 방법
11. 야로가 있다
• 알고리즘 외부에도 문제가 있다
• 프로그램 언어의 한계 / os의 한계 / machine의 한계 …
• ex) recursion 과 stack overflow(숙제: 다음 발표자가 조사해 오세요)
• tail call optimization
• trampoline
12. 문제 / 풀이 패턴
• Divide & conquer
• Dynamic programming
• Greedy
• Combinatorial search
• Heuristic
• Monte carlo
• Simulated annealing
• Neural network
13. 발표자 정하기
• 발표자는 해당 주제 이론/배경 소개 및 문제풀이 1~2개 정도 하시면 됩니다.
• 분할 정복
• 동적 계획법
• 탐욕법
• 조합 탐색
• 네임드 알고리즘
• 기초자료구조
• 트리
• 그래프