+) 22. 07. 27. day40 π μ μΆκ° μλ£ πͺ
+) 22. 07. 29. μΆκ° μλ£ π₯
νλ‘κ·Έλ¨μ λ§λ€ λ μ°λ¦¬λ λ€μν μκ³ λ¦¬μ¦μ μ¬μ©νλ€.
μλ₯Ό λ€μ΄, μ μλ₯Ό μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ νλ‘κ·Έλ¨μ λ§λ λ€κ³ κ°μ νλ©΄ λ²λΈ μ λ ¬, μ½μ
μ λ ¬, ν΅ μ λ ¬ λ± μ¬λ¬ κ°μ§ μκ³ λ¦¬μ¦μ μ¬μ©ν μ μλ€.
κ²°κ³Όλ κ°μ§λ§ μ΄λ€ μκ³ λ¦¬μ¦μ μ°λλμ λ°λΌμ κ³Όμ μ΄ λ¬λΌμ§λ€. μ¦, μκ³ λ¦¬μ¦λ§λ€ μ±λ₯λ μ κ°κ° λ€λ₯΄λ€.
μ΄ λ μ°λ¦¬λ κ°μ₯ μ’μ μ±λ₯μ λ°ννλ μκ³ λ¦¬μ¦μ μ¬μ©νκ³ μΆμ κ²μ΄λ€. μλ, μ¬μ©ν΄μΌ νλ€.
κ°μ₯ μ’μ μκ³ λ¦¬μ¦μ κ³ λ₯΄κΈ° μν΄μ ν¨μ¨μ±μ λ°μ ΈμΌ νλ€.
κ°μ λ°μ΄ν°λ₯Ό μ λ ₯ν΄λ, μκ³ λ¦¬μ¦λ§λ€ μννλ μκ°μ΄ λ€λ₯΄κ³ μ°¨μ§νλ 곡κ°μ΄ λ€λ₯΄λ€.
보ν΅μ κ³΅κ° λ³΅μ‘λλ³΄λ€ μκ° λ³΅μ‘λλ₯Ό λ μ°μ μνλ€. (κΈ°μ λ ₯μ΄ μ μ μ’μμ Έμ λ©λͺ¨λ¦¬μ μ±λ₯μ΄ μ’μμ§κ³ μκΈ° λλ¬Έμ μ°λ¦¬λ μκ° λ³΅μ‘λλ₯Ό λ μ°μ μΌλ‘ κ³ λ €νλ©΄ λλ€.)
μκ³ λ¦¬μ¦μ μλλ μ
λ ₯ λ°μ΄ν°κ° nκ°μΌ λ CPUμ μ°μ° νμλ‘ νλ¨νλ€. (μκ³ λ¦¬μ¦μ μλμ μν₯μ λ―ΈμΉλ κ²μ μ¬λ¬ μ΄μ κ° μκ² μ§λ§ κ°μ₯ ν° μμΈμ μ°μ° νμμ΄λ€.)
β μ
λ ₯ λ°μ΄ν°μ μμ΄ λ€λ₯΄λ€λ©΄ λΉμ°ν λ°μ΄ν°κ° λ§μ μͺ½μ΄ λ μ€λ κ±Έλ¦°λ€. κ·Έλ¬λ―λ‘ λ°μ΄ν°λ λκ°μ΄ nμ΄λΌ κ°μ νκ³ μ°μ° νμλ‘ λΉκ΅νλ€.
μ¬κΈ°μ βλΉ
μ€βμ λν κ°λ
μ΄ λ±μ₯νλ€.
O(N)μ μ
λ ₯μ΄ NμΌ λ μ°μ° νμ νΉμ μ°¨μ§νλ λ©λͺ¨λ¦¬ μμ΄ μΌλ§λ λλμ§λ₯Ό λνλΈλ€.
λ§μ½ f(n) = 99999n + 9999
, g(n) = 0.00001nΒ²
μ΄ μλ€λ©΄ μ΄ λ f(n)μ O(n), g(n)μ O(nΒ²)μΌλ‘ νκΈ°νλ€.
μλμ λΉ λ₯Έ μμ λ€μκ³Ό κ°λ€. (μ€λ₯Έμͺ½μΌλ‘ κ°μλ‘ λ리λ€.)
O(1) > O(logN) > O(N) > O(NlogN) > O(N^2) > O(2^N) > O(N!)
O(1)μ λ°°μ΄μ μμλ₯Ό μ°Έμ‘°ν λ, O(logN)μ μ΄μ§ νμ, O(N)μ μμ°¨ νμ, O(NlogN)μ ν΅ μ λ ¬, O(N^2)μ λ²λΈ μ λ ¬, O(2^N)μ νΌλ³΄λμΉ μμ΄(μ¬κ·ν¨μ)μ μλκ° λλ€.
μ λ ₯κ°μ ν¬κΈ°μ μκ΄μμ΄ μΌμ ν μκ°μ΄ μμλλ€.
void function(int[] arr) {
System.out.print(arr[3]);
}
arrμ ν¬κΈ°κ° λ°±λ§μ΄μ΄λ arr[3]μ μΆλ ₯νλ μκ°μ μ ν΄μ Έ μλ€.
μ λ ₯κ°μ ν¬κΈ°μ μ λ°μ© κ²μλμ΄ κ°μνλ€. (Binary Search)
μ μ«μ μ€μμ 13μ μ°Ύμ κ²½μ°, λ¨Όμ μ΄ μ«μ κ°μμΈ 8κ°μ μ λ°μ λλλ€.
κ·ΈλΌ λ± μ λ°μ μλ μλ 23μ΄ λλ€. μ΄ λ 13μ 23λ³΄λ€ μκΈ° λλ¬Έμ 23κ³Ό κ·Έ μ€λ₯Έμͺ½ μ«μλ€μ λ μ΄μ κ³ λ €ν νμκ° μλ€. κ·Έλ₯ λ λ €λ²λ¦¬λ©΄ λλ€.
κ·ΈλΌ μ΄μ μ¬κΈ°μ μ λ°κ°μΈ 16κ³Ό 13μ λΉκ΅νλ©΄ λλ€.
13μ΄ λ μκΈ° λλ¬Έμ 16, 19λ λ λ €λ²λ¦¬κ³ 13, 15λ§ μκ³ κ°λ©΄ λλ€.
μ¬κΈ°μ 15μ 13μ λΉκ΅νλ©΄ 13μ΄ λ μκΈ° λλ¬Έμ μΌμͺ½μΌλ‘ κ°λ€.
κ·Έλ¦¬κ³ 13μ λλμ΄ μ°Ύκ² λμλ€.
β μ΄ 8κ°μ μ«μλ₯Ό 3λ²λ§ λΉκ΅νμ¬ κ°μ μ°Ύμλ€. (log8 = 3 β logN λ§νΌ μμ)
μ λ ₯κ°μ ν¬κΈ° λ§νΌ λ°μΌλ‘ λλκ³ , λ€μ κ·Έ κ°μλ§νΌ λΉκ΅νλ€. (Merge Sort, Quick Sort, Heap Sort)
Merge Sortμ κ²½μ° μλ μ«μλ€μ κ³μ λ°μ© λλλ€.
μ΅μ’
μ μΌλ‘ κ°μ΄ νλμ© λ¨μ λκΉμ§ λ§μ΄λ€.
κ·Έλ¦¬κ³ νλμ© κ°μ λΉκ΅νλ€.
6κ³Ό 5λ₯Ό λΉκ΅ν΄μ μ€λ¦μ°¨μ μ λ ¬
| 5 | 6 |
3κ³Ό 1μ λΉκ΅ν΄μ μ€λ¦μ°¨μ μ λ ¬
| 1 | 3 |
λ°λ³΅β¦
κ²°κ³Όλ | 5 | 6 | | 1 | 3 | | 7 | 8 | | 2 | 4 | μ΄λ κ² λ κ²μ΄λ€.
κ·ΈλΌ μ΄μ 5μ 1μ λΉκ΅ν΄μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ€.
κ·Έλ¦¬κ³ 3κ³Ό 5λ₯Ό λΉκ΅(β 135), 3κ³Ό 6μ λΉκ΅(β 1356), 7κ³Ό 2λ₯Ό λΉκ΅ ν 7κ³Ό 4 λΉκ΅(β 247), 4μ 8μ λΉκ΅(β 2478)νλ€.
μ΄λ κ² λ°λ³΅νλ€ λ³΄λ©΄ κ°μλ§νΌ λΉκ΅ν΄μ ν©μΉκ² λλ€.
(λ°μΌλ‘ λλ λ logN, ν©λ³ν λ Nλ§νΌ λΉκ΅ β O(NlogN) μμ)
μ λ ₯κ°μ ν¬κΈ°μ λ°λΌ μμλλ μκ°μ΄ μ κ³±μΌλ‘ μ¦κ°νλ€. (Bubble Sort, Insertion Sort, Selection Sort)
Bubble Sort
void BubbleSort(int[] arr) {
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr.length - i - 1; j++) {
if(arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
}
μ¬κΈ°μ νλ νμ΄νλ₯Ό i, λ
Έλ νμ΄νλ₯Ό jλΌ νμ.
μ²μμλ λ λ€ 0λ²μ§ΈλκΉ λ νμ΄ν λͺ¨λ 3μ κ°μμ κ²μ΄λ€. μ΄ λ arr[j] = 3, arr[j+1] = 1μ΄λ―λ‘ λ μλ₯Ό λΉκ΅νλ©΄ 1μ΄ λ μμΌλ 1κ³Ό 3μ μμΉλ₯Ό μ€μνλ€.
κ·Έλ¦¬κ³ νλ νμ΄ν iλ κ·Έλλ‘ 0λ²μ§Έ μ리μ μκ³ , λ
Έλ νμ΄ν jλ§ λ€μ μΈλ±μ€λ‘ μμ§μΈλ€.
κ·Έλ¦¬κ³ 3κ³Ό 4λ₯Ό λΉκ΅νλ©΄ 3μ΄ λ μμΌλ―λ‘ κ·Έλλ‘ λλ€. μ΄λ° μμΌλ‘ νμ¬ μμΉμ κ°κ³Ό μ€λ₯Έμͺ½(j+1)μ κ°μ λΉκ΅νλ€.
λ
Έλ νμ΄ν jκ° μΈλ±μ€λ₯Ό λκΉμ§ λ€ λλ©΄ λΉ¨κ° νμ΄ν iλ₯Ό νλ μ¦κ° μν¨ λ€ μ¬μ΄ν΄μ λ°λ³΅νλ€.
μ΄λ κ² λ°μ΄ν°κ° λ€μ― κ°λ§ μμ΄λ N^2μΈ 25λ²μ λΉκ΅ν΄μΌ νλ€β¦
μ°Έκ³ μλ£
μ»΄λ§Ήμ΄ ν΄μ»€κ° λκΈ°κΉμ§, βO(n), O(nlogn) μ΄λ°κ±° λ체 λ¬΄μ¨ λ»μΌκΉμ?β, https://youtu.be/Y7KTRu6-XK0
μ΄μ λ‘, βλΉ μ€νκΈ°λ² - μκ°λ³΅μ‘λ κ°λ λΏμκΈ° ! (feat.λ²λΈμ λ ¬, ν©λ³μ λ ¬)β, https://youtu.be/4iqlPfhW17g
ν¨κ» 보면 μ’μ μλ£