Complexity of an Algorithm

Notation and SOTA with Asymptotic

First of all

μš°λ¦¬κ°€ ν’€κ³ , κ΅¬ν˜„ν•˜κ³ , μ‚¬μš©ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ€ μ–΄λ–»κ²Œ μ“°λŠ”κ²Œ κ°€μž₯ νš¨μœ¨μ μΌκΉŒμš”? μ €λŠ” 이 질문의 닡을 μ‹œκ°„ λ³΅μž‘λ„μ™€ 곡간 λ³΅μž‘λ„κ°€ μ–΄λ–»κ²Œ 될지λ₯Ό μ•„λŠ”κ²ƒμ—μ„œ μ‹œμž‘ν•œλ‹€κ³  μƒκ°ν•΄μš”. 그리고 이 λ³΅μž‘λ„λ₯Ό μœ„ν•΄μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ‚˜ C++, C# λ“± μ‚¬μš©ν•˜λŠ” 언어에 따라 μ•Œκ³ λ¦¬μ¦˜μ΄ μ–΄λ–»κ²Œ λ³€ν™”ν•˜λŠ”κ²Œ νš¨μœ¨μ μΈμ§€ μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ μ‹œκ°„ λ³΅μž‘λ„λŠ” μ–΄λ–€ κΈ°μ€€μœΌλ‘œ, 그리고 μ–΄λ–»κ²Œ μΈ‘μ • ν•  수 μžˆμ„κΉŒμš”?

Asymptotic notation

μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•˜κ³  이λ₯Ό μ΅œμ ν™” ν•˜λŠ” 것은 λ‹€μ–‘ν•œ 고렀사항이 μ‘΄μž¬ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ μ•Œκ³ λ¦¬μ¦˜μ„ μ»΄ν“¨ν„°μ—μ„œ μ—°μ‚° ν•  λ•Œμ™€ λ…ΈνŠΈλΆμ—μ„œ μ—°μ‚° ν•  λ•Œμ˜ μ„±λŠ₯ 차이가 있겠죠. 이런 λΆ€λΆ„λ“€ λ•Œλ¬Έμ— 계산 λ³΅μž‘μ„±μ„ ν‘œν˜„ ν•˜κΈ° μœ„ν•΄ 컴퓨터 μ„±λŠ₯에 관계 없이 독립인 λ°©μ‹μœΌλ‘œ ν‘œν˜„ν•˜κ²Œ λ©λ‹ˆλ‹€. κ·Έκ±Έ 쑰금 더 μ‰½κ²Œ ν•˜κΈ° μœ„ν•΄ μ•Œκ³ λ¦¬μ¦˜ μ‹€ν–‰μ‹œκ°„μ—μ„œ ν•„μš”ν•œ κ°€μž₯ 큰 λΆ€λΆ„λ“€λ§Œ κ³„μ‚°ν•΄μ„œ 이λ₯Ό μ†λ„λ‘œ ν‘œκΈ°ν•œκ²ƒμ„ 점근적 ν‘œκΈ°λ²•(Asymptotic notation) 이라고 ν•΄μš”.

κ·ΈλŸ¬λ‹ˆκΉŒ, 점근적 ν‘œκΈ°λ²•μ€ μ•Œκ³ λ¦¬μ¦˜μ„ λ§Œλ“€κ³  κ·Έ μ•Œκ³ λ¦¬μ¦˜μ΄ 잘 λ§Œλ“€μ–΄ μ‘ŒλŠ”μ§€ ν‰κ°€ν•˜λŠ” 방법인거죠. 그리고 κ·Έκ±Έ ν‰κ°€ν•˜λŠ” 기쀀은 주어진 데이터 κΈ°μ€€μœΌλ‘œ μˆ˜ν–‰μ‹œκ°„ μ΄λ‚˜ μ‚¬μš© 곡간이 μ–Όλ§ˆλ‚˜ μ‚¬μš©λ˜λŠ”μ§€κ°€ λ˜λŠ”κ±°κ΅¬μš”.

점근적 ν‘œκΈ°λ²•μ—λŠ” μ—¬λŸ¬κ°€μ§€κ°€ μžˆμ§€λ§Œ μ €λŠ” λΉ… 였, μ˜€λ©”κ°€, 세타 이 3개λ₯Ό λ¨Όμ € 이야기 ν•΄λ³ΌκΊΌμ—μš”.

Basic notation operation

μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ 계산 ν• λ•ŒλŠ” 데이터 개수 n 이 μ£Όμ–΄μ‘Œμ„ λ•Œ ν•„μš”ν•œ κΈ°λ³Έ μ—°μ‚° 횟수둜 ν‘œν˜„ ν•΄μš”. 그리고 점근 ν‘œκΈ°λ²•μ—μ„  λ‘œμ§μ„ λ‹¨μˆœν™” ν•΄μ„œ μ΅œκ³ μ°¨ν•­μ˜ 차수λ₯Ό κΈ°μ€€μœΌλ‘œ μ‚Όμ•„μš”. 예λ₯Ό λ“€μ–΄ n2+n+9n^2+n+9 의 계산 λ³΅μž‘μ„±μ„ 가진 μ•Œκ³ λ¦¬μ¦˜μ΄ μžˆλ‹€κ³  ν•œλ‹€λ©΄ κ·Έ μ•Œκ³ λ¦¬μ¦˜μ˜ κ³„μ‚°λ³΅μž‘λ„λŠ” **** n2n^2 이 λ˜λŠ”κ±°μ£ . μ΄λ ‡κ²Œ ν•΄μ„œ κ΅¬ν•œ κ³„μ‚°λ³΅μž‘λ„λ‘œ 같은 κ²°κ³Όλ₯Ό λ‚΄λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ„œλ‘œ λΉ„κ΅ν•˜κ²Œ λ©λ‹ˆλ‹€.

μΆ”κ°€λ‘œ, μž…λ ₯ 크기 (데이터 개수)에 따라 μ•Œκ³ λ¦¬μ¦˜ μ‹€ν–‰ μ‹œκ°„μ„ ν‘œν˜„ν•  λ•Œ 점근적 ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•œλ‹€λ©΄ 자주 보게 λ˜λŠ” ν•¨μˆ˜μ˜ ν‘œν˜„μ‹μ€ μœ„μ™€ κ°™μ•„μš”.

State of the art

μ•Œκ³ λ¦¬μ¦˜μ€ μ–Έμ œλ‚˜ λ‹€μ–‘ν•œ 이유둜 λ³€κ²½λ˜κ³  κ°œμ„ λΌμš”. 보톡은 ν™˜κ²½μ΄ λ°”λ€Œκ±°λ‚˜ 정확도λ₯Ό μ˜¬λ €ν•  ν•„μš”κ°€ μžˆμ„ λ•Œ κ°œμ„  μž‘μ—…μ„ μ§„ν–‰ν•˜μ£ . 그리고 κ·Έλ ‡κ²Œν•œ μƒˆ μ•Œκ³ λ¦¬μ¦˜μ΄ κΈ°μ‘΄ μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯보닀 κ°œμ„ λλ‹€λ©΄ 이λ₯Ό ν˜„μž¬ 졜고 μˆ˜μ€€(SOTA) 라고 ν•©λ‹ˆλ‹€.

SOTAλŠ” AIλ‚˜ λ”₯λŸ¬λ‹ λΆ„μ•Όμ—μ„œ 주둜 μ“°λŠ” μš©μ–΄λΌκ³  μ•Œκ³  μžˆμ–΄μš”. κ·Έλ ‡μ§€λ§Œ μœ μš©ν•œ ν‘œν˜„μ΄λΌκ³  μƒκ°ν•΄μ„œ μ°Έκ³ μ‚¬ν•­μœΌλ‘œ λ„£μ–΄λ³΄μ•˜μ–΄μš”.

Asymptotic tighter bound (Theta Notation)

μƒˆλ‘œ λ§Œλ“  μ•Œκ³ λ¦¬μ¦˜μ΄ "아무리 λ‚˜μ˜κ±°λ‚˜ 쒋더라도 n0n_0 을 κΈ°μ€€μœΌλ‘œ 였λ₯Έμͺ½μ˜ μˆ˜μΉ˜λŠ” 기쑴에 μ‘΄μž¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ μ†λ„μ•ˆμ— μžˆλ‹€" λΌλŠ” λœ»μ΄μ—μš”. κ·ΈλŸ¬λ‹ˆκΉŒ, μœ„ κ·Έλ¦Όμ—μ„œμ²˜λŸΌ c1g(n)c_1g(n)κ³Ό c2g(n)c_2g(n)의 사이에 f(n)이 μžˆλ‹€λŠ” 말은 기쑴에 μ‘΄μž¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ 점근적 μƒν•œμ„ (Big-O Nation)와 점근적 ν•˜ν•œμ„ (Omega Notation) 속도 사이에 μžˆλ‹€λŠ” 말이죠.

