์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„์™€ Big-O
728x90

๋“ค์–ด๊ฐ€๋ฉฐ

๊ธฐ์™•์ด๋ฉด ๊ฐ€์žฅ ๋น ๋ฅธ ๊ธธ๋กœ ๊ฐ€์ž!
์ถœํ‡ด๊ทผ์„ ํ•˜๊ฑฐ๋‚˜, ์นœ๊ตฌ์™€์˜ ์•ฝ์† ๋“ฑ๋“ฑ. ์–ด๋”˜๊ฐ€๋ฅผ ํ–ฅํ•  ๋•Œ ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ๋ชฉ์ ์ง€๋กœ ๊ฐ€๋Š” ๋น ๋ฅธ ๋ฃจํŠธ๋ฅผ ์ฐพ์•„๋ณด๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค.
์ปดํ“จํ„ฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์‹œํ–‰ํ•  ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ ค ํ•œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •(๋ช…๋ น์–ด)๋“ค์˜ ๋‹จ๊ณ„์ ์ธ ๋‚˜์—ด์„ ๋งํ•œ๋‹ค.
์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋” ํšจ์œจ์ ์ธ๊ฐ€๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ง€ํ‘œ๋“ค์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‰๊ฐ€ ์ง€ํ‘œ

  • ์ •ํ™•์„ฑ
  • ์ž‘์—…๋Ÿ‰
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
  • ์ตœ์ ์„ฑ
  • ํšจ์œจ์„ฑ
    • ์‹œ๊ฐ„ ๋ณต์žก๋„ => ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ ์–ผ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š”์ง€?
    • ๊ณต๊ฐ„ ๋ณต์žก๋„ => ์–ผ๋งŒํผ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”์ง€?

๋ณดํ†ต ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ฒจ์ง€๋Š” ๋ถ€๋ถ„์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ํšจ์œจ์„ฑ, ๊ทธ ์ค‘์—์„œ๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„์ด๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์ž…๋ ฅ ํฌ๊ธฐ ๊ฐ’์— ๋Œ€ํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‹จ์œ„ ์—ฐ์‚ฐ์„ ๋ช‡ ๋ฒˆ ์ˆ˜ํ–‰ํ–ˆ๋Š” ์ง€์— ๋Œ€ํ•ด ๊ณ„์‚ฐํ•˜์—ฌ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์š”์ธ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์š”์ธ

  • ์ž…๋ ฅ ํฌ๊ธฐ (n์œผ๋กœ ํ‘œ์‹œํ•จ)
    • ์ž…๋ ฅ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ, ๊ฐœ์ˆ˜
    • ํ–‰๋ ฌ์˜ ํฌ๊ธฐ๋‚˜ ๋ฆฌ์ŠคํŠธ ์›์†Œ์˜ ์ˆ˜ ๊ฐ™์€ ๊ฒƒ๋“ค.
    • ์ž…๋ ฅํฌ๊ธฐ n์— ๋Œ€ํ•œ ํ•จ์ˆ˜๋ฅผ f(n)์œผ๋กœ ํ‘œํ˜„ํ•˜๊ณ , n์ด ์ฆ๊ฐ€ํ•˜๋ฉด ์ˆ˜ํ–‰ ์‹œ๊ฐ„๋„ ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ
    • ํ‰๊ท  ์ˆ˜ํ–‰ ์‹œ๊ฐ„
    • ์ตœ์„  ์ˆ˜ํ–‰ ์‹œ๊ฐ„
    • ์ตœ์•… ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ⇒ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์‚ฌ์šฉํ•จ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ์— ๋Œ€ํ•ด์„œ ์ ๊ทผ ์„ฑ๋Šฅ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰์‹œ๊ฐ„์˜ ์ฆ๊ฐ€์ถ”์„ธ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,
์ค‘์š”ํ•˜์ง€ ์•Š์€ ์ƒ์ˆ˜์™€ ๊ณ„์ˆ˜๋“ค์„ ์ œ์™ธํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ตœ๊ณ ์ฐจํ•ญ๋งŒ์„ ๊ณ„์‚ฐํ•œ๋‹ค.
์ตœ๊ณ ์ฐจํ•ญ์ด ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

1            O(1)
3n+5        O(n)
2n^2+5n+1    O(n^2)

 

 

