Skip to content

Latest commit

ย 

History

History
144 lines (91 loc) ยท 5.76 KB

TimeComplexity.md

File metadata and controls

144 lines (91 loc) ยท 5.76 KB

์‹œ๊ฐ„๋ณต์žก๋„์™€ Big-O ํ‘œ๊ธฐ๋ฒ• (Time Complexity & Big-O)

written by sohyeon, hyemin ๐Ÿ’ก


1. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ถ„์„๊ณผ ์ˆ˜ํ–‰์‹œ๊ฐ„

1-1. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ถ„์„

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

์ˆ˜ํ–‰์‹œ๊ฐ„

๊ธฐ๋ณธ์—ฐ์‚ฐ๊ฐœ์ˆ˜ ๋˜๋Š” ์‹คํ–‰๋œ ๋‹จ๊ณ„์˜ ํšŸ์ˆ˜
(์ฆ‰, ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์€ ๊ฐ ๋ช…๋ น๋ฌธ ์ˆ˜ํ–‰์‹œ๊ฐ„์˜ ํ•ฉ์ด๋‹ค.)

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰์‹œ๊ฐ„

์ฃผ์–ด์ง„ ๋ฌธ์ œ์˜ ์ž…๋ ฅํฌ๊ธฐ๊ฐ€ ๋‹ค์–‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์ตœ์•…, ์ตœ์ƒ, ํ‰๊ท ์ ์ธ ๊ฒฝ์šฐ ์ด 3๊ฐœ์˜ case๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ
์šฐ๋ฆฌ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ์— ์ฃผ๋กœ ๊ด€์‹ฌ์„ ๋‘˜ ๊ฒƒ์ด๋‹ค.

์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” ๋ชจ๋“  ์ž…๋ ฅ์— ๋Œ€ํ•œ ์ˆ˜ํ–‰์‹œ๊ฐ„์˜ ์ƒํ•œ์ด ๋˜๋ฉฐ,
์ด๋ณด๋‹ค ๋” ๋‚˜์œ ๊ฒฝ์šฐ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ธฐ๋„ ํ•จ  

1-2. ์‹œ๊ฐ„๋ณต์žก๋„

๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„ ๊ธฐ์ค€
์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์—ฐ์‚ฐ์˜ ์ˆ˜๋ฅผ ์ž…๋ ฅ์˜ ํฌ๊ธฐ์— ๋Œ€ํ•œ ํ•จ์ˆ˜๋กœ ํ‘œํ˜„

<์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ์ž…๋ ฅ ํฌ๊ธฐ์˜ ๊ด€๊ณ„>

์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋†’๋‹ค๋Š” ๊ฒƒ์€ ์ž…๋ ฅ์˜ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•  ๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.  
ํ•˜์ง€๋งŒ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ๋‹ค๊ณ  ํ•ด์„œ ์–ธ์ œ๋‚˜ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.  
์ž…๋ ฅ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์„ ๋•Œ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋†’์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ‘œ๊ธฐํ•˜๊ธฐ ์‰ฝ๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ์ฆ๊ฐ€์ฐจ์ˆ˜, ์ ๊ทผ์  ํšจ์œจ์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ผ ๊ฒƒ์ด๋‹ค.

์ฆ๊ฐ€์ฐจ์ˆ˜

๋” ๋‹จ์ˆœํ•˜๊ฒŒ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ˆ˜ํ–‰์‹œ๊ฐ„์— ๋Œ€ํ•œ ์ฆ๊ฐ€๋น„์œจ ๋˜๋Š” ์ฆ๊ฐ€์ฐจ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ
์ฐจ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ํ•ญ๋งŒ ๊ณ ๋ คํ•˜๊ณ  ์ƒ์ˆ˜ ๊ณ„์ˆ˜๋Š” ๋ฌด์‹œํ•œ๋‹ค.

์ ๊ทผ์  ํšจ์œจ์„ฑ