Asymptotic lower bound (Omega Notation)

μ˜€λ©”κ°€ ν‘œκΈ°λ²•μ€ μ•Œκ³ λ¦¬μ¦˜μ΄ "μ΅œμ†Œν•œ 기쑴의 λΉ„κ΅ν•˜λŠ” 속도와과 κ°™κ±°λ‚˜ ν˜Ήμ€ 쒋지 μ•Šλ‹€" λ₯Ό μ˜λ―Έν•΄μš”. 즉 μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ„ λ§Œλ“€μ—ˆμ„ λ•Œ μ•Œκ³ λ¦¬μ¦˜μ˜ 계산 λ³΅μž‘λ„κ°€ n2n^2 이라면 아무리 빨라도 n2n^2을 λ„˜μ§€ λͺ»ν•˜κ±°λ‚˜ 더 λŠλ¦¬λ‹€λŠ” 말이죠.

Asymptotic upper bound (Big-O Notation)

λΉ…μ˜€ ν‘œκΈ°λ²•μ€ ν•œ μ€„λ‘œ λ§ν•˜λ©΄ "아무리 λ‚˜λΉ λ„ 이정도 속도가 μ†Œμš”λœλ‹€." 라고 ν•  수 μžˆμ–΄μš”.

μ•Œκ³ λ¦¬μ¦˜ μˆ˜ν–‰ μ‹œκ°„μ€ 맀번 μˆ˜ν–‰ν•  λ•Œλ§ˆλ‹€ λ°μ΄λ‚˜ ν•˜λ“œμ›¨μ–΄μ˜ 차이둜 인해 변동이 λ©λ‹ˆλ‹€. 그런데 λ§Œμ•½ μ•Œκ³ λ¦¬μ¦˜ μˆ˜ν–‰ 쀑 λ°±λ²ˆμ€‘μ— ν•œλ²ˆ λ‚˜μ˜¨ μ†λ„λ‘œ ν‘œκΈ° ν•œλ‹€λ©΄ 객관적인 μ•Œκ³ λ¦¬μ¦˜μ˜ 속도가 될 수 μ—†κ² μ£ ?

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— "μ œκ°€ λ§Œλ“  μ•Œκ³ λ¦¬μ¦˜μ€ 아무리 λŠλ €λ„ μ΄λ§ŒνΌμ€ λ‚˜μ™€μš”!" 라고 λ§ν•˜λŠ”κ²ƒμ΄ κ°€μž₯ νŽΈν•œκ±°μ£ . κ·Έλž˜μ„œ μ•Œκ³ λ¦¬μ¦˜ ν‘œκΈ°λ²•μ€‘μ— κ°€μž₯ 많이 μ“°μž…λ‹ˆλ‹€.

Data Structures Table

이건 일반적으둜 κ΅¬ν˜„ν•˜λŠ” 데이터 κ΅¬μ‘°λ“€μ˜ 속도λ₯Ό ν‘œλ‘œ 정리해둔 κ²ƒμ΄μ—μš”. λ§Œμ•½ μž„μ˜λ‘œ μƒˆλ‘œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€λ©΄ 이 ν‘œλ₯Ό μ°Έκ³ ν•΄μ„œ μ΅œμ†Œν•œ 이정도 μ†λ„λŠ” λ‚˜μ˜€λ„λ‘ κ΅¬ν˜„ν•˜λŠ” 것이 μ’‹μ•„μš”.

Data StructuresAverage CaseWorst Case

Search

Insert

Delete

Search

Insert

Delete

Array

O(n)

N/A

N/A

O(n)

N/A

N/A

Sorted Array

O(log n)

O(n)

O(n)

O(log n)

O(n)

O(n)

Linked List

O(n)

O(1)

O(1)

O(n)

O(1)

O(1)

Doubly Linked List

O(n)

O(1)

O(1)

O(n)

O(1)

O(1)

Stack

O(n)

O(1)

O(1)

O(n)

O(1)

O(1)

Hash table

O(1)

O(1)

O(1)

O(n)

O(n)

O(n)

Binary Search Tree

O(log n)

O(log n)

O(log n)

O(n)

O(n)

O(n)

B-Tree

O(log n)

O(log n)

O(log n)

O(log n)

O(log n)

O(log n)

Red-Black tree

O(log n)

O(log n)

O(log n)

O(log n)

O(log n)

O(log n)

AVL Tree

O(log n)

O(log n)

O(log n)

O(log n)

O(log n)

O(log n)

Reference

Last updated