SlideShare a Scribd company logo
1 of 10
Download to read offline
창원대학교 정보통신공학과 주효진
1. 시간 복잡도
Data Structure
참고 교재 : 두근두근 자료구조
알고리즘의 복잡도 분석방법
알고리즘을 직접 구현하지 않고서도 어느 정도의 효율성을 갖는 지 아는 것
각각의 개인적인 상황들(하드웨어/소프트웨어)에 관계 없이 알고리즘의 효율성을 평가 가능
1. 복잡도 분석이 뭐지?
알고리즘의 복잡도 분석방법
2. 복잡도 분석은 어떻게 하는 걸까?
알고리즘의 실행시갂을 분석 알고리즘이 사용하는 메모리를 분석
시갂 복잡도 공갂 복잡도
알고리즘의 복잡도 분석방법
시갂 복잡도 공갂 복잡도
2. 복잡도 분석은 어떻게 하는 걸까?
알고리즘에서 사용된 메모리 공갂보다 실행시갂에 더 많은 관심을 갖기 때문에
알고리즘의 복잡도를 이야기 할 때 주로 시갂 복잡도를 이야기 한다.
ex_게임 할 때에 게임이 느린 경우(시갂 복잡도) VS 용량이 큰 경우(공갂 복잡도)
시간 복잡도
알고리즘의 절대적인 실행시갂? NO!
알고리즘을 구성하고 있는 연산들이 몇 번이나 실행되는지 횟수로 표시한 것!
(연산에는 산술, 대입, 비교, 이동 등의 연산들이 포함된다.)
1. 시간 복잡도란?
시간 복잡도
필요한 연산의 수는 보통 주어지는 입력의 개수 n에 영향을 받는다.
이 때, 연산의 수를 n의 함수로 나타낸 것을 시갂 복잡도 함수라고 한다. ▶ T(n)이라고 표기.
But T(n)은 입력의 개수 n에 대한 상당히 복잡한 수식으로 나타날 수 있다!
2. 시간 복잡도를 표기하는 방법!
시간 복잡도
2. 시간 복잡도를 표기하는 방법!
0 1 2 3 4 5n
0 1 4 9 16 25n²
0 1 2 6 24 120n!
1 2 4 8 16 322ⁿ
0 0 1 1 2 2log₂n
자료의 개수가 많아질수록 차수가 가장 큰 항의 영향이 점점 커지게 되고,
증가하는 비율 또한 최고차항의 값이 가장 크다.
 결국, 시갂복잡도 분석에서는 최고차항만 고려하면 OK
시간 복잡도
입력의 개수 n에 따라 변하는 연산 횟수를 분석하기 쉽게 표시하는 방법
O(n)과 같이 표시한다.
* 빅오 표기법 복잡도 순 정렬 *
O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!)
3. 빅오 표기법의 등장
이번 시간에는…
1. 시간 복잡도
Question

More Related Content

Similar to [2017] 코딩멘토링: 자료구조- (1)시간 복잡도

TestBCD2014-1(Answer)
TestBCD2014-1(Answer)TestBCD2014-1(Answer)
TestBCD2014-1(Answer)Yong Heui Cho
 
평범한 개발자의 실수 꾸러미
평범한 개발자의 실수 꾸러미평범한 개발자의 실수 꾸러미
평범한 개발자의 실수 꾸러미mniktw
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programmingByeongsu Kang
 
Machine translation survey vol2
Machine translation survey   vol2Machine translation survey   vol2
Machine translation survey vol2gohyunwoong
 
Rankwave moment™ desc3
Rankwave moment™ desc3Rankwave moment™ desc3
Rankwave moment™ desc3Sungwha Shim
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhudMinGeun Park
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr내훈 정
 
면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례Soochan Park
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)MinChul Lee
 
Reduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in pythonReduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in pythonSangJune Ahn
 
데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기Gi-Yeon Nam
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해중선 곽
 
Sequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural NetworksSequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural NetworksHoon Heo
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)HyoungEun Kim
 

Similar to [2017] 코딩멘토링: 자료구조- (1)시간 복잡도 (17)

TestBCD2014-1(Answer)
TestBCD2014-1(Answer)TestBCD2014-1(Answer)
TestBCD2014-1(Answer)
 
평범한 개발자의 실수 꾸러미
평범한 개발자의 실수 꾸러미평범한 개발자의 실수 꾸러미
평범한 개발자의 실수 꾸러미
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
Machine translation survey vol2
Machine translation survey   vol2Machine translation survey   vol2
Machine translation survey vol2
 
메이크챗봇 자연어기초
메이크챗봇 자연어기초메이크챗봇 자연어기초
메이크챗봇 자연어기초
 
