Post

🐹 1. Big-O Notation

big-O: μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ λ‚˜νƒ€λ‚΄λŠ” μ§€ν‘œ ν˜Ήμ€ μ–Έμ–΄

[ λΉ„μœ ν•˜κΈ° ]

λ””μŠ€ν¬μ— μžˆλŠ” νŒŒμΌμ„ λ‹€λ₯Έ 지역에 μ‚¬λŠ” μΉœκ΅¬μ—κ²Œ κ°€μž₯ 빨리 보낼 수 μžˆλŠ” 방법은 λ¬΄μ—‡μΌκΉŒ?

이메일, FTP, λ‹€λ₯Έ μ˜¨λΌμΈμ„ ν†΅ν•œ 전솑 방법을 λŒ€λΆ€λΆ„ 생각할 것

β†’ 파일 크기에 따라 생각해보아야 함

1) 파일 크기가 μž‘μ€ 경우

β†’ λ‹Ήμ—°νžˆ 온라인 전솑이 λΉ λ₯Ό 것이닀.

미ꡭ에 μžˆλŠ” μΉœκ΅¬μ—κ²Œ 직접 μ „λ‹¬ν•œλ‹€λ©΄ κ³΅ν•­μœΌλ‘œ κ°€μ„œ 비행기에 였λ₯Έ λ’€ μΉœκ΅¬κ°€ μžˆλŠ” κ³³κΉŒμ§€ λ‚ μ•„κ°€μ•Ό 함. 5-10μ‹œκ°„ μ†Œμš”

2) 파일의 크기가 큰 경우

β†’ λΉ„ν–‰κΈ°λ₯Ό 톡해 물리적으둜 λ°°λ‹¬ν•˜λŠ” 것이 더 λΉ λ₯Ό 수 μžˆλ‹€.

1TB 크기의 νŒŒμΌμ„ μ˜¨λΌμΈμ„ 톡해 μ „μ†‘ν•˜λ € ν•œλ‹€λ©΄ ν•˜λ£¨ 이상이 걸릴 수 μžˆλ‹€. 정말 κΈ‰ν•œ 상황이라면 λΉ„ν–‰κΈ°λ₯Ό νƒ€λŠ” 것이 λ‚˜μ„μ§€λ„ λͺ¨λ₯Έλ‹€.

[ μ‹œκ°„ λ³΅μž‘λ„ ]

μœ„μ˜ 예제 데이터 전솑 β€˜μ•Œκ³ λ¦¬μ¦˜β€™μ˜ μ‹€ν–‰μ‹œκ°„

  • 온라인 전솑: O(s) (s: 파일 크기)

    β†’ 파일의 크기가 증가함에 따라 전솑 μ‹œκ°„ λ˜ν•œ μ„ ν˜•μ μœΌλ‘œ 증가

  • λΉ„ν–‰κΈ°λ₯Ό ν†΅ν•œ 전솑: 파일 크기에 관계없이 O(1)

    β†’ 파일의 크기가 μ¦κ°€ν•œλ‹€κ³  ν•΄μ„œ μΉœκ΅¬μ—κ²Œ νŒŒμΌμ„ μ „μ†‘ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ λŠ˜μ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€. 즉, μƒμˆ˜ μ‹œκ°„λ§ŒνΌ μ†Œμš”λœλ‹€.

1.-Big-O-Notation-1.png

big-O, big-Θ, big-Ξ©(학계)

  • O(big-O): μ•Œκ³ λ¦¬μ¦˜ μˆ˜ν–‰ μ‹œκ°„μ˜ μƒν•œ, β€˜μž‘κ±°λ‚˜ 같은’ λΆ€λ“±ν˜Έ
  • Ξ©(big-Omega): λ“±κ°€ κ°œλ… ν˜Ήμ€ ν•˜ν•œ, Ξ© μˆ˜ν–‰ μ‹œκ°„λ³΄λ‹€ λΉ λ₯Ό 수 μ—†μŒ
  • Θ(big theta): O와 Ξ© λ‘˜ λ‹€λ₯Ό 의미. μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ˜ μˆ˜ν–‰μ΄ O(N)μ΄λ©΄μ„œ Ξ©(N)이라면 Θ(N)으둜 ν‘œν˜„ κ°€λŠ₯

