서울시립대 알고리즘 소모임
완전 탐색
1학기 2주차
서울시립대 알고리즘 소모임
강의자 소개
2020 AL林 정기 스터디 2
이름 최문기
소속 서울시립대 컴퓨터과학부(16학번)
핸들 iknoom1107(BOJ) IKnoom(Codeforces) IKnoom(AtCoder)
ICPC 팀 (팀명 미정)
- 김정현, 오규민, 최문기
스터디 공지(~3월 30일)
2020 AL林 정기 스터디 3
문제 풀이 스터디
그룹을 나누어 정규 세미나의 연습 문제를 함께 풀어보고 풀이를 공유
https://www.notion.so/AL-413334b2632447789e58c1daa64fa009
대회 스터디
ACM-ICPC, SCPC와 같은 알고리즘 대회를 준비
https://www.notion.so/AL-2364ec7bc77a49ffbd83abeaf484e7c2
前 몇가지 선행 지식
2020 AL林 정기 스터디 4
파이썬 프로그래밍 : 반복문, 조건문, 배열
수학 : 순열, 조합, 수열의 일반항과 점화식
今 오늘 할 것
2020 AL林 정기 스터디 5
• 시간복잡도, 공간복잡도
• 알고리즘을 분석하여 더 효율적인 알고리즘이 무엇인지 알기
• 알고리즘이 한정된 자원 내에서 실행 가능한지 예측하기
• 완전 탐색
• 완전 탐색과 효율적인 문제 해결 방법 비교해보기
• 다양한 상황에서 어떻게 완전 탐색을 하는지 간단하게 살펴보기
後 세미나를 듣고 나서
2020 AL林 정기 스터디 6
문제를 풀어봅시다. 꼭 풀어봅시다.
발표자가 생각하는 문제를 푸는 능력 : 아이디어, 구현력, 배경지식
2020 AL林 정기 스터디 7
알고리즘의 분석
(시간복잡도, 공간복잡도)
알고리즘 분석의 필요성
2020 AL林 정기 스터디 8
우리는 앞으로 여러 알고리즘을 설계할 것입니다.
여러 알고리즘 중 어떤 알고리즘이 더 좋은 알고리즘일까요?
그리고 한정된 자원 내에서 알고리즘이 수행 가능할까요?
설계
분석
1. 더 좋은 알고리즘
2020 AL林 정기 스터디 9
여러 알고리즘 중 어떤 알고리즘이 더 좋은 알고리즘일까요?
✓ 알고리즘을 평가하는 두가지 기준
1. 알고리즘의 수행 시간
2. 알고리즘의 필요 메모리
알고리즘의 수행 시간
2020 AL林 정기 스터디 10
n = 5
arr = [1, 2, 3, 4, 5]
sum = 0
for i in range(n):
sum = sum + arr[i]
print(sum) # 15
입력의 크기가 n일 때, n번의 연산
알고리즘의 수행 시간
2020 AL林 정기 스터디 11
입력의 크기가 n일 때, n(n–1)/2번의 연산
n = 5
arr = [1, 3, 5, 7, 9]
sum = 0
for i in range(n - 1):
for j in range(i + 1, n):
sum = sum + i * j
print(sum) # 35
알고리즘의 수행 시간
2020 AL林 정기 스터디 12
입력의 크기가 n일 때, n(n+1)(n+2)/6번의 연산
n = 5
arr = [2, 4, 6, 8, 10]
sum = 0
for i in range(n):
for j in range(i, n):
for k in range(i, j + 1):
sum = sum + arr[k]
print(sum) # 210
빅오 표기법(Big-O notation)
2020 AL林 정기 스터디 13
✓ 빅오 표기법(Big-O notation)
- 시간복잡도(문제를 해결하는데 걸리는 시간과 입력의 함수 관계)를 나타내는 방법.
- 𝑂 𝑓(𝑛) 은 최고차항의 차수가 𝑓(𝑛)과 일치하거나 더 작은 함수의 집합을 나타낸다.
“수행시간의 상한”
“아무리 오래걸린다 하더라도”
빅오 표기법(Big-O notation)
2020 AL林 정기 스터디 14
𝑓 𝑛 = 𝑛 = 𝑂 𝑛
𝑓 𝑛 =
𝑛 𝑛−1
2
= 𝑂 𝑛2
𝑓 𝑛 =
𝑛 𝑛+1 (𝑛+2)
6
= 𝑂 𝑛3
빅오 표기법(Big-O notation)
2020 AL林 정기 스터디 15
𝑓 𝑛 = 𝑛 + 𝑛 = 𝑂 𝑛
𝑓 𝑛 = 𝑛2
+ 50000 = 𝑂 𝑛2
𝑓 𝑛 = 50000 = 𝑂 1
𝑓 𝑛 = 3𝑛 log 𝑛 + 9 = 𝑂 𝑛 log 𝑛
빅오 표기법(Big-O notation)
2020 AL林 정기 스터디 16
𝑓 𝑛 = 2𝑛
+ 𝑛100
= 𝑂 2𝑛
𝑓 𝑛 = 100 ∗ 2𝑛
+ 3𝑛
= 𝑂 3𝑛
𝑓 𝑛 = 2𝑛! + 2𝑛
= 𝑂 𝑛!
𝑓 𝑛 = 10000 ∗ 𝑛! = 𝑂 𝑛!
빅오 표기법(Big-O notation)
2020 AL林 정기 스터디 17
빅오 표기법은 “상한”을 나타냅니다.
𝑓 𝑛 = 2𝑛 + 3 = 𝑂 𝑛2
-> O
𝑓 𝑛 = 𝑛2
+ 7𝑛 = 𝑂 𝑛 -> X
빅오 표기법(Big-O notation)
2020 AL林 정기 스터디 18
O(1) < O(logn) < O(√n) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!)
알고리즘의 필요 메모리
2020 AL林 정기 스터디 19
공간복잡도(문제를 해결하는데 필요한 메모리와 입력의 함수 관계) 또한
시간복잡도와 동일하게 빅오 표기법으로 나타냅니다.
n = 5
arr = [1, 2, 3, 4, 5]
sum = 0
for i in range(n):
sum = sum + arr[i]
print(sum) # 15
→ 공간복잡도 O(n)
2. 한정된 자원에서 짐작하기
2020 AL林 정기 스터디 20
한정된 자원 내에서 알고리즘이 수행 가능할까요?
시간 제한 – 108 룰
2020 AL林 정기 스터디 21
✓ 108 룰
컴퓨터는 1초에 간단한 동작을 대략 108번 할 수 있다.
* 어림짐작이며 완전히 정확하지는 않습니다.
시간 제한 – 108 룰
2020 AL林 정기 스터디 22
연습해봅시다.
𝑂 𝑛 , 𝑛 ≤ 105 시간제한 1초 : 맞았습니다!
𝑂 𝑛2 , 𝑛 ≤ 105 시간제한 1초 : 시간초과
𝑂 𝑛2 , 𝑛 ≤ 5 × 103 시간제한 1초 : 맞았습니다!
𝑂 𝑛3
, 𝑛 ≤ 5 × 103
시간제한 1초 : 시간초과
시간 제한 – 108 룰
2020 AL林 정기 스터디 23
연습해봅시다.
𝑂 2𝑛
, 𝑛 ≤ 100 시간제한 1초 : 시간초과
𝑂 2𝑛 , 𝑛 ≤ 20 시간제한 1초 : 맞았습니다!
𝑂 𝑛! , 𝑛 ≤ 20 시간제한 1초 : 시간초과
𝑂 𝑛! , 𝑛 ≤ 8 시간제한 1초 : 맞았습니다!
시간 제한 – 108 룰
2020 AL林 정기 스터디 24
N의 크기 시간 제한 시간 복잡도
8 1초 𝑂 𝑁 , 𝑂 𝑁2 , 𝑂 𝑁3 , 𝑂 2𝑁 , 𝑂(𝑁!)
25 1초 𝑂 𝑁 , 𝑂 𝑁2
, 𝑂 𝑁3
, 𝑂 2𝑁
300 1초 𝑂 𝑁 , 𝑂 𝑁2
, 𝑂 𝑁3
5000 1초 𝑂 𝑁 , 𝑂 𝑁2
1000000 1초 𝑂 𝑁
입력의 제한과 시간 제한이 주어지면 허용되는 시간복잡도를 예측할 수 있다.
메모리 제한
2020 AL林 정기 스터디 25
프로그램이 점유하는 메모리는 보통 계산하기 쉽습니다.
예를 들어 C언어에서 int 정수 하나는 4byte → int 106개의 배열은 4MB
따라서 분석하기 쉽기도하고 실제로 문제가 되는 경우도 적은 편입니다.
알고리즘 대회나 온라인 저지에서도 메모리 제한이 넉넉한 편입니다.
(가끔 32MB나 8MB로 적게 주어지기도 합니다.)
더 공부해볼 것
2020 AL林 정기 스터디 26
왜 최악의 경우(빅오 표기법)만 분석하나요?
- 알고리즘의 효율성이 문제가 되는 것은 입력 크기가 충분히 클 때입니다. 입력이 작으면 알고리즘의
효율성에 상관없이 금방 결과를 확인할 수 있습니다. 최악의 경우를 개선하는 것이 알고리즘 문제해
결의 주 관심사입니다.
- 최선의 경우와 평균적 경우를 표현하는 방법도 있습니다.(오메가 표기법, 세타 표기법) 오메가 표기
법은 아예 쓰지 않는다고 보면 되고 세타 표기법은 확률적 알고리즘을 분석할 때 쓰기도 합니다. 하
지만 평균적인 경우라는게 일반적으로 분석이 어렵고 객관적인 평가도 어려워서 분석하지 않는 편입
니다.
더 공부해볼 것
2020 AL林 정기 스터디 27
빅오 표기법(점근 표기법)의 엄밀한 수학적 정의
- https://en.wikipedia.org/wiki/Big_O_notation
- https://m.blog.naver.com/kks227/220769859177
시간복잡도가 애매하면 어떡하죠? ex) O(n2), n < 2만, 시간제한 1초
- 테스트를 해봐야합니다. 백준에 제출하고 기도합시다.
시간복잡도 분석이 이정도로 끝인가요?
- 아닙니다. 알고리즘의 수행시간을 지배하는 것은 반복된 작업입니다. 반복된 작업이 수행될 수 있는 방
법은 반복문 또는 재귀호출이지요. 반복문은 위에서 한 것과 같이 단순한 산술로 끝나지만 재귀호출
은 그렇지 않습니다. 4주차 재귀함수, 5주차 분할정복에서 연습해봅시다.
2020 AL林 정기 스터디 28
완전 탐색
완전 탐색(Brute-force Search)
2020 AL林 정기 스터디 29
답이 될 수 있는 모든 경우의 수를 탐색하는 방법
바로 예시를 봅시다.
[BOJ 3040번] 백설 공주와 일곱 난쟁이
2020 AL林 정기 스터디 30
9개의 정수 중에서 합이 100이 되는 7개의 정수를 구한다.
→ 9개 중에서 2개를 제외했을 때 나머지 정수의 합이 100
→ 2개를 제외하는 모든 경우의 수는 9C2 = 36가지
→ 36가지 경우를 완전 탐색
[BOJ 3040번] 백설 공주와 일곱 난쟁이
2020 AL林 정기 스터디 31
arr = []
sum = 0
for i in range(9):
x = int(input())
sum += x
arr.append(x)
for i in range(9):
for j in range(9):
if i == j:
continue
if sum - arr[i] - arr[j] == 100:
arr[i] = -1
arr[j] = -1
for i in range(9):
if arr[i] != -1:
print(arr[i])
http://boj.kr/e20a7eef8f0241c394e510119e9ec2d9
이것도 완전탐색으로 풀어볼까요?
2020 AL林 정기 스터디 32
[1931번 회의실 배정]
https://www.acmicpc.net/problem/1931
[1912번 연속합]
https://www.acmicpc.net/problem/1912
이것도 완전탐색으로 풀어볼까요?
2020 AL林 정기 스터디 33
[1931번 회의실 배정]
완전 탐색 : O(2n)
그리디 알고리즘 : O(n)
[1912번 연속합]
완전 탐색 : O(n3)
동적 프로그래밍 : O(n)
첫번째 관찰
2020 AL林 정기 스터디 34
완전 탐색은 정답이 되는 경우를 모두 탐색하는 해결방법이다.
그렇기 때문에 설계한 알고리즘이 비효율적일 수도 있으며
다른 알고리즘으로 최적화가 될 수도 있다.
구현할 수 있나요?
2020 AL林 정기 스터디 35
A = {1, 2, 9, 4, 11, 13, 94, 7, 22}에서
1. 크기가 9인 모든 순열 출력하기
2. 크기가 7인 모든 조합 출력하기
3. 모든 부분집합 출력하기
구현할 수 있나요?
2020 AL林 정기 스터디 36
슬라이딩 퍼즐 풀기
구현할 수 있나요?
2020 AL林 정기 스터디 37
스도쿠 풀기
구현할 수 있나요?
2020 AL林 정기 스터디 38
루빅스 큐브 풀기
구현할 수 있나요?
2020 AL林 정기 스터디 39
두번째 관찰
2020 AL林 정기 스터디 40
완전 탐색을 구현하는 것만으로도 그렇게 쉽지 않다.
상황에 따라 완전탐색을 구현하는 방법에 대해서 더 알아야한다.
2020 AL林 정기 스터디 41
정리
정리
2020 AL林 정기 스터디 42
• 알고리즘 분석(시간복잡도, 공간복잡도)
• 알고리즘이 효율적인지 평가하는 두가지 기준은 실행 시간과 메모리이다.
• 단순한 산술로 알고리즘의 시간복잡도를 구해보았다.
• 빅표 표기법(Big-O notation)을 통해서 시간복잡도를 나타내었다.
• 한정된 자원과 입력의 크기를 보고 주어진 알고리즘이 실행가능한지 예측하였다.
정리
2020 AL林 정기 스터디 43
• 완전 탐색
• 완전 탐색은 답이 될 수 있는 모든 경우를 탐색하는 방법이다.
• 완전탐색은 비효율적인 방법일 수도 있다.
• 완전탐색(모든 경우의 수를 탐색한다는 아이디어)을 구현하는 것 만으로도 상당히
어려울 수도 있다. 상황에 따라 구현하는 방법을 더 알아야한다.
정리
2020 AL林 정기 스터디 44
알고리즘을 구현하는 방법
(4주차) 재귀 함수
(6주차, 7주차) 자료구조
(8주차, 9주차) DFS, BFS
효율적인 알고리즘을 설계하는 방법
(3주차) 그리디 알고리즘
(5주차) 분할 정복
(10주차) 동적 프로그래밍
2020 AL林 정기 스터디 45
연습 문제
연습 문제
2020 AL林 정기 스터디 46
완전 탐색
기본 문제
3040 백설 공주와 일곱 난쟁이
19532 수학은 비대면강의입니다
2798 블랙잭
연습 문제
(문제풀이 스터디 발표)
2231 분해합
10448 유레카 이론
1198 삼각형으로 자르기
1254 팰린드롬 만들기
2503 숫자 야구
구현하는 연습을 꼭 합시다.
연습 문제
2020 AL林 정기 스터디 47
완전 탐색
도전 문제
2615 오목
17085 십자가 2개 놓기
1182 부분수열의 합
구현하는 연습을 꼭 합시다.