Rankwave moment™ desc3
Rankwave moment™ desc3Rankwave moment™ desc3
Rankwave moment™ desc3
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
 
7 8 1
7 8 17 8 1
7 8 1
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 
면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)
 
Reduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in pythonReduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in python
 
데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해
 
Sequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural NetworksSequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural Networks
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)
 

More from Joo HyoJin

[2018] Catch-Python: (6) 여름학교 5일차
[2018] Catch-Python: (6) 여름학교 5일차[2018] Catch-Python: (6) 여름학교 5일차
[2018] Catch-Python: (6) 여름학교 5일차Joo HyoJin
 
[2018] Catch-Python: (5) 여름학교 4일차
[2018] Catch-Python: (5) 여름학교 4일차[2018] Catch-Python: (5) 여름학교 4일차
[2018] Catch-Python: (5) 여름학교 4일차Joo HyoJin
 
[2018] Catch-Python: (4) 여름학교 3일차
[2018] Catch-Python: (4) 여름학교 3일차[2018] Catch-Python: (4) 여름학교 3일차
[2018] Catch-Python: (4) 여름학교 3일차Joo HyoJin
 
[2018] Catch-Python: (3) 여름학교 2일차
[2018] Catch-Python: (3) 여름학교 2일차[2018] Catch-Python: (3) 여름학교 2일차
[2018] Catch-Python: (3) 여름학교 2일차Joo HyoJin
 
[2018] Catch-Python: (2) 여름학교 1일차
[2018] Catch-Python: (2) 여름학교 1일차[2018] Catch-Python: (2) 여름학교 1일차
[2018] Catch-Python: (2) 여름학교 1일차Joo HyoJin
 
[2018] Catch-Python: (1) 파이썬 터틀 그래픽 맛보기
[2018] Catch-Python: (1) 파이썬 터틀 그래픽 맛보기[2018] Catch-Python: (1) 파이썬 터틀 그래픽 맛보기
[2018] Catch-Python: (1) 파이썬 터틀 그래픽 맛보기Joo HyoJin
 
[2017] JAVA term-project: 최종 발표
[2017] JAVA term-project: 최종 발표[2017] JAVA term-project: 최종 발표
[2017] JAVA term-project: 최종 발표Joo HyoJin
 
[2017] arduino term-project: 최종 발표
[2017] arduino term-project: 최종 발표[2017] arduino term-project: 최종 발표
[2017] arduino term-project: 최종 발표Joo HyoJin
 
[2017] arduino term-project: 중간 발표
[2017] arduino term-project: 중간 발표[2017] arduino term-project: 중간 발표
[2017] arduino term-project: 중간 발표Joo HyoJin
 
[2017] 코딩멘토링: 자료구조- (4)배열과 구조체
[2017] 코딩멘토링: 자료구조- (4)배열과 구조체[2017] 코딩멘토링: 자료구조- (4)배열과 구조체
[2017] 코딩멘토링: 자료구조- (4)배열과 구조체Joo HyoJin
 
[2017] 코딩멘토링: 자료구조- (3)구조체
[2017] 코딩멘토링: 자료구조- (3)구조체[2017] 코딩멘토링: 자료구조- (3)구조체
[2017] 코딩멘토링: 자료구조- (3)구조체Joo HyoJin
 
[2017] 코딩멘토링: 자료구조- (2)배열
[2017] 코딩멘토링: 자료구조- (2)배열[2017] 코딩멘토링: 자료구조- (2)배열
[2017] 코딩멘토링: 자료구조- (2)배열Joo HyoJin
 

More from Joo HyoJin (12)

[2018] Catch-Python: (6) 여름학교 5일차
[2018] Catch-Python: (6) 여름학교 5일차[2018] Catch-Python: (6) 여름학교 5일차
[2018] Catch-Python: (6) 여름학교 5일차
 
[2018] Catch-Python: (5) 여름학교 4일차
[2018] Catch-Python: (5) 여름학교 4일차[2018] Catch-Python: (5) 여름학교 4일차
[2018] Catch-Python: (5) 여름학교 4일차
 
[2018] Catch-Python: (4) 여름학교 3일차
[2018] Catch-Python: (4) 여름학교 3일차[2018] Catch-Python: (4) 여름학교 3일차
[2018] Catch-Python: (4) 여름학교 3일차
 
[2018] Catch-Python: (3) 여름학교 2일차
[2018] Catch-Python: (3) 여름학교 2일차[2018] Catch-Python: (3) 여름학교 2일차
[2018] Catch-Python: (3) 여름학교 2일차
 
[2018] Catch-Python: (2) 여름학교 1일차
[2018] Catch-Python: (2) 여름학교 1일차[2018] Catch-Python: (2) 여름학교 1일차
[2018] Catch-Python: (2) 여름학교 1일차
 
