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
chaeshee0908 committed Oct 15, 2023
1 parent c43cff5 commit 45ceb03
Show file tree
Hide file tree
Showing 10 changed files with 9 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ math: true

→ 파일의 크기가 증가한다고 해서 친구에게 파일을 전송하는 데 걸리는 시간이 늘어나지 않는다. 즉, 상수 시간만큼 소요된다.


<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-채승희/1.png" />
![1.-Big-O-Notation-1.png](/assets/img/chaeshee0908/1.-Big-O-Notation-1.png){: width="300" }

### big-O, big-**Θ**, big-Ω(학계)

Expand All @@ -57,7 +56,7 @@ math: true

퀵 정렬(quick sort)의 관점에서 각 경우를 바라보자

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-채승희/2.png" />
![1.-Big-O-Notation-2.png](/assets/img/chaeshee0908/1.-Big-O-Notation-2.png){: width="450" }

- **최선의 경우: O(N)**

Expand Down Expand Up @@ -173,7 +172,7 @@ O(B^2+A)는 하나의 항으로 줄일 수 없다. (A를 B로 표현가능하거

### big-O 시간의 증가율

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-채승희/3.png" />
![1.-Big-O-Notation-3.png](/assets/img/chaeshee0908/1.-Big-O-Notation-3.png){: width="500" }

$$
O(logN) < O(N) < O(NlogN) < O(N^2) < O(2^N) < O(N!)
Expand Down Expand Up @@ -252,22 +251,22 @@ X+X/2+X/4+X/8+…+1의 합은 대략 2X와 같다.
- x < 중간값 : 배열의 왼쪽 부분 재탐색
- x > 중간값 : 배열의 오른쪽 부분 재탐색

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-채승희/4.png" />
![1.-Big-O-Notation-4.png](/assets/img/chaeshee0908/1.-Big-O-Notation-4.png){: width="500" }


각 동작이 수행될 때마다 탐색해야할 원소의 개수가 N/2로 줄어든다. 그러다가 원소를 찾았거나 탐색해야할 원소가 하나만 남으면 탐색을 중지한다.

총 수행 시간은 N을 절반씩 나누는 과정에서 몇 단계 만에 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" />
![1.-Big-O-Notation-5.png](/assets/img/chaeshee0908/1.-Big-O-Notation-5.png){: width="200" }

반대로 생각해보면 1에서 16으로 증가할 때 2를 몇 번 곱해야 N이 되는지 확인해본다.

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-채승희/6.png" />
![1.-Big-O-Notation-6.png](/assets/img/chaeshee0908/1.-Big-O-Notation-6.png){: width="200" }

즉, 2^k = N을 만족하는 k는 logN이다.

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-채승희/7.png" />
![1.-Big-O-Notation-7.png](/assets/img/chaeshee0908/1.-Big-O-Notation-7.png){: width="200" }

어떤 문제에서 **원소의 개수가 절반씩 줄어든다면 그 문제의 수행 시간은 O(logN)이 될 가능성이 크다.**

Expand All @@ -290,13 +289,13 @@ int f(int n) {

함수 f가 두 번 호출된 것을 보고 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-채승희/8.png" />
![1.-Big-O-Notation-8.png](/assets/img/chaeshee0908/1.-Big-O-Notation-8.png){: width="700" }

트리의 깊이가 N이고, 각 노드(함수 호출)는 두 개의 자식 노드를 가지고 있다.

따라서 깊이가 한 단계 깊어질 때마다 이전의 두 배 더 많이 호출한다.

<img src="https://github.com/L1LDB/L1LDB.github.io/blob/main/_posts/coding-interview-univ/1.-Big-O-Notation/2023-09-23-채승희/9.png" />
![1.-Big-O-Notation-9.png](/assets/img/chaeshee0908/1.-Big-O-Notation-9.png){: width="550" }

따라서 전체 노드의 개수는

Expand Down

0 comments on commit 45ceb03

Please sign in to comment.