More Related Content

PPTX
Class 18: Measuring Cost
PDF
2020 겨울방학 정기스터디 3주차
PDF
2020 1학기 정기스터디 1주차
PDF
Sienna 1 intro
PDF
Introduction to computing Processing and performance.pdf
PPT
daaadafrhdncxfbfbgdngfmfhmhagshh_unit_i.ppt
PPTX
9. Asymptotic Analysizbbsbsbsbshzhsbbss.pptx
PPT
data unit notes from department of computer science
Class 18: Measuring Cost
2020 겨울방학 정기스터디 3주차
2020 1학기 정기스터디 1주차
Sienna 1 intro
Introduction to computing Processing and performance.pdf
daaadafrhdncxfbfbgdngfmfhmhagshh_unit_i.ppt
9. Asymptotic Analysizbbsbsbsbshzhsbbss.pptx
data unit notes from department of computer science

Similar to 2021 1학기 정기 세미나 2주차 (20)

PPTX
Ch-2 final exam documet compler design elements
PPT
How to calculate complexity in Data Structure
PDF
Introduction to Algorithm Design and Analysis.pdf
PPT
Time complexity.pptr56435 erfgegr t 45t 35
PPT
Time complexity.ppt
PPT
Algorithm And analysis Lecture 03& 04-time complexity.
PPT
how to calclute time complexity of algortihm
PPT
daa_unit THIS IS GNDFJG SDGSGS SFDF .ppt
PPT
Time andspacecomplexity
PDF
2021 1학기 정기 세미나 3주차
PPT
Lecture 1 and 2 of Data Structures & Algorithms
PPTX
Class[1][23ed may] [algorithms]
PPT
CS8451 - Design and Analysis of Algorithms
PDF
1ST_UNIT_DAdefewfrewfgrwefrAdfdgfdsgevedr (2).pdf
PPTX
Daa unit 1
ODP
Simulation-based optimization: Upper Confidence Tree and Direct Policy Search
PDF
CS-102 DS-class_01_02 Lectures Data .pdf
PPTX
cse couse aefrfrqewrbqwrgbqgvq2w3vqbvq23rbgw3rnw345
PDF
Parallelising Dynamic Programming
PPTX
Data Structures and Agorithm: DS 22 Analysis of Algorithm.pptx
Ch-2 final exam documet compler design elements
How to calculate complexity in Data Structure
Introduction to Algorithm Design and Analysis.pdf
Time complexity.pptr56435 erfgegr t 45t 35
Time complexity.ppt
Algorithm And analysis Lecture 03& 04-time complexity.
how to calclute time complexity of algortihm
daa_unit THIS IS GNDFJG SDGSGS SFDF .ppt
Time andspacecomplexity
2021 1학기 정기 세미나 3주차
Lecture 1 and 2 of Data Structures & Algorithms
Class[1][23ed may] [algorithms]
CS8451 - Design and Analysis of Algorithms
1ST_UNIT_DAdefewfrewfgrwefrAdfdgfdsgevedr (2).pdf
Daa unit 1
Simulation-based optimization: Upper Confidence Tree and Direct Policy Search
CS-102 DS-class_01_02 Lectures Data .pdf
cse couse aefrfrqewrbqwrgbqgvq2w3vqbvq23rbgw3rnw345
Parallelising Dynamic Programming
Data Structures and Agorithm: DS 22 Analysis of Algorithm.pptx
Ad