길이 N의 λ°°μ—΄ 좜λ ₯을 ν‘œκΈ°ν•  λ•ŒλŠ” O(N) 말고도 O(N^2), O(N^3) λ“±μœΌλ‘œ ν‘œν˜„ κ°€λŠ₯ν•˜μ§€λ§Œ μ‹€μ œλ‘œ μš°λ¦¬λŠ” Θλ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμ²˜λŸΌ O(N)이라고 ν‘œν˜„ν•œλ‹€.

μ΅œμ„ μ˜ 경우, μ΅œμ•…μ˜ 경우, 평균적인 경우(μ‹€μ œ)

퀡 μ •λ ¬(quick sort)의 κ΄€μ μ—μ„œ 각 경우λ₯Ό λ°”λΌλ³΄μž

1.-Big-O-Notation-2.png

  • μ΅œμ„ μ˜ 경우: O(N)

    λͺ¨λ“  μ›μ†Œκ°€ λ™μΌν•˜λ‹€λ©΄ 퀡 정렬은 ν‰κ· μ μœΌλ‘œ λ‹¨μˆœνžˆ 배열을 ν•œ μ°¨λ‘€ μˆœνšŒν•˜κ³  끝날 것이닀.

    ν˜Ήμ€ 배열이 이미 μ •λ ¬λ˜μ–΄ μžˆμ–΄λ„ λ§ˆμ°¬κ°€μ§€μ΄λ‹€.

  • μ΅œμ•…μ˜ 경우: O(N^2)

    운이 μ—†κ²Œ λ°°μ—΄μ—μ„œ κ°€μž₯ 큰 μ›μ†Œκ°€ κ³„μ†ν•΄μ„œ 좕이 λœλ‹€λ©΄(ex.배열이 μ—­μˆœμœΌλ‘œ μ •λ ¬λ˜μ–΄ 있고 좕을 항상 첫 번째 μ›μ†Œλ‘œ 지정) μž¬κ·€ 호좜이 배열을 절반 크기의 λΆ€λΆ„ λ°°μ—΄λ‘œ λ‚˜λˆ„μ§€ λͺ»ν•˜κ³ , κ³ μž‘ ν•˜λ‚˜ 쀄어든 크기의 λΆ€λΆ„ λ°°μ—΄λ‘œ λ‚˜λˆ„κ²Œ λœλ‹€.

  • 평균적인 경우: O(NlogN)

μ•Œκ³ λ¦¬μ¦˜μ—μ„œ μ΅œμ•…μ˜ κ²½μš°μ™€ 평균적인 κ²½μš°κ°€ λŒ€λΆ€λΆ„ κ°™μ§€λ§Œ, 가끔 λ‹¬λΌμ„œ λ‘˜ λ‹€ μ–ΈκΈ‰ν•΄μ•Ό ν•  λ•Œλ„ μžˆλ‹€.

[ 곡간 λ³΅μž‘λ„ ]

크기가 n인 배열을 λ§Œλ“€κ³ μž ν•œλ‹€λ©΄ O(n)의 곡간 ν•„μš”

곡간 λ³΅μž‘λ„ μ˜ˆμ‹œ

  • μž¬κ·€ν˜ΈμΆœ μŠ€νƒ 곡간: O(n)

    1
    2
    3
    4
    5
    6
    
      int sum(int n) { /* 예제 1 */
      		if (n <= 0)
      				return 0;
      		}
      		return n + sum(n-1);
      }
    

    호좜될 λ•Œλ§ˆλ‹€ μŠ€νƒμ˜ κΉŠμ΄λŠ” κΉŠμ–΄μ§„λ‹€.

    1
    2
    3
    4
    5
    
      sum(4)
      	-> sum(3)
      			-> sum(2)
      					-> sum(1)
      							-> sum(0)
    

    μœ„μ˜ ν˜ΈμΆœμ€ μ „λΆ€ μŠ€νƒμ— 더해지고 μ‹€μ œ λ©”λͺ¨λ¦¬ 곡간을 μž‘μ•„ λ¨ΉλŠ”λ‹€.

  • 0κ³Ό n μ‚¬μ΄μ—μ„œ μΈμ ‘ν•œ 두 μ›μ†Œμ˜ ν•© κ΅¬ν•˜κΈ°: O(1)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
      int pairSumSequence(int n) { /* 예제 2 */
      		int sum = 0;
      		for (int i = 0; i < n; i++) {
      				sum += pairSum(i, i + 1);
      		}
      		return sum;
      }
        
      int pairSum(int a, int b) {
      		return a + b;
      }
    

    μœ„ μ½”λ“œλŠ” pairSum ν•¨μˆ˜λ₯Ό λŒ€λž΅ O(n)번 ν˜ΈμΆœν–ˆμ§€λ§Œ, 이 ν•¨μˆ˜λ“€μ΄ 호좜 μŠ€νƒμ— λ™μ‹œμ— μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ O(1) κ³΅κ°„λ§Œ μ‚¬μš©ν•œλ‹€.