์ž…๋ ฅํฌ๊ธฐ๊ฐ€ ๊ทนํ•œ์œผ๋กœ ์ฆ๊ฐ€ํ•  ๋•Œ ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ์–ด๋–ป๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š”์ง€์— ๊ด€์‹ฌ์„ ๋‘๊ณ 
์ ๊ทผ์ ์œผ๋กœ ๋” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐ€์žฅ ์ข‹์€ ์„ ํƒ์ด ๋˜๋Š” ๊ฒƒ

์ ๊ทผ์  ํ‘œ๊ธฐ ๋ฐฉ์‹์— ๋”ฐ๋ผ,

  • ์ตœ์ƒ์˜ ๊ฒฝ์šฐ : ์˜ค๋ฉ”๊ฐ€ ํ‘œ๊ธฐ๋ฒ• (Big-ฮฉ Notation)

  • ํ‰๊ท ์˜ ๊ฒฝ์šฐ : ์„ธํƒ€ ํ‘œ๊ธฐ๋ฒ• (Big-ฮธ Notation)

  • ์ตœ์•…์˜ ๊ฒฝ์šฐ : ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ• (Big-O Notation)

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

2. ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•(Big-O Notation)

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

์ฆ‰, ์‹œ๊ฐ„๋ณต์žก๋„์— ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ฐจํ•ญ์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค.

T(n)=n^2+2n+9 	    # O(n2)

T(n)=n^4+n^3+n^2+1  # O(n4)

T(n)=5n^3+3n^2+2n+1 # O(n3)

์ตœ๊ณ  ์ฐจํ•ญ์„ ์ œ์™ธํ•˜๊ณ  ๋‹ค ์ œ๊ฑฐํ•˜๊ณ  ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์‚ฐ์ด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋ฐ˜๋ณต๋ฌธ์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ์ด ๋ช‡๋ฒˆ ์‹คํ–‰๋˜๋Š”์ง€ ๋ณด๋ฉด ๋œ๋‹ค.

์˜ˆ์‹œ)

for(int i=0; i<N; i++){
	...
    for(int k=0; k<N; k++){
    	...
    }
}

์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ N๋ฒˆ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ด ๋‘๋ฒˆ ์ค‘์ฒฉ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N^2)์ด๋‹ค.

2-1. Big-O ํ‘œ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜์™€ ์„ฑ๋Šฅ