[2018] Catch-Python: (1) 파이썬 터틀 그래픽 맛보기
[2018] Catch-Python: (1) 파이썬 터틀 그래픽 맛보기[2018] Catch-Python: (1) 파이썬 터틀 그래픽 맛보기
[2018] Catch-Python: (1) 파이썬 터틀 그래픽 맛보기
 
[2017] JAVA term-project: 최종 발표
[2017] JAVA term-project: 최종 발표[2017] JAVA term-project: 최종 발표
[2017] JAVA term-project: 최종 발표
 
[2017] arduino term-project: 최종 발표
[2017] arduino term-project: 최종 발표[2017] arduino term-project: 최종 발표
[2017] arduino term-project: 최종 발표
 
[2017] arduino term-project: 중간 발표
[2017] arduino term-project: 중간 발표[2017] arduino term-project: 중간 발표
[2017] arduino term-project: 중간 발표
 
[2017] 코딩멘토링: 자료구조- (4)배열과 구조체
[2017] 코딩멘토링: 자료구조- (4)배열과 구조체[2017] 코딩멘토링: 자료구조- (4)배열과 구조체
[2017] 코딩멘토링: 자료구조- (4)배열과 구조체
 
[2017] 코딩멘토링: 자료구조- (3)구조체
[2017] 코딩멘토링: 자료구조- (3)구조체[2017] 코딩멘토링: 자료구조- (3)구조체
[2017] 코딩멘토링: 자료구조- (3)구조체
 
[2017] 코딩멘토링: 자료구조- (2)배열
[2017] 코딩멘토링: 자료구조- (2)배열[2017] 코딩멘토링: 자료구조- (2)배열
[2017] 코딩멘토링: 자료구조- (2)배열
 

[2017] 코딩멘토링: 자료구조- (1)시간 복잡도

  • 1. 창원대학교 정보통신공학과 주효진 1. 시간 복잡도 Data Structure 참고 교재 : 두근두근 자료구조
  • 2. 알고리즘의 복잡도 분석방법 알고리즘을 직접 구현하지 않고서도 어느 정도의 효율성을 갖는 지 아는 것 각각의 개인적인 상황들(하드웨어/소프트웨어)에 관계 없이 알고리즘의 효율성을 평가 가능 1. 복잡도 분석이 뭐지?
  • 3. 알고리즘의 복잡도 분석방법 2. 복잡도 분석은 어떻게 하는 걸까? 알고리즘의 실행시갂을 분석 알고리즘이 사용하는 메모리를 분석 시갂 복잡도 공갂 복잡도
  • 4. 알고리즘의 복잡도 분석방법 시갂 복잡도 공갂 복잡도 2. 복잡도 분석은 어떻게 하는 걸까? 알고리즘에서 사용된 메모리 공갂보다 실행시갂에 더 많은 관심을 갖기 때문에 알고리즘의 복잡도를 이야기 할 때 주로 시갂 복잡도를 이야기 한다. ex_게임 할 때에 게임이 느린 경우(시갂 복잡도) VS 용량이 큰 경우(공갂 복잡도)
  • 5. 시간 복잡도 알고리즘의 절대적인 실행시갂? NO! 알고리즘을 구성하고 있는 연산들이 몇 번이나 실행되는지 횟수로 표시한 것! (연산에는 산술, 대입, 비교, 이동 등의 연산들이 포함된다.) 1. 시간 복잡도란?
  • 6. 시간 복잡도 필요한 연산의 수는 보통 주어지는 입력의 개수 n에 영향을 받는다. 이 때, 연산의 수를 n의 함수로 나타낸 것을 시갂 복잡도 함수라고 한다. ▶ T(n)이라고 표기. But T(n)은 입력의 개수 n에 대한 상당히 복잡한 수식으로 나타날 수 있다! 2. 시간 복잡도를 표기하는 방법!
  • 7. 시간 복잡도 2. 시간 복잡도를 표기하는 방법! 0 1 2 3 4 5n 0 1 4 9 16 25n² 0 1 2 6 24 120n! 1 2 4 8 16 322ⁿ 0 0 1 1 2 2log₂n 자료의 개수가 많아질수록 차수가 가장 큰 항의 영향이 점점 커지게 되고, 증가하는 비율 또한 최고차항의 값이 가장 크다.  결국, 시갂복잡도 분석에서는 최고차항만 고려하면 OK
  • 8. 시간 복잡도 입력의 개수 n에 따라 변하는 연산 횟수를 분석하기 쉽게 표시하는 방법 O(n)과 같이 표시한다. * 빅오 표기법 복잡도 순 정렬 * O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!) 3. 빅오 표기법의 등장