2021. 9. 17. 08:00γμ½λ© ν μ€νΈ μ€λΉ/μκ³ λ¦¬μ¦
μλ νμΈμ? μ£Όλνλ μ λλ€.
μ€λμ μκ³ λ¦¬μ¦μ μ΄μ§ νμμ λν΄μ 곡λΆνλ μκ°μΈ κ²μ΄μμ.
μ½ν λ₯Ό μ λ₯ν κ°λ°μκ° λκΈ° μν΄ μ΄μ¬ν κ³΅λΆ ν΄ λ³΄κ² μ΅λλ€!
μμ€ μ½λμ λν΄μ νμΈ νκ³ μΆμΌμ λΆλ€κ»μλ μ£Όλνλμ Git hubμ κ΄μ¬μ μ£ΌμΈμ!
π Binary Search (μ΄μ§ νμ) λ?
νμν μλ£μ ν νΉμ List λ±μ λλ‘ λλμ΄ ν΄λΉ Dataκ° μμ λ§ν κ³³μ νμνλ κΈ°λ²μΈ κ²μ΄μμ.
μ½κ² λ§ν΄ λ΄κ° μ°Ύμ κ°μ μ°ΎκΈ° μν΄ κ³μ λ κ°λ‘ μͺΌκ°μ νμ μλ λΆλΆμ λ²λ¦¬κ³ λ₯Ό λ°λ³΅νλ λ°©λ²μΈ κ²μ΄μμ!
μμ λ¬Έμ λ μ΄μ§ νμμ μ¬μ©νμ¬ μ²λ¦¬νλ κ²μ΄ κ°μ₯ λΉ λ₯΄λ€κ³ ν©λλ€.
λ¨! μ¬κΈ°μ μ€μν κ²μ μ λ ¬μ΄ λμ΄ μμ΄μΌ νλ€λ μ μ΄μμ!
πμ΄μ§ νμμ μ΄ν΄ (μμ°¨ νμκ³Ό λΉκ΅νλ©° μ΄ν΄νκΈ°)
πλΆν μ 볡 μκ³ λ¦¬μ¦κ³Ό μ΄μ§ νμ
- λΆν μ 볡 μκ³ λ¦¬μ¦(Divide and Conquer)
- Divide: λ¬Έμ λ₯Ό νλ λλ λ μ΄μμΌλ‘ λλλ€.
- Conquer: λλ μ§ λ¬Έμ κ° μΆ©λΆν μκ³ , ν΄κ²°μ΄ κ°λ₯νλ€λ©΄ ν΄κ²°, μλλ©΄ λ€μ λλλ€.
- μ΄μ§ νμ(Binary Search)
- Divide : Listλ₯Ό λ κ°μ Sub Listλ‘ λλλ€.
- Conquer :
- κ²μν μ«μ(search)κ° Listμ μ€κ°κ° λ³΄λ€ ν¬λ€λ©΄ λ· λΆλΆμ Sub Listμμ κ²μν μ«μλ₯Ό μ°Ύλλ€.
- κ²μν μ«μ(search)κ° Listμ μ€κ°κ° λ³΄λ€ μλ€λ©΄ μ λΆλΆμ Sub Listμμ κ²μν μ«μλ₯Ό μ°Ύλλ€.
- μ½λμ λν μκ°
- μ΄μ§ νμμ Dataκ° μ λ ¬λ μλ μνμμ μ§ν
- Dataκ° [2, 3, 8, 12 ,20] μΌ λ,
- binary_search(data_list, search_num) ν¨μλ₯Ό λ§λ λ€.
- find_dataλ μ°Ύλ μ«μμ λν λ³μ
- data_listλ Dataλ₯Ό λ΄μ List
- data_listμ μ€κ°κ°μ find_dataμ λΉκ΅νλ€.
- λ§μ½ find_dataκ° Data_listλ³΄λ€ μλ€λ©΄
- 맨 μ μͺ½λΆν° data_listμ μ€κ°κΉμ§ λ€μ find_dataλ₯Ό μ°Ύλλ€.
- data_listμ μ€κ°κ°μ΄ find_dataλ³΄λ€ ν¬λ€λ©΄
- data_list μ€κ°λΆν° 맨 λκΉμ§ λ€μ find_dataλ₯Ό μ°Ύλλ€.
- λ λ€ μλλΌλ©΄, data_listμ μ€κ°κ°μ find_dataμΈ κ²½μ°λ°μ μμΌλ―λ‘, returnμΌλ‘ data_list μ€κ°μ ν΄λΉ κ° μμΉ
- λ§μ½ find_dataκ° Data_listλ³΄λ€ μλ€λ©΄
- binary_search(data_list, search_num) ν¨μλ₯Ό λ§λ λ€.
πμκ³ λ¦¬μ¦ λΆμ
μ΄μ§ νμμ nκ°μ Listλ₯Ό λ§€λ² 2λ‘ λλμ΄ κ·Έ nμ΄ κ²°κ΅ 1μ΄ λ λκΉμ§ κ³~~~~~μ λΉκ΅μ°μ°μ νμ¬ kλ²(ν)λ₯Ό μ§ννλ κ²μ΄μμ.
- n X $\frac { 1 }{ 2 }$ X $\frac { 1 }{ 2 }$ X $\frac { 1 }{ 2 }$ ... = 1
- X $\frac { 1 }{ 2 }^k$ = 1
- n = $2^k$ = $log_2 n$ = $log_2 2^k$
- $log_2 n$ = k
Big O νκΈ°λ²μΌλ‘λ k + 1μ΄ κ²°κ΅ μ΅μ’ μκ° λ³΅μ‘λκ° λλ κ²μ΄μμ. (1μ΄ λμμ λλ, λΉκ΅μ°μ°μ νλ² μννκ² λλ΅λλ€!)
κ²°κ΅ O($log_2 n$ + 1)μ΄κ³ , 2μ 1μ μμμ΄κΈ° λλ¬Έμ μμ κ° λλ―λ‘, κ²°κ³Όμ μΌλ‘λ O($log n$)κ° λκ² μ΅λλ€!
μ£Όλνλμ κΈμ΄ λ§μμ λμ ¨λμ? ꡬλ κ³Ό 곡κ°! κ·Έλ¦¬κ³ , λκΈ κ·Έλ¦¬κ³ λ°©λͺ λ‘μ μ£Όλνλμκ² λ§μ νμ΄ λ©λλ€
'μ½λ© ν μ€νΈ μ€λΉ > μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μκ³ λ¦¬μ¦] Graph (κ·Έλν) (0) | 2021.09.20 |
---|---|
[μκ³ λ¦¬μ¦] μμ°¨ νμ (0) | 2021.09.19 |
[μκ³ λ¦¬μ¦] Quick Sort (ν΅ μ λ ¬) (0) | 2021.09.09 |
[μκ³ λ¦¬μ¦] λ³ν© μ λ ¬ (merge sort) (0) | 2021.09.09 |
[μκ³ λ¦¬μ¦] Dynamic Programming(λμ κ³νλ²)& Divide and Conquer(λΆν μ 볡) (0) | 2021.09.09 |