More from Moonki Choi (13)

PDF
2021 2학기 정기 세미나 5주차
PDF
2021 2학기 정기 세미나 4주차
PDF
2021 여름방학 정기 세미나 3주차
PDF
2021 여름방학 정기 세미나 1주차
PDF
2021 알림 오세요
PDF
2021 1학기 정기 세미나 6주차
PDF
2020 여름방학 정기스터디 6주차
PDF
2020 여름방학 정기스터디 5주차
PDF
2020 겨울방학 정기스터디 2주차
PDF
2020 2학기 정기스터디 8주차
PDF
2020 2학기 정기스터디 2주차
PDF
2020 2학기 정기스터디 1주차
PDF
2020 1학기 정기스터디 2주차
2021 2학기 정기 세미나 5주차
2021 2학기 정기 세미나 4주차
2021 여름방학 정기 세미나 3주차
2021 여름방학 정기 세미나 1주차
2021 알림 오세요
2021 1학기 정기 세미나 6주차
2020 여름방학 정기스터디 6주차
2020 여름방학 정기스터디 5주차
2020 겨울방학 정기스터디 2주차
2020 2학기 정기스터디 8주차
2020 2학기 정기스터디 2주차
2020 2학기 정기스터디 1주차
2020 1학기 정기스터디 2주차
Ad

