Skip to content

Commit

Permalink
update: [1주차_노경민] 1. Big-O Notation
Browse files Browse the repository at this point in the history
  • Loading branch information
gengminy committed Oct 15, 2023
1 parent 2fd74c6 commit fc21154
Showing 1 changed file with 13 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Big - O : 알고리즘의 효율성을 나타내는 지표 혹은 언어

점근적 실행 시간, 혹은 Big - O 시간에 대한 개념이다

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/1.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/1.png")

O(s) : 온라인 전송

Expand Down Expand Up @@ -54,19 +54,19 @@ O : 시간의 상한을 나타낸다. 예를 들면 배열의 모든 값을 출

재귀 호출에서 사용하는 스택 공간도 공간 복잡도 계산에 포함된다.

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/2.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/2.png")

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/3.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/3.png")

이 함수는 호출될 때마다 스택의 깊이가 깊어지기 때문에 O(N) 공간을 사용한다.

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/4.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/4.png")

이 코드는 함수를 대략 n 번 실행했지만 호출 스택에 동시에 존재하지 않기 때문에 O(1) 공간을 사용한다.

## 상수항은 무시하라

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/5.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/5.png")

O(2N) 으로 표기되어야 할 알고리즘은 실제로 O(N) 으로 표현한다.

Expand All @@ -76,15 +76,15 @@ O(2N) 으로 표기되어야 할 알고리즘은 실제로 O(N) 으로 표현한

따라서 O(N^2 + N^2) 은 O(N^2) 가 된다.

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/6.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/6.png")

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/7.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/7.png")

## 여러 부분으로 이루어진 알고리즘: 덧셈 vs 곱셈

어떤 알고리즘이 두 단계로 이루어져 있다고 할 때, 어떤 경우에 수행시간을 더하고 곱해야 할까

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/8.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/8.png")

왼쪽에선 A 일을 한 뒤에 B 일을 하기 때문에 수행시간은 O(A+B) 이다

Expand Down Expand Up @@ -112,25 +112,25 @@ ArrayList 는 원소 삽입 시 필요에 따라 배열 크기를 조절하는

처음에는 원소 N개가 들어있는 배열에서 시작하고 한 단계마다 탐색할 원소의 개수가 N/2 로 줄어든다.

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/9.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/9.png")

반대로 생각하면 2를 몇 번 곱해야 N이 되는가?

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/10.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/10.png")

즉, 2^k = N 을 만족하는 k 는 무엇인가? 바로 로그라고 할 수 있다

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/11.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/11.png")

## 재귀적으로 수행 시간 구하기

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/12.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/12.png")

이 함수의 시간 복잡도는 O(N^2) 이 아니다.

수행 시간을 추측하지 말고 코드를 하나씩 읽어봐야 한다.

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/13.png" />
![]("https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-노경민/13.png")

트리의 깊이가 N 이고 각 노드는 두 개의 자식 노드를 가지고 있다.

Expand Down

0 comments on commit fc21154

Please sign in to comment.