Search

κ³΅κ°„λ³΅μž‘λ„

Created At
2022/01/25 23:21
Updated At
2022/03/14 09:51
λΆ„λ₯˜
기타
μ‹œκ°„ λ³΅μž‘λ„(Time Complexity)λŠ” 인풋 크기에 λΉ„λ‘€ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹€ν–‰ μ‹œκ°„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 잘 μ΄ν•΄ν•˜μ…¨λ‹€λ©΄ 곡간 λ³΅μž‘λ„λ„ 어렡지 μ•ŠμŠ΅λ‹ˆλ‹€.
곡간 λ³΅μž‘λ„(Space Complexity)λŠ” 인풋 크기에 λΉ„λ‘€ν•΄μ„œ μ•Œκ³ λ¦¬μ¦˜μ΄ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ 곡간을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. λ¬Όλ‘  곡간 λ³΅μž‘λ„λ„ 점근 ν‘œκΈ°λ²•μœΌλ‘œ ν‘œν˜„ν•  수 있기 λ•Œλ¬Έμ— κ°„νŽΈν•˜κ²Œ Big-O ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
κ°„λ‹¨ν•œ μ˜ˆμ‹œ λͺ‡ κ°€μ§€λ§Œ λ΄…μ‹œλ‹€.

O(1)

def product(a, b, c): result = a * b * c return result
Plain Text
볡사
νŒŒλΌλ―Έν„° a, b, cκ°€ μ°¨μ§€ν•˜λŠ” 곡간을 μ œμ™Έν•˜λ©΄ μΆ”κ°€μ μœΌλ‘œ λ³€μˆ˜ resultκ°€ 곡간을 μ°¨μ§€ν•©λ‹ˆλ‹€. resultκ°€ μ°¨μ§€ν•˜λŠ” λ©”λͺ¨λ¦¬ 곡간은 인풋과 λ¬΄κ΄€ν•˜κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ product의 곡간 λ³΅μž‘λ„λŠ” O(1)μž…λ‹ˆλ‹€.

O(n)

def get_every_other(my_list): every_other = my_list[::2] # a[start : end : step] return every_other
Python
볡사
인풋 my_list의 길이λ₯Ό nn이라고 ν•©μ‹œλ‹€.
νŒŒλΌλ―Έν„° my_listκ°€ μ°¨μ§€ν•˜λŠ” 곡간을 μ œμ™Έν•˜λ©΄ μΆ”κ°€μ μœΌλ‘œ λ³€μˆ˜ every_otherκ°€ 곡간을 μ°¨μ§€ν•©λ‹ˆλ‹€. every_otherκ°€ μ°¨μ§€ν•˜λŠ” 곡간은 μ–΄λ–»κ²Œ ν‘œν˜„ν•  수 μžˆμ„κΉŒμš”?
리슀트 every_otherμ—λŠ” my_list의 짝수 인덱슀의 값듀이 λ³΅μ‚¬λΌμ„œ λ“€μ–΄κ°‘λ‹ˆλ‹€. μ•½ n/2개의 값이 λ“€μ–΄κ°„λ‹€λŠ” κ±°μ£ . O(n/2)은 O(n)으둜 λ‚˜νƒ€λ‚Ό 수 있기 λ•Œλ¬Έμ—, get_every_other ν•¨μˆ˜μ˜ 곡간 λ³΅μž‘λ„λŠ” O(n)μž…λ‹ˆλ‹€.

O(n^2)

def largest_product(my_list): products = [] for a in my_list: for b in my_list: products.append(a * b) return max(products)
Plain Text
볡사
인풋 my_list의 길이λ₯Ό n이라고 ν•©μ‹œλ‹€.
νŒŒλΌλ―Έν„° my_listκ°€ μ°¨μ§€ν•˜λŠ” 곡간을 μ œμ™Έν•˜λ©΄ μΆ”κ°€μ μœΌλ‘œ λ³€μˆ˜ products, a, bκ°€ 곡간을 μ°¨μ§€ν•©λ‹ˆλ‹€. μš°μ„  a와 bλŠ” κ·Έλƒ₯ μ •μˆ˜ 값을 λ‹΄κΈ° λ•Œλ¬Έμ— O(1)이겠죠? κ·Έλ ‡λ‹€λ©΄ productsκ°€ μ°¨μ§€ν•˜λŠ” 곡간은 μ–΄λ–»κ²Œ ν‘œν˜„ν•  수 μžˆμ„κΉŒμš”?
리슀트 productsμ—λŠ” my_listμ—μ„œ κ°€λŠ₯ν•œ λͺ¨λ“  μ‘°ν•©μ˜ 곱이 λ“€μ–΄κ°‘λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ 총 n^2 개의 값이 λ“€μ–΄κ°€κ² μ£ ? λ”°λΌμ„œ largest_product의 곡간 λ³΅μž‘λ„λŠ” O(n^2)μž…λ‹ˆλ‹€.