Recently uploaded (20)

PPTX
Sorting and Hashing in Data Structures with Algorithms, Techniques, Implement...
PDF
Introduction to Power System StabilityPS
PDF
distributed database system" (DDBS) is often used to refer to both the distri...
PDF
Cryptography and Network Security-Module-I.pdf
PPTX
PRASUNET_20240614003_231416_0000[1].pptx
PPTX
CyberSecurity Mobile and Wireless Devices
PPTX
Software Engineering and software moduleing
PDF
August -2025_Top10 Read_Articles_ijait.pdf
PDF
UEFA_Carbon_Footprint_Calculator_Methology_2.0.pdf
PDF
Influence of Green Infrastructure on Residents’ Endorsement of the New Ecolog...
PPTX
Principal presentation for NAAC (1).pptx
PPTX
CN_Unite_1 AI&DS ENGGERING SPPU PUNE UNIVERSITY
PPTX
CONTRACTS IN CONSTRUCTION PROJECTS: TYPES
PPTX
A Brief Introduction to IoT- Smart Objects: The "Things" in IoT
PDF
20250617 - IR - Global Guide for HR - 51 pages.pdf
DOC
T Pandian CV Madurai pandi kokkaf illaya
PDF
Unit I -OPERATING SYSTEMS_SRM_KATTANKULATHUR.pptx.pdf
PDF
LOW POWER CLASS AB SI POWER AMPLIFIER FOR WIRELESS MEDICAL SENSOR NETWORK
PPTX
"Array and Linked List in Data Structures with Types, Operations, Implementat...
PPTX
AUTOMOTIVE ENGINE MANAGEMENT (MECHATRONICS).pptx
Sorting and Hashing in Data Structures with Algorithms, Techniques, Implement...
Introduction to Power System StabilityPS
distributed database system" (DDBS) is often used to refer to both the distri...
Cryptography and Network Security-Module-I.pdf
PRASUNET_20240614003_231416_0000[1].pptx
CyberSecurity Mobile and Wireless Devices
Software Engineering and software moduleing
August -2025_Top10 Read_Articles_ijait.pdf
UEFA_Carbon_Footprint_Calculator_Methology_2.0.pdf
Influence of Green Infrastructure on Residents’ Endorsement of the New Ecolog...
Principal presentation for NAAC (1).pptx
CN_Unite_1 AI&DS ENGGERING SPPU PUNE UNIVERSITY
CONTRACTS IN CONSTRUCTION PROJECTS: TYPES
A Brief Introduction to IoT- Smart Objects: The "Things" in IoT
20250617 - IR - Global Guide for HR - 51 pages.pdf
T Pandian CV Madurai pandi kokkaf illaya
Unit I -OPERATING SYSTEMS_SRM_KATTANKULATHUR.pptx.pdf
LOW POWER CLASS AB SI POWER AMPLIFIER FOR WIRELESS MEDICAL SENSOR NETWORK
"Array and Linked List in Data Structures with Types, Operations, Implementat...
AUTOMOTIVE ENGINE MANAGEMENT (MECHATRONICS).pptx