[ μƒμˆ˜ν•­μ€ λ¬΄μ‹œν•˜λΌ ]

두 개의 μ€‘μ²©λ˜μ§€ μ•Šμ€ λ£¨ν”„λ‘œ 이루어진 μ½”λ“œλ₯Ό O(2N)이 μ•„λ‹Œ O(N)으둜 ν‘œκΈ°ν•œλ‹€.

O(2N)이 더 μ •ν™•ν•˜μ§€ μ•Šμ€ 가에 λŒ€ν•œ λ°˜λŒ€ μ˜ˆμ‹œλ₯Ό μ•„λž˜μ—μ„œ 보여쀀닀.

μ΅œμ†Œμ™€ μ΅œλŒ€ 1

1
2
3
4
5
6
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int x: array) {
		if (x < min) min = x;
		if (x > max) max = x;
}

μ΅œμ†Œμ™€ μ΅œλŒ€ 2

1
2
3
4
5
6
7
8
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int x : array) {
		if (x < min) min = x;
}
for (int x : array) {
		if (x > max) max = x;
}

1번 μ˜ˆμ‹œμ™€ 2번 μ˜ˆμ‹œ 쀑 for문을 ν•œ 번만 μ‚¬μš©ν•œ 1번 μ˜ˆμ œκ°€ 더 λΉ λ₯Έκ°€?

μžμ„Ένžˆ νŒŒμ•…ν•  ν•„μš”λŠ” μ—†μ§€λ§Œ big-O ν‘œκΈ°λ²•μ€ μˆ˜ν–‰ μ‹œκ°„μ΄ μ–΄λ–»κ²Œ λ³€ν™”ν•˜λŠ” 지λ₯Ό ν‘œν˜„ν•˜λŠ” 도ꡬ이닀. λ”°λΌμ„œ O(2N)이 μ–Έμ œλ‚˜ O(N)보닀 λ‚˜μ€ 것은 μ•„λ‹ˆλΌλŠ” μ‚¬μ‹€λ§Œ 받아듀이면 λœλ‹€.

[ 지배적이지 μ•Šμ€ 항은 λ¬΄μ‹œν•˜λΌ ]

O(N^2 + N)κ³Ό 같은 μˆ˜μ‹μ΄ μžˆμ„ λ•Œ N은 μƒμˆ˜ν•­μ€ μ•„λ‹ˆμ§€λ§Œ νŠΉλ³„νžˆ μ€‘μš”ν•œ 항은 μ•„λ‹ˆλ‹€.

O(N^2 + N^2)은 이전에 μƒμˆ˜ν•­μ„ λ¬΄μ‹œν•˜λΌ ν•˜μ˜€μœΌλ―€λ‘œ O(N^2)이 λœλ‹€. κ·Έλ ‡λ‹€λ©΄ λ’€μ˜ N^2항을 λ¬΄μ‹œν•œ 것이닀. β†’ N^2도 λ¬΄μ‹œν–ˆμœΌλ‹ˆ N을 λ¬΄μ‹œν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

이처럼 μˆ˜μ‹μ—μ„œ 지배적이지 μ•Šμ€ 항은 λ¬΄μ‹œν•΄λ„ λœλ‹€.

  • O(N^2+N) β‡’ O(N^2)
  • O(N+logN) β‡’ O(N)
  • O(5*2^N + 1000N^100) β‡’ O(2^N)

ν•˜μ§€λ§Œ μ—¬μ „νžˆ μˆ˜μ‹μ— 합이 λ‚¨μ•„μžˆμ„ 수 μžˆλ‹€.

