π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[Coding Interview University] λΉ μ€(Big-O)νκΈ°λ² λ³Έλ¬Έ
[Coding Interview University] λΉ μ€(Big-O)νκΈ°λ²
μ§μ§μνμΉ΄ 2023. 6. 28. 15:01<λ³Έ λΈλ‘κ·Έλ μ½λ©μΈν°λ·°λν λμ Gitκ³Ό μμ μ μ°Έκ³ ν΄μ 곡λΆνλ©° μμ±νμμ΅λλ€ :-)>
𫧠λΉμ νκΈ°
νμΌ ν¬κΈ°κ° μλ€λ©΄ ? μ¨λΌμΈμΌλ‘ μ μ‘
νμΌ ν¬κΈ°κ° 무μ§λ§νκ² ν¬λ€λ©΄ ? μ΄μ or λΉνκΈ°π
𫧠μκ° λ³΅μ‘λ
μ κ·Όμ μ€ν μκ° (asymptotic runtime), big-O μκ° κ°λ
- μ¨λΌμΈ μ μ‘ : O(s), sλ νμΌμ ν¬κΈ°
- νμΌμ ν¬κΈ°κ° μ¦κ°ν¨μ λ°λΌ μ μ‘ μκ°μ΄ μ νμ μΌλ‘ μ¦κ°
- λΉνκΈ° μ μ‘ : νμΌμ ν¬κΈ° μκ΄μμ΄ O(1)
- μμμκ°λ§νΌ μμ
β€οΈ big-O
: μκ°μ μν
: λ°°μ΄μ λͺ¨λ κ°μ μΆλ ₯νλ μκ³ λ¦¬μ¦
: O(n) λΏλ§ μλλΌ, O(n^3) νΉμ O(n) λ³΄λ€ ν° μ΄λ€ μν μκ°μΌλ‘ κ°λ₯
β€οΈ big-Ω (omega)
: λ±κ° or νν
: Ω(n) λΏλ§ μλλΌ, Ω(log N) νΉμ Ω(1) λ‘ νν κ°λ₯
β€οΈ big-θ (theta)
: Oμ Ω λ λ€ μλ―Έ (λ± λ§λ μν μκ°)
: O(n) μ΄λ©΄μ Ω(n) μ΄λΌλ©΄, μν μκ°μ θ(n) λ‘ νν κ°λ₯
π ν΅ μ λ ¬ κ΄μ
”μΆ”μ΄ λλ μμ νλλ₯Ό 무μμλ‘ λ½μ λ€, μ΄λ³΄λ€ μμ μμλ€μ μμ, ν° μμλ€μ λ€μ λμ΄λλ‘ νλ€
κ·Έ κ²°κ³Ό, λΆλΆ μ λ ¬ μμ±λκ³ μΌμͺ½ μ€λ₯Έμͺ½ λΆλΆμ μ΄μ λΉμ·νκ² μ¬κ·μ μΌλ‘ μ λ ¬νλ€
𧑠μ΅μ μ κ²½μ°
: λͺ¨λ μμκ° λμΌνλ€λ©΄ λ¨μν λ°°μ΄μ νμ°¨λ‘ μννκ³ λ
: μν μκ°μ O(n)
𧑠μ΅μ μ κ²½μ°
: λ°°μ΄μμ κ°μ₯ ν° μμκ° μΆμ΄ λλ€λ©΄, μ λ° ν¬κΈ°κ° μλ κ³ μ νλ μ€μ΄λ ν¬κΈ°μ λΆλΆ λ°°μ΄λ‘ λλκ² λλ€
: μν μκ°μ O(n^2)
𧑠νκ· μ κ²½μ°
: μν μκ°μ O(nlogn)
π«§ κ³΅κ° λ³΅μ‘λ
: λ©λͺ¨λ¦¬ or 곡κ°
𫧠μμνμ 무μνλΌ
: λ¨μν μ¦κ° λΉμ¨μ λνλ΄λ―λ‘, μμν 무μνκΈ°
𫧠μ§λ°°μ μ΄μ§ μμ νμ 무μνλΌ
: μ΅κ³ μ°¨ν λ³΄λ€ μμ νλ€μ 무μν΄λ λλ€
ex) O(n^2 + n) μ O(n^2)
𫧠μ¬λ¬ λΆλΆμΌλ‘ μ΄λ£¨μ΄μ§ μκ³ λ¦¬μ¦: λ§μ vs κ³±μ
: μκ³ λ¦¬μ¦μ΄ “A λλ ν B μννλΌ” → A + B
: μκ³ λ¦¬μ¦μ΄ “A ν λ B μννλΌ” → A * B
𫧠μν μκ°
: ArrayList λ λ°°μ΄μ μν + ν¬κΈ°κ° μμ λ‘μ΄ μλ£κ΅¬μ‘°
: xκ°μ μμλ₯Ό μ½μ νμ λ νμ μκ°μ O(2x), λΆν μνν΄μ μ½μ νλ²μ νμν μκ°μ O(1)
𫧠log N μν μκ°
: μ΄μ§ νμ(binary search) λ nκ°μ μ λ ¬λ μμκ° λ€μ΄ μλ λ°°μ΄μμ μμ xλ₯Ό μ°Ύμ λ μ¬μ©
- λ¨Όμ μμ xμ λ°°μ΄μ μ€κ°μ λΉκ΅
- x === μ€κ°κ° λ§μ‘±νλ©΄ λ°ν
- x < μ€κ°κ° λ§μ‘±νλ©΄ λ°°μ΄μ μΌμͺ½ μ¬νμ
- x > μ€κ°κ° λ§μ‘±νλ©΄ λ°°μ΄μ μ€λ₯Έμͺ½ μ¬νμ
- μμ nκ°μ λ°°μ΄μμ μμ
- ν λ¨κ³ μ§λ μλ‘ n/2κ°, n/4κ°λ‘ μ€μ΄λ λ€
: 2^k = n μμ kλ log(n)
: μμμ κ°μλΌ μ λ°μ© μ€μ΄λ λ€λ©΄ κ·Έ λ¬Έμ μ μ€ν μκ°μ O(log n)
: κ· ν μ΄μ§ νμ νΈλ¦¬ (balanced binary search tree) μμλ O(log n)
: 맀 λ¨κ³λ§λ€ μμμ λμλ₯Ό λΉκ΅ν λ€ μΌμͺ½ νΉμ μ€λ₯Έμͺ½μΌλ‘ λ΄λ €κ°
: κ° λ¨κ³μμ κ²μν΄μΌ ν λ Έλμ κ°μκ° μ λ°μ© μ€μ΄λλ―λ‘, λ¬Έμ κ³΅κ° λν μ λ°μ© μ€μ΄λ¦
𫧠μ¬κ·μ μΌλ‘ μν μκ° κ΅¬νκΈ°
: λ€μμ νΈμΆλ‘ μ΄λ£¨μ΄μ§ μ¬κ· ν¨μμμ μν μκ°μ O(λΆκΈ°^κΉμ΄)λ‘ νν
: λΆκΈ°(branch)λ μ¬κ· ν¨μκ° μμ μ μ¬νΈμΆνλ νμ
𫧠μμ λ° μ°μ΅ λ¬Έμ
π μμ 1
β‘οΈ O(n)
void foo(int[] array) {
int sum = 0;
int product = 1;
for (int i = 0; i < array.length; i++) {
sum+= array[i];
}
for (int i = 0; i < array.length; i++) {
product *= array[i];
}
System.out.println(sum + ", " + product);
}
π μμ 2
β‘οΈ O(n^2)
void printPairs(int[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
System.out.println(array[i] + ", " + array[j]);
}
}
}
π μμ 3
β‘οΈ O(n^2)
void printUnorderedPairs(int[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
System.out.println(array[i] + ", " + array[j]);
}
}
}
π μμ 4
β‘οΈ O(ab)
void printUnorderedPairs(int[] arrayA, int[] arrayB) {
for (int i = 0; i < arrayA.length; i++) {
for (int j = 0; j < arrayB.length; j++) {
if (arrayA[i] < arrayB[i]) {
System.out.println(arrayA[i] + ", " + arrayB[j]);
}
}
}
}
'π©βπ» μ»΄ν¨ν° ꡬ쑰 > Computer Science' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Coding Interview University] ν΄μν μ΄λΈ : μ΄λ‘ λ° κ΅¬ν (0) | 2023.07.05 |
---|---|
[Coding Interview University] ν : μ΄λ‘ λ° κ΅¬ν (0) | 2023.07.03 |
[Coding Interview University] μ€ν : μ΄λ‘ λ° κ΅¬ν (0) | 2023.07.01 |
[Coding Interview University] λ§ν¬λ 리μ€νΈ : μ΄λ‘ λ° κ΅¬ν (0) | 2023.06.29 |
[Coding Interview University] λ°°μ΄ : μ΄λ‘ λ° κ΅¬ν (0) | 2023.06.28 |