1) Big-O ํ‘œ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜

  • O(1) - (์ƒ์ˆ˜) Constant

    • ์ž…๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์–‘๊ณผ ์ƒ๊ด€์—†์ด ์ผ์ •ํ•œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๊ฐ€์ง„๋‹ค.
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์˜ค์ง ํ•œ ๋‹จ๊ณ„๋งŒ ๊ฑฐ์นœ๋‹ค.
  • O(logN) Logarithmic

    • ๋ฐ์ดํ„ฐ์–‘์ด ๋งŽ์•„์ ธ๋„, ์‹œ๊ฐ„์ด ์กฐ๊ธˆ์”ฉ ๋Š˜์–ด๋‚œ๋‹ค.

    • ์‹œ๊ฐ„์— ๋น„๋ก€ํ•˜์—ฌ, ํƒ์ƒ‰ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ์–‘์ด 2์˜ n์Šน์ด ๋œ๋‹ค.

    • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„๋“ค์ด ์—ฐ์‚ฐ๋งˆ๋‹ค ํŠน์ • ์š”์ธ์— ์˜ํ•ด ์ค„์–ด๋“ ๋‹ค.

    • ๋งŒ์•ฝ ์ž…๋ ฅ ์ž๋ฃŒ์˜ ์ˆ˜์— ๋”ฐ๋ผ ์‹คํ–‰์‹œ๊ฐ„์ด ์ด log N ์˜ ๊ด€๊ณ„๋ฅผ ๋งŒ์กฑํ•œ๋‹ค๋ฉด N์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์‹คํ–‰์‹œ๊ฐ„์ด ์กฐ๊ธˆ์”ฉ ๋Š˜์–ด๋‚œ๋‹ค.

    • ์ด ์œ ํ˜•์€ ์ฃผ๋กœ ์ปค๋‹ค๋ž€ ๋ฌธ์ œ๋ฅผ ์ผ์ •ํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š” ์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐค๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ์œ ํ˜•์ด๋‹ค.

    • ์˜ˆ์‹œ: Binary Search

  • O(N) Linear

    • ๋ฐ์ดํ„ฐ์–‘์— ๋”ฐ๋ผ ์‹œ๊ฐ„์ด ์ •๋น„๋ก€ํ•œ๋‹ค.
    • linear search, for ๋ฌธ์„ ํ†ตํ•œ ํƒ์ƒ‰์„ ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.
  • O(N log N) log linear

    • ๋ฐ์ดํ„ฐ์–‘์ด N๋ฐฐ ๋งŽ์ด ์ง„๋‹ค๋ฉด, ์‹คํ–‰ ์‹œ๊ฐ„์€ N๋ฐฐ ๋ณด๋‹ค ์กฐ๊ธˆ๋” ๋งŽ์•„ ์ง„๋‹ค. (์ •๋น„๋ก€ ํ•˜์ง€ ์•Š๋Š”๋‹ค)

    • ์ด ์œ ํ˜•์€ ์ปค๋‹ค๋ž€ ๋ฌธ์ œ๋ฅผ ๋…๋ฆฝ์ ์ธ ์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ์–ด ๊ฐ๊ฐ์— ๋Œ€ํ•ด ๋…๋ฆฝ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ , ๋‚˜์ค‘์— ๋‹ค์‹œ ๊ทธ๊ฒƒ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ชจ์œผ๋Š” ๊ฒฝ์šฐ์— ๋‚˜ํƒ€๋‚œ๋‹ค.

    • N์ด ๋‘๋ฐฐ๋กœ ๋Š˜์–ด๋‚˜๋ฉด ์‹คํ–‰ ์‹œ๊ฐ„์€ 2๋ฐฐ๋ณด๋‹ค ์•ฝ๊ฐ„ ๋” ๋งŽ์ด ๋Š˜์–ด๋‚œ๋‹ค.

    • ์˜ˆ์‹œ: ํ€ต์†ŒํŠธ, ๋จธ์ง€์†ŒํŠธ

  • O(N^2) Quadratic

    • ๋ฐ์ดํ„ฐ์–‘์— ๋”ฐ๋ผ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ์ œ๊ณฑ์— ๋น„๋ก€ํ•œ๋‹ค. (ํšจ์œจ์ด ์ข‹์ง€ ์•Š์Œ, ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค)

    • ์ด ์œ ํ˜•์€ ์ด์ค‘๋ฃจํ”„๋‚ด์—์„œ ์ž…๋ ฅ ์ž๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋‚˜ํƒ€๋‚œ๋‹ค.

    • N๊ฐ’์ด ํฐ๊ฐ’์ด ๋˜๋ฉด ์‹คํ–‰ ์‹œ๊ฐ„์€ ๊ฐ๋‹นํ•˜์ง€ ๋ชปํ•  ์ •๋„๋กœ ์ปค์ง€๊ฒŒ ๋œ๋‹ค.

    • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„์˜ ์ˆ˜๋Š” ์ž…๋ ฅ๊ฐ’ n์˜ ์ œ๊ณฑ

    • ์˜ˆ์‹œ: 2์ค‘ for ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„๋ธ”์†ŒํŠธ, ์‚ฝ์ž…์ •๋ ฌ(insertion sort)

2) ์„ฑ๋Šฅ๋น„๊ต

์„ฑ๋Šฅ ์ˆœ์„œ : O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)