O(B^2+A)λŠ” ν•˜λ‚˜μ˜ ν•­μœΌλ‘œ 쀄일 수 μ—†λ‹€. (Aλ₯Ό B둜 ν‘œν˜„κ°€λŠ₯ν•˜κ±°λ‚˜, Bλ₯Ό A둜 ν‘œν˜„ κ°€λŠ₯ν•˜μ§€ μ•ŠλŠ” 이상)

big-O μ‹œκ°„μ˜ μ¦κ°€μœ¨

1.-Big-O-Notation-3.png

\[O(logN) < O(N) < O(NlogN) < O(N^2) < O(2^N) < O(N!)\]

[ μ—¬λŸ¬ λΆ€λΆ„μœΌλ‘œ 이루어진 μ•Œκ³ λ¦¬μ¦˜: λ§μ…ˆ vs κ³±μ…ˆ ]

λ§μ…ˆ μˆ˜ν–‰ μ‹œκ°„: O(A+B)

1
2
3
4
5
6
for (int a : arrA) {
		print(a);
}
for (int b: arrB) {
		print(b);
}

κ³±μ…ˆ μˆ˜ν–‰ μ‹œκ°„: O(A*B)

1
2
3
4
5
for (int a : arrA) {
		for (int b : arrB) {
				print(a + "," + b);
		}
}

μ™Όμͺ½ μ˜ˆμ œμ—μ„œ A일을 ν•œ λ’€ B의 일을 μˆ˜ν–‰ν•œλ‹€. λ”°λΌμ„œ 전체 μˆ˜ν–‰ν•œ 일은 O(A+B)이닀.

였λ₯Έμͺ½ μ˜ˆμ œμ—μ„œλŠ” A의 각 μ›μ†Œμ— λŒ€ν•΄ B의 일을 μˆ˜ν–‰ν•œλ‹€. λ”°λΌμ„œ 전체 μˆ˜ν–‰ν•œ 일은 O(A*B)κ°€ λœλ‹€.

  • A일과 B의 일이 λ³„κ°œλ‘œ 이루어 진닀 β†’ μˆ˜ν–‰μ‹œκ°„μ˜ ν•©
  • A일을 ν•  λ•Œ B 일이 μˆ˜ν–‰λœλ‹€. ν˜Ήμ€ κ·Έ λ°˜λŒ€ β†’ μˆ˜ν–‰μ‹œκ°„μ˜ κ³±

[ μƒν™˜ μ‹œκ°„ ]

ArrayList(동적 가변크기 λ°°μ—΄)의 μ‚½μž… μ—°μ‚°μ˜ μˆ˜ν–‰μ‹œκ°„

  • 배열이 가득 μ°¨ μžˆλŠ” 경우(λ“œλ¬Έ 경우)

    배열에 N개의 μ›μ†Œκ°€ λ“€μ–΄ μžˆμ„ λ•Œ μƒˆλ‘œμš΄ μ›μ†Œλ₯Ό μ‚½μž…ν•˜λ €λ©΄ O(N)이 κ±Έλ¦°λ‹€.

    β†’ 크기가 2N인 배열을 μƒˆλ‘œ λ§Œλ“€κ³  기쑴의 λͺ¨λ“  μ›μ†Œλ₯Ό μƒˆ λ°°μ—΄λ‘œ 볡사해야 ν•˜κΈ° λ•Œλ¬Έ

  • 배열이 가득 μ°¨ μžˆμ§€ μ•Šμ€ 경우(ν‰μƒμ‹œ 경우)

    μ‚½μž… 연산은 O(1)이 κ±Έλ¦°λ‹€.

두 가지 경우λ₯Ό ν¬ν•¨ν•œ 전체 μˆ˜ν–‰ μ‹œκ°„μ„ λ”°μ Έ λ³Ό λ•Œ, μƒν™˜ μ‹œκ°„μ΄λΌλŠ” κ°œλ…μ„ μ΄μš©ν•œλ‹€.

μƒν™˜ μ‹œκ°„: μ΅œμ•…μ˜ κ²½μš°λŠ” 가끔 λ°œμƒν•˜μ§€λ§Œ ν•œ 번 λ°œμƒν•˜λ©΄ κ·Έ ν›„λ‘œ κ½€ μ˜€λž«λ™μ•ˆ λ‚˜νƒ€λ‚˜μ§€ μ•ŠμœΌλ―€λ‘œ λΉ„μš©(μˆ˜ν–‰ μ‹œκ°„)을 λΆ„ν•  μƒν™˜ν•œλ‹€λŠ” κ°œλ…

κ·Έλ ‡λ‹€λ©΄ ArrayList의 경우 μƒν™˜μ‹œκ°„μ€?

λ°°μ—΄μ˜ 크기가 2의 μŠΉμˆ˜κ°€ λ˜μ—ˆμ„ λ•Œ μ›μ†Œλ₯Ό μ‚½μž…ν•˜λ©΄ μš©λŸ‰μ΄ 2배둜 증가

λ°°μ—΄μ˜ 크기가 1, 2, 4, 8, 16, … , X일 λ•Œ μƒˆλ‘œμš΄ μ›μ†Œλ₯Ό μ‚½μž…ν•˜λ©΄ λ°°μ—΄μ˜ μš©λŸ‰ 2배둜 증가 ν›„ κΈ°μ‘΄ μ›μ†Œλ₯Ό μƒˆλ‘œμš΄ λ°°μ—΄λ‘œ 볡사해주어야 ν•œλ‹€.

μ΄λ•Œ ν•© 1+2+4+8+16+…+X 은? 이 μˆ˜μ—΄μ„ μ°¨λ‘€λ‘œ 읽으면 1μ—μ„œ XκΉŒμ§€ 두 λ°°μ”© μ¦κ°€ν•˜λŠ” μˆ˜μ—΄μ΄λ‹€.

X+X/2+X/4+X/8+…+1의 합은 λŒ€λž΅ 2X와 κ°™λ‹€.

β†’ λ”°λΌμ„œ X개의 μ›μ†Œλ₯Ό μ‚½μž…ν–ˆμ„ λ•Œ ν•„μš”ν•œ μ‹œκ°„μ€ O(2X)이고, 이λ₯Ό λΆ„ν•  μƒν™˜ν•΄λ³΄λ©΄ μ‚½μž… ν•œ λ²ˆμ— ν•„μš”ν•œ μ‹œκ°„μ€ O(1)이닀.

[ log N μˆ˜ν–‰ μ‹œκ°„ ]

λŒ€ν‘œμ μΈ μ˜ˆμ‹œλ‘œ 이진탐색(binary search)κ°€ μžˆλ‹€.

이진탐색

  • N개의 μ •λ ¬λœ μ›μ†Œκ°€ λ“€μ–΄ μžˆλŠ” λ°°μ—΄μ—μ„œ μ›μ†Œ xλ₯Ό 찾을 λ•Œ μ‚¬μš©λœλ‹€.
  • μ›μ†Œ x와 λ°°μ—΄μ˜ 쀑간 값을 비ꡐ
    • x = 쀑간값 : λ°˜ν™˜
    • x < 쀑간값 : λ°°μ—΄μ˜ μ™Όμͺ½ λΆ€λΆ„ μž¬νƒμƒ‰
    • x > 쀑간값 : λ°°μ—΄μ˜ 였λ₯Έμͺ½ λΆ€λΆ„ μž¬νƒμƒ‰

    1.-Big-O-Notation-4.png

각 λ™μž‘μ΄ μˆ˜ν–‰λ  λ•Œλ§ˆλ‹€ 탐색해야할 μ›μ†Œμ˜ κ°œμˆ˜κ°€ N/2둜 쀄어든닀. κ·ΈλŸ¬λ‹€κ°€ μ›μ†Œλ₯Ό μ°Ύμ•˜κ±°λ‚˜ 탐색해야할 μ›μ†Œκ°€ ν•˜λ‚˜λ§Œ λ‚¨μœΌλ©΄ 탐색을 μ€‘μ§€ν•œλ‹€.

총 μˆ˜ν–‰ μ‹œκ°„μ€ N을 μ ˆλ°˜μ”© λ‚˜λˆ„λŠ” κ³Όμ •μ—μ„œ λͺ‡ 단계 λ§Œμ— 1이 λ˜λŠ”μ§€μ— 따라 κ²°μ •λœλ‹€.

1.-Big-O-Notation-5.png

