λΉ μ€(Big-O) νκΈ°λ²
λΉ μ€(Big-O)λ,
μ½λμμ λ°μ΄ν°κ° λμ΄λ λ μκ³ λ¦¬μ¦μ μ±λ₯μ νκΈ°νλ λ°©λ²μ΄λ€.
λ¨μν μ½λκ° 'μ’λ€', 'λμλ€'λ‘ νννλ κ²μ΄ μλ μ«μλ‘ μ½λμ μ±λ₯μ νκΈ°νκΈ° μν΄ λΉ μ€ νκΈ°λ²μ μ¬μ©νλ€.
μ λ ₯μ ν¬κΈ°μ μ€ν μκ°κ³Όμ κ΄κ³λΌκ³ ν μ μλ€.
λ°μ΄ν° μμκ° Nκ°μΌ λ μκ³ λ¦¬μ¦μ λͺ λ¨κ³κ° νμν κΉ?
O(1)κ³Ό O(N)
μμ κ·Έλνμμ xμΆμ λ°μ΄ν° μλ‘ λ΄€μ κ²½μ°, O(N)μ κ·Έλνλ λ°μ΄ν°μ μκ° λμ΄λ μλ‘ μκ³ λ¦¬μ¦ λ¨κ³λ λμ΄λλ€.
μ¦, λ°μ΄ν°κ° 1000κ°κ° λλ©΄ μκ³ λ¦¬μ¦λ 1000λ¨κ³κ° κ±Έλ¦°λ€.
O(1)μ κ·Έλνλ₯Ό 보면 λ°μ΄ν°κ° 1κ°μ΄κ±°λ 1000κ°μ΄κ±°λ μκ³ λ¦¬μ¦μ νμ 100λ¨κ³κ° κ±Έλ¦°λ€.
λ°μ΄ν°κ° 100κ° λ―Έλ§μΌ κ²½μ°μ O(N)μ΄ λΉ λ₯Ό μ μκ² μ§λ§, κ·Έ μ΄μμΌλ‘ λμ΄κ°λ©΄ O(N)μ μκ³ λ¦¬μ¦μ΄ ν¨μ¬ λ§μ λ¨κ³λ₯Ό κ±°μ³μΌ νλ€λ κ²μ μ μ μλ€.
O(100)μ΄ μλ O(1)λ‘ νκΈ°νλ μ΄μ λ λ°μ΄ν°κ° λμ΄λ λ λ¨κ³ μκ° μ΄λ»κ² μ¦κ°νλμ§λ₯Ό μ€λͺ νλ κ²μ΄ λΉ μ€μ΄κΈ° λλ¬Έμ΄λ€.
100λ¨κ³λ₯Ό νλ, 1λ¨κ³λ₯Ό νλ λ°μ΄ν° μ¦κ°μ μν₯μ λ°μ§ μκΈ° λλ¬Έμ λ³Έμ§μ μΌλ‘ κ°μ μκ³ λ¦¬μ¦μ΄λ€.
- O(N) μκ³ λ¦¬μ¦ μμ
function logAtLeast5(n) {
for(let i=1; i<=Math.max(5,n); i++) {
console.log(i)
}
}
μ μ½λλ μΈμλ‘ 5μ΄νμ κ°μ λ°μ κ²½μ° μ½λκ° μ΄ 5λ² μ€νμ΄ λλ©°, κ·Έ μ΄μμ κ°μ μΈμλ‘ λ°μΌλ©΄ μ½λκ° nλ² μ€ννκ² λλ ν¨μμ΄λ€.
λ°λΌμ O(N)μΈ μκ³ λ¦¬μ¦μ΄λΌ ν μ μλ€.
- O(1) μκ³ λ¦¬μ¦ μμ
function logAtMost5(n) {
for(let i=1; i<=Math.min(5,n); i++) {
console.log(i)
}
}
μ μ½λλ μΈμλ‘ 5μ΄μμ κ°μ λ°μλ νμ 5λ²λ§ μ€νλλ€. λ°λΌμ μ μκ³ λ¦¬μ¦μ O(1)μ μ±λ₯μ κ°μ§λ€.
κ°μ²΄μ λ°°μ΄μ μκ³ λ¦¬μ¦ μ±λ₯ νκ°
: κ°μ²΄μ λ°°μ΄μ μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό ν΄κ²°ν λ κ°μ₯ λ§μ΄ μ¬μ©νλ μλ£κ΅¬μ‘°μ΄λ€.
λ°λΌμ, μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό ν¨μ¨μ μΌλ‘ ν΄κ²°νκΈ° μν΄ κ°μ²΄/λ°°μ΄μ μ κ·Όνκ±°λ μ λ ₯, μ κ±° λ±μ μ°μ°μ μνν λμ μκ³ λ¦¬μ¦μ μ±λ₯μ΄ μ΄λ»κ² λλμ§ νμ ν νμκ° μλ€.
κ°μ²΄
κ°μ²΄λ μ λ ¬μ΄ νμκ° μκ³ , λΉ λ₯Έ μ κ·Όκ³Ό μ λ ₯/μ κ±°λ₯Ό μν λ μ¬μ©νλ€.
- μ κ·Ό O(1)
- hasOwnProperty
- νμ O(N)
- Object.keys
- Object.values
- Object.entries
- μ λ ₯/μ κ±° O(1)
λ°°μ΄
λ°°μ΄μ μ λ ¬μ΄ νμν μλ£κ΅¬μ‘°μ΄λ€.
- μ κ·Ό O(1)
- λ°°μ΄ indexλ‘ μ κ·Ό
- μ
λ ₯/μ κ±°
- push/pop λ©μλ β‘οΈ O(1)
- 맨 μμ μΆκ°/μμ νλ unshift/shift λ©μλ β‘οΈ O(N)
- νμ O(N)
- indexOf, findIndex...
- κ·Έ μΈ,
- concat β‘οΈ O(N)
- slice, splice β‘οΈ O(N)
- sort β‘οΈ O(NlogN)
λΉ μ€ νκΈ° λ°©λ²
- μμλ 무μνλ€.
: μμ κ°μ μκ³ λ¦¬μ¦ νκ° λ¨κ³μ μν₯μ κ±°μ μ£Όμ§ μλλ€.
- μ΅κ³ μ°¨νλ§ λ¨κ²¨λκ³ μ΅κ³ μ°¨νμ κ³μλ 무μνλ€.
: λ°μ΄ν°κ° λ§μμ§μλ‘ μκ³ λ¦¬μ¦ νκ°μ μν₯μ μ£Όμ§ μκΈ° λλ¬Έμ 무μνλ€.
O(logN)
λ°μ΄ν°κ° λ λ°°λ‘ μ¦κ°ν λλ§λ€ ν λ¨κ³μ© λμ΄λλ μκ³ λ¦¬μ¦
λ‘κ·Έ(log)λ, μ§μμ μμ κ΄κ³μ΄λ€.
2λ₯Ό λͺ λ² κ³±ν΄μΌ 8μ μ»μ μ μλμ§λ₯Ό λ»νλ€. μ΄ 3λ²μ΄λ―λ‘ 3μ΄ λμ¨λ€.
λ€μ λ§ν΄μ, 8μ 1μ΄ λ λκΉμ§ κ³μ 2λ‘ λλ΄μ λ μ΄ 3λ²μ΄ κ±Έλ¦°λ€λ μλ―Έμ΄λ€.
λ°μ΄ 2μΈ λ‘κ·Έλ μλ΅ν΄μ ννν μ μλ€.
μ΄λ¬ν λ‘κ·Έμ μμμ μν΄ O(logN)μ μμκ° νλκ° λ λκΉμ§ λ°μ΄ν° μμλ₯Ό κ³μν΄μ λ°μΌλ‘ μ€μ΄λ λ§νΌμ λ¨κ³ μκ° κ±Έλ¦°λ€λ λ»μ΄λ€.
logNμ μ±λ₯μ κ°λ λνμ μΈ μκ³ λ¦¬μ¦μΌλ‘ νμ μκ³ λ¦¬μ¦ μ€μ μ΄μ§ νμμ΄ μλ€.
λΉ μ€ νκΈ°λ² μ’ λ₯
λΉ μ€λ₯Ό μ½κ² κ³μ°ν μ μλ κ·μΉ
- μ°μλ μμ (Nκ³Ό κ΄λ ¨μ΄ μλ€.)
- μΈλ±μ€λ₯Ό μ¬μ©ν΄ λ°°μ΄μ μμ΄ν μ μ°Ύλ κ²κ³Ό ν€λ₯Ό μκ³ κ°μ²΄μμ κ°μ μ°Ύλ κ² λͺ¨λ μμ μκ°μ΄ κ±Έλ¦°λ€.
- forλ 루νμ κΈΈμ΄*루ν μμ μ°μ°μΌλ‘ κ³μ°νλ€. (루ν μμ λ 루νκ° μλ μ€μ²© 루νμΌ κ²½μ° N*Nμ΄ λ¨)