2021 1학기 정기 세미나 2주차

  • 1. 서울시립대 알고리즘 소모임 완전 탐색 1학기 2주차 서울시립대 알고리즘 소모임
  • 2. 강의자 소개 2020 AL林 정기 스터디 2 이름 최문기 소속 서울시립대 컴퓨터과학부(16학번) 핸들 iknoom1107(BOJ) IKnoom(Codeforces) IKnoom(AtCoder) ICPC 팀 (팀명 미정) - 김정현, 오규민, 최문기
  • 3. 스터디 공지(~3월 30일) 2020 AL林 정기 스터디 3 문제 풀이 스터디 그룹을 나누어 정규 세미나의 연습 문제를 함께 풀어보고 풀이를 공유 https://www.notion.so/AL-413334b2632447789e58c1daa64fa009 대회 스터디 ACM-ICPC, SCPC와 같은 알고리즘 대회를 준비 https://www.notion.so/AL-2364ec7bc77a49ffbd83abeaf484e7c2
  • 4. 前 몇가지 선행 지식 2020 AL林 정기 스터디 4 파이썬 프로그래밍 : 반복문, 조건문, 배열 수학 : 순열, 조합, 수열의 일반항과 점화식
  • 5. 今 오늘 할 것 2020 AL林 정기 스터디 5 • 시간복잡도, 공간복잡도 • 알고리즘을 분석하여 더 효율적인 알고리즘이 무엇인지 알기 • 알고리즘이 한정된 자원 내에서 실행 가능한지 예측하기 • 완전 탐색 • 완전 탐색과 효율적인 문제 해결 방법 비교해보기 • 다양한 상황에서 어떻게 완전 탐색을 하는지 간단하게 살펴보기
  • 6. 後 세미나를 듣고 나서 2020 AL林 정기 스터디 6 문제를 풀어봅시다. 꼭 풀어봅시다. 발표자가 생각하는 문제를 푸는 능력 : 아이디어, 구현력, 배경지식
  • 7. 2020 AL林 정기 스터디 7 알고리즘의 분석 (시간복잡도, 공간복잡도)
  • 8. 알고리즘 분석의 필요성 2020 AL林 정기 스터디 8 우리는 앞으로 여러 알고리즘을 설계할 것입니다. 여러 알고리즘 중 어떤 알고리즘이 더 좋은 알고리즘일까요? 그리고 한정된 자원 내에서 알고리즘이 수행 가능할까요? 설계 분석
  • 9. 1. 더 좋은 알고리즘 2020 AL林 정기 스터디 9 여러 알고리즘 중 어떤 알고리즘이 더 좋은 알고리즘일까요? ✓ 알고리즘을 평가하는 두가지 기준 1. 알고리즘의 수행 시간 2. 알고리즘의 필요 메모리
  • 10. 알고리즘의 수행 시간 2020 AL林 정기 스터디 10 n = 5 arr = [1, 2, 3, 4, 5] sum = 0 for i in range(n): sum = sum + arr[i] print(sum) # 15 입력의 크기가 n일 때, n번의 연산
  • 11. 알고리즘의 수행 시간 2020 AL林 정기 스터디 11 입력의 크기가 n일 때, n(n–1)/2번의 연산 n = 5 arr = [1, 3, 5, 7, 9] sum = 0 for i in range(n - 1): for j in range(i + 1, n): sum = sum + i * j print(sum) # 35
  • 12. 알고리즘의 수행 시간 2020 AL林 정기 스터디 12 입력의 크기가 n일 때, n(n+1)(n+2)/6번의 연산 n = 5 arr = [2, 4, 6, 8, 10] sum = 0 for i in range(n): for j in range(i, n): for k in range(i, j + 1): sum = sum + arr[k] print(sum) # 210
  • 13. 빅오 표기법(Big-O notation) 2020 AL林 정기 스터디 13 ✓ 빅오 표기법(Big-O notation) - 시간복잡도(문제를 해결하는데 걸리는 시간과 입력의 함수 관계)를 나타내는 방법. - 𝑂 𝑓(𝑛) 은 최고차항의 차수가 𝑓(𝑛)과 일치하거나 더 작은 함수의 집합을 나타낸다. “수행시간의 상한” “아무리 오래걸린다 하더라도”
  • 14. 빅오 표기법(Big-O notation) 2020 AL林 정기 스터디 14 𝑓 𝑛 = 𝑛 = 𝑂 𝑛 𝑓 𝑛 = 𝑛 𝑛−1 2 = 𝑂 𝑛2 𝑓 𝑛 = 𝑛 𝑛+1 (𝑛+2) 6 = 𝑂 𝑛3
  • 15. 빅오 표기법(Big-O notation) 2020 AL林 정기 스터디 15 𝑓 𝑛 = 𝑛 + 𝑛 = 𝑂 𝑛 𝑓 𝑛 = 𝑛2 + 50000 = 𝑂 𝑛2 𝑓 𝑛 = 50000 = 𝑂 1 𝑓 𝑛 = 3𝑛 log 𝑛 + 9 = 𝑂 𝑛 log 𝑛
  • 16. 빅오 표기법(Big-O notation) 2020 AL林 정기 스터디 16 𝑓 𝑛 = 2𝑛 + 𝑛100 = 𝑂 2𝑛 𝑓 𝑛 = 100 ∗ 2𝑛 + 3𝑛 = 𝑂 3𝑛 𝑓 𝑛 = 2𝑛! + 2𝑛 = 𝑂 𝑛! 𝑓 𝑛 = 10000 ∗ 𝑛! = 𝑂 𝑛!
  • 17. 빅오 표기법(Big-O notation) 2020 AL林 정기 스터디 17 빅오 표기법은 “상한”을 나타냅니다. 𝑓 𝑛 = 2𝑛 + 3 = 𝑂 𝑛2 -> O 𝑓 𝑛 = 𝑛2 + 7𝑛 = 𝑂 𝑛 -> X
  • 18. 빅오 표기법(Big-O notation) 2020 AL林 정기 스터디 18 O(1) < O(logn) < O(√n) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!)
  • 19. 알고리즘의 필요 메모리 2020 AL林 정기 스터디 19 공간복잡도(문제를 해결하는데 필요한 메모리와 입력의 함수 관계) 또한 시간복잡도와 동일하게 빅오 표기법으로 나타냅니다. n = 5 arr = [1, 2, 3, 4, 5] sum = 0 for i in range(n): sum = sum + arr[i] print(sum) # 15 → 공간복잡도 O(n)
  • 20. 2. 한정된 자원에서 짐작하기 2020 AL林 정기 스터디 20 한정된 자원 내에서 알고리즘이 수행 가능할까요?
  • 21. 시간 제한 – 108 룰 2020 AL林 정기 스터디 21 ✓ 108 룰 컴퓨터는 1초에 간단한 동작을 대략 108번 할 수 있다. * 어림짐작이며 완전히 정확하지는 않습니다.
  • 22. 시간 제한 – 108 룰 2020 AL林 정기 스터디 22 연습해봅시다. 𝑂 𝑛 , 𝑛 ≤ 105 시간제한 1초 : 맞았습니다! 𝑂 𝑛2 , 𝑛 ≤ 105 시간제한 1초 : 시간초과 𝑂 𝑛2 , 𝑛 ≤ 5 × 103 시간제한 1초 : 맞았습니다! 𝑂 𝑛3 , 𝑛 ≤ 5 × 103 시간제한 1초 : 시간초과
  • 23. 시간 제한 – 108 룰 2020 AL林 정기 스터디 23 연습해봅시다. 𝑂 2𝑛 , 𝑛 ≤ 100 시간제한 1초 : 시간초과 𝑂 2𝑛 , 𝑛 ≤ 20 시간제한 1초 : 맞았습니다! 𝑂 𝑛! , 𝑛 ≤ 20 시간제한 1초 : 시간초과 𝑂 𝑛! , 𝑛 ≤ 8 시간제한 1초 : 맞았습니다!
  • 24. 시간 제한 – 108 룰 2020 AL林 정기 스터디 24 N의 크기 시간 제한 시간 복잡도 8 1초 𝑂 𝑁 , 𝑂 𝑁2 , 𝑂 𝑁3 , 𝑂 2𝑁 , 𝑂(𝑁!) 25 1초 𝑂 𝑁 , 𝑂 𝑁2 , 𝑂 𝑁3 , 𝑂 2𝑁 300 1초 𝑂 𝑁 , 𝑂 𝑁2 , 𝑂 𝑁3 5000 1초 𝑂 𝑁 , 𝑂 𝑁2 1000000 1초 𝑂 𝑁 입력의 제한과 시간 제한이 주어지면 허용되는 시간복잡도를 예측할 수 있다.
  • 25. 메모리 제한 2020 AL林 정기 스터디 25 프로그램이 점유하는 메모리는 보통 계산하기 쉽습니다. 예를 들어 C언어에서 int 정수 하나는 4byte → int 106개의 배열은 4MB 따라서 분석하기 쉽기도하고 실제로 문제가 되는 경우도 적은 편입니다. 알고리즘 대회나 온라인 저지에서도 메모리 제한이 넉넉한 편입니다. (가끔 32MB나 8MB로 적게 주어지기도 합니다.)
  • 26. 더 공부해볼 것 2020 AL林 정기 스터디 26 왜 최악의 경우(빅오 표기법)만 분석하나요? - 알고리즘의 효율성이 문제가 되는 것은 입력 크기가 충분히 클 때입니다. 입력이 작으면 알고리즘의 효율성에 상관없이 금방 결과를 확인할 수 있습니다. 최악의 경우를 개선하는 것이 알고리즘 문제해 결의 주 관심사입니다. - 최선의 경우와 평균적 경우를 표현하는 방법도 있습니다.(오메가 표기법, 세타 표기법) 오메가 표기 법은 아예 쓰지 않는다고 보면 되고 세타 표기법은 확률적 알고리즘을 분석할 때 쓰기도 합니다. 하 지만 평균적인 경우라는게 일반적으로 분석이 어렵고 객관적인 평가도 어려워서 분석하지 않는 편입 니다.
  • 27. 더 공부해볼 것 2020 AL林 정기 스터디 27 빅오 표기법(점근 표기법)의 엄밀한 수학적 정의 - https://en.wikipedia.org/wiki/Big_O_notation - https://m.blog.naver.com/kks227/220769859177 시간복잡도가 애매하면 어떡하죠? ex) O(n2), n < 2만, 시간제한 1초 - 테스트를 해봐야합니다. 백준에 제출하고 기도합시다. 시간복잡도 분석이 이정도로 끝인가요? - 아닙니다. 알고리즘의 수행시간을 지배하는 것은 반복된 작업입니다. 반복된 작업이 수행될 수 있는 방 법은 반복문 또는 재귀호출이지요. 반복문은 위에서 한 것과 같이 단순한 산술로 끝나지만 재귀호출 은 그렇지 않습니다. 4주차 재귀함수, 5주차 분할정복에서 연습해봅시다.
  • 28. 2020 AL林 정기 스터디 28 완전 탐색
  • 29. 완전 탐색(Brute-force Search) 2020 AL林 정기 스터디 29 답이 될 수 있는 모든 경우의 수를 탐색하는 방법 바로 예시를 봅시다.
  • 30. [BOJ 3040번] 백설 공주와 일곱 난쟁이 2020 AL林 정기 스터디 30 9개의 정수 중에서 합이 100이 되는 7개의 정수를 구한다. → 9개 중에서 2개를 제외했을 때 나머지 정수의 합이 100 → 2개를 제외하는 모든 경우의 수는 9C2 = 36가지 → 36가지 경우를 완전 탐색
  • 31. [BOJ 3040번] 백설 공주와 일곱 난쟁이 2020 AL林 정기 스터디 31 arr = [] sum = 0 for i in range(9): x = int(input()) sum += x arr.append(x) for i in range(9): for j in range(9): if i == j: continue if sum - arr[i] - arr[j] == 100: arr[i] = -1 arr[j] = -1 for i in range(9): if arr[i] != -1: print(arr[i]) http://boj.kr/e20a7eef8f0241c394e510119e9ec2d9
  • 32. 이것도 완전탐색으로 풀어볼까요? 2020 AL林 정기 스터디 32 [1931번 회의실 배정] https://www.acmicpc.net/problem/1931 [1912번 연속합] https://www.acmicpc.net/problem/1912
  • 33. 이것도 완전탐색으로 풀어볼까요? 2020 AL林 정기 스터디 33 [1931번 회의실 배정] 완전 탐색 : O(2n) 그리디 알고리즘 : O(n) [1912번 연속합] 완전 탐색 : O(n3) 동적 프로그래밍 : O(n)
  • 34. 첫번째 관찰 2020 AL林 정기 스터디 34 완전 탐색은 정답이 되는 경우를 모두 탐색하는 해결방법이다. 그렇기 때문에 설계한 알고리즘이 비효율적일 수도 있으며 다른 알고리즘으로 최적화가 될 수도 있다.
  • 35. 구현할 수 있나요? 2020 AL林 정기 스터디 35 A = {1, 2, 9, 4, 11, 13, 94, 7, 22}에서 1. 크기가 9인 모든 순열 출력하기 2. 크기가 7인 모든 조합 출력하기 3. 모든 부분집합 출력하기
  • 36. 구현할 수 있나요? 2020 AL林 정기 스터디 36 슬라이딩 퍼즐 풀기
  • 37. 구현할 수 있나요? 2020 AL林 정기 스터디 37 스도쿠 풀기
  • 38. 구현할 수 있나요? 2020 AL林 정기 스터디 38 루빅스 큐브 풀기
  • 39. 구현할 수 있나요? 2020 AL林 정기 스터디 39
  • 40. 두번째 관찰 2020 AL林 정기 스터디 40 완전 탐색을 구현하는 것만으로도 그렇게 쉽지 않다. 상황에 따라 완전탐색을 구현하는 방법에 대해서 더 알아야한다.
  • 41. 2020 AL林 정기 스터디 41 정리
  • 42. 정리 2020 AL林 정기 스터디 42 • 알고리즘 분석(시간복잡도, 공간복잡도) • 알고리즘이 효율적인지 평가하는 두가지 기준은 실행 시간과 메모리이다. • 단순한 산술로 알고리즘의 시간복잡도를 구해보았다. • 빅표 표기법(Big-O notation)을 통해서 시간복잡도를 나타내었다. • 한정된 자원과 입력의 크기를 보고 주어진 알고리즘이 실행가능한지 예측하였다.
  • 43. 정리 2020 AL林 정기 스터디 43 • 완전 탐색 • 완전 탐색은 답이 될 수 있는 모든 경우를 탐색하는 방법이다. • 완전탐색은 비효율적인 방법일 수도 있다. • 완전탐색(모든 경우의 수를 탐색한다는 아이디어)을 구현하는 것 만으로도 상당히 어려울 수도 있다. 상황에 따라 구현하는 방법을 더 알아야한다.
  • 44. 정리 2020 AL林 정기 스터디 44 알고리즘을 구현하는 방법 (4주차) 재귀 함수 (6주차, 7주차) 자료구조 (8주차, 9주차) DFS, BFS 효율적인 알고리즘을 설계하는 방법 (3주차) 그리디 알고리즘 (5주차) 분할 정복 (10주차) 동적 프로그래밍
  • 45. 2020 AL林 정기 스터디 45 연습 문제
  • 46. 연습 문제 2020 AL林 정기 스터디 46 완전 탐색 기본 문제 3040 백설 공주와 일곱 난쟁이 19532 수학은 비대면강의입니다 2798 블랙잭 연습 문제 (문제풀이 스터디 발표) 2231 분해합 10448 유레카 이론 1198 삼각형으로 자르기 1254 팰린드롬 만들기 2503 숫자 야구 구현하는 연습을 꼭 합시다.
  • 47. 연습 문제 2020 AL林 정기 스터디 47 완전 탐색 도전 문제 2615 오목 17085 십자가 2개 놓기 1182 부분수열의 합 구현하는 연습을 꼭 합시다.