λ°˜λŒ€λ‘œ 생각해보면 1μ—μ„œ 16으둜 증가할 λ•Œ 2λ₯Ό λͺ‡ 번 κ³±ν•΄μ•Ό N이 λ˜λŠ”μ§€ 확인해본닀.

1.-Big-O-Notation-6.png

즉, 2^k = N을 λ§Œμ‘±ν•˜λŠ” kλŠ” logN이닀.

1.-Big-O-Notation-7.png

μ–΄λ–€ λ¬Έμ œμ—μ„œ μ›μ†Œμ˜ κ°œμˆ˜κ°€ μ ˆλ°˜μ”© 쀄어든닀면 κ·Έ 문제의 μˆ˜ν–‰ μ‹œκ°„μ€ O(logN)이 될 κ°€λŠ₯성이 크닀.

같은 μ›λ¦¬λ‘œ, κ· ν˜• 이진 탐색 트리(balanced binary search tree)μ—μ„œ μ›μ†Œλ₯Ό μ°ΎλŠ” λ¬Έμ œλ„ O(logN)이닀.

β†’ 맀 λ‹¨κ³„λ§ˆλ‹€ μ›μ†Œμ˜ λŒ€μ†Œλ₯Ό λΉ„κ΅ν•œ ν›„ μ™Όμͺ½ ν˜Ήμ€ 였λ₯Έμͺ½μœΌλ‘œ λ‚΄λ €κ°„λ‹€. 각 λ‹¨κ³„μ—μ„œ 검색해야할 λ…Έλ“œμ˜ κ°œμˆ˜κ°€ μ ˆλ°˜μ”© μ€„μ–΄λ“€κ²Œ λœλ‹€.

[ μž¬κ·€μ μœΌλ‘œ μˆ˜ν–‰ μ‹œκ°„ κ΅¬ν•˜κΈ° ]

μ•„λž˜ μ½”λ“œλŠ” μˆ˜ν–‰ μ‹œκ°„μ„ κ΅¬ν•˜κΈ° μ•½κ°„ κΉŒλ‹€λ‘­λ‹€.

1
2
3
4
5
6
int f(int n) {
		if (n <= 1) {
				return 1;
		}
		return f(n - 1) + f(n - 1);
}

ν•¨μˆ˜ fκ°€ 두 번 호좜된 것을 보고 O(N^2)라 κ²°λ‘  λ‚΄λ¦°λ‹€λ©΄ ν‹€λ Έλ‹€.

1.-Big-O-Notation-8.png

트리의 κΉŠμ΄κ°€ N이고, 각 λ…Έλ“œ(ν•¨μˆ˜ 호좜)λŠ” 두 개의 μžμ‹ λ…Έλ“œλ₯Ό 가지고 μžˆλ‹€.

λ”°λΌμ„œ κΉŠμ΄κ°€ ν•œ 단계 κΉŠμ–΄μ§ˆ λ•Œλ§ˆλ‹€ μ΄μ „μ˜ 두 λ°° 더 많이 ν˜ΈμΆœν•œλ‹€.

1.-Big-O-Notation-9.png

λ”°λΌμ„œ 전체 λ…Έλ“œμ˜ κ°œμˆ˜λŠ”

\[2^0 + 2^1 + 2^2 + 2^3 + 2^4 + … + 2^N (=2^{N+1} - 1)\]

이처럼 보톡 μž¬κ·€ ν•¨μˆ˜μ—μ„œ μˆ˜ν–‰μ‹œκ°„μ€ O(λΆ„κΈ°^깊이)둜 ν‘œν˜„λ˜κ³€ ν•œλ‹€. λ”°λΌμ„œ μœ„μ˜ 경우 μˆ˜ν–‰μ‹œκ°„μ€ O(2^N)이 λœλ‹€.

이 μ•Œκ³ λ¦¬μ¦˜μ˜ 곡간 λ³΅μž‘λ„λŠ” O(N)이 될 것이닀. 전체 λ…Έλ“œμ˜ κ°œμˆ˜λŠ” O(2^N)μ΄μ§€λ§Œ, νŠΉμ • μ‹œκ°μ— μ‚¬μš©ν•˜λŠ” κ³΅κ°„μ˜ ν¬κΈ°λŠ” O(N)이닀.

This post is licensed under CC BY 4.0 by the author.