์ ๊ทผ์  ํ‘œํ˜„๋ฒ•์—๋Š” ์„ธ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์ง€๋งŒ ๋ณดํ†ต์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๋”ฐ์ง€๋Š” ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.
์ตœ์•…์˜ ๊ฒฝ์šฐ์ผ ๋•Œ๋ฅผ ํŒ๋‹จํ•˜๋ฉด ํ‰๊ท ๊ณผ ํก์‚ฌํ•œ ์„ฑ๋Šฅ์œผ๋กœ ์˜ˆ์ธกํ•˜๊ธฐ ์ข‹๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3๊ฐ€์ง€ ์ ๊ทผ์  ํ‘œํ˜„๋ฒ•

  • O ๋น…์˜ค : ์ตœ์•…์˜ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ ํ‘œํ˜„ (๋Œ€๋ถ€๋ถ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‘œํ˜„)
  • ๐œฝ ์„ธํƒ€ : ํ‰๊ท ์ ์ธ ๊ฒฝ์šฐ์—์„œ์˜ ์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ ํ‘œํ˜„
  • Ω ์˜ค๋ฉ”๊ฐ€ : ์ตœ์„ ์˜ ์ƒํ™ฉ์ผ ๋•Œ์˜ ์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ ํ‘œํ˜„

 

 

 

์ฃผ์š” O-ํ‘œ๊ธฐ ๊ฐ„์˜ ์—ฐ์‚ฐ ์‹œ๊ฐ„์˜ ํฌ๊ธฐ ๊ด€๊ณ„

https://www.bigocheatsheet.com/

O(1) < O(log n) < O(n) < O(n log n) <<<<<  O(n^2) < O(n^3) < O(2^n)

๋น…์˜ค์˜ ๋ณต์žก๋„๋ฅผ ๋‚˜ํƒ€๋‚ธ ์ฐจํŠธ๋ฅผ ์‹์œผ๋กœ ๋‚˜์—ดํ•ด๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์™ผ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์‹œ๊ฐ„์ด ์ ๊ฒŒ ์†Œ์š”๋˜๋ฉฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์‹œ๊ฐ„์ด ๋” ๋งŽ์ด ์†Œ์š”๋œ๋‹ค.
์ œ์ผ ์™ผ์ชฝ์˜ ์ƒ์ˆ˜์‹œ๊ฐ„ O(1)์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋ฉฐ ์ œ์ผ ์˜ค๋ฅธ์ชฝ์˜ ์ง€์ˆ˜ ์‹œ๊ฐ„ O(2^n)์ด ๊ฐ€์žฅ ๋น„ํšจ์œจ์ ์ด๋‹ค.

 

 

 

 

๋น…์˜ค ํ‘œ๊ธฐ๋ฒ• ์˜ˆ์ œ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณด๋Š” ๋Œ€ํ‘œ์ ์ธ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ• ์˜ˆ์‹œ ์ฝ”๋“œ๋“ค.

 

  • O(1)

return ๊ฐ’์€ ์ƒ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.

function big_o(n) {
  let sum = 0;
  sum = n * 2;
  return sum; // 2์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— O(1)
}

 

 

 

  • O(n)

for๋ฌธ์ด ๋Œ€ํ‘œ์ ์ด๋‹ค. for๋ฌธ์€ ์ค‘์ฒฉ๋ ์ˆ˜๋ก n ์ œ๊ณฑ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

// for๋ฌธ์ด ๋งŽ์„์ˆ˜๋ก n ์ œ๊ณฑ์ด ๋œ๋‹ค.
function big_o(arr, n) {
  let sum = 0;
  for (let i = 0; i < n; i++) {
    sum += arr[i];
  }
  return sum; // n+2๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— O(N)
}

 

 

 

  • O(n^2)

์ด์ค‘ for๋ฌธ์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋‹ค. for๋ฌธ์— ๋น„ํ•ด ํ˜„์ €ํžˆ ๋Š๋ฆฐ ์‹œ๊ฐ„ ๋ณต์žก๋„..

function big_o(arr, n) {
  let sum = 0;
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      sum += arr[i][j];
    }
  }
  return sum; // n^2 + 2 => O(n^2)
}

 

 

 

  • O(logN)
    ์ด์ง„ ํƒ์ƒ‰์ด๋‚˜ ๋ณ‘ํ•ฉ์ •๋ ฌ, ๋ถ„ํ• ์ •๋ณต ๋“ฑ์—์„œ ๋งŽ์ด ๋‚˜์˜ค๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„์ด๋‹ค.
function big_o(n) {
  let sum = 0;
  for (let i = 0; i < n; i *= 2) {
    sum += 2;
  }
  return sum; // n/2 + 2 => O(logN). O(n)๋ณด๋‹ค ๋” ๋น ๋ฅด๋‹ค.
}

 

 

 

 

์•„๋ž˜๋Š” ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„, ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๋น„๊ตํ•œ ํ‘œ์ด๋‹ค.

https://www.bigocheatsheet.com/
https://www.bigocheatsheet.com/

728x90