Bibi's DevLog π€π
[Hello Coding μκ³ λ¦¬μ¦] 1μ₯. μκ³ λ¦¬μ¦μ μκ° λ³Έλ¬Έ
νλ‘κ·Έλλ°/Algorithm μκ³ λ¦¬μ¦
[Hello Coding μκ³ λ¦¬μ¦] 1μ₯. μκ³ λ¦¬μ¦μ μκ°
λΉλΉ bibi 2021. 6. 28. 16:23[210628]
Hello Coding μκ³ λ¦¬μ¦
1μ₯. μκ³ λ¦¬μ¦μ μκ°
λ€μ΄κ°λ κΈ
- μκ³ λ¦¬μ¦ : μ΄λ€ μΌμ νκΈ° μν λͺ λ Ήμ μ§ν©
- μ±λ₯
- μ¬λ¬ μκ³ λ¦¬μ¦λ€μ μ₯λ¨μ κ³Ό μ°¨μ΄μ μ μ΄ν΄νκ³ μΈ μ€ μμμΌ νλ€.
- λ€λ₯Έ μλ£κ΅¬μ‘° / μκ³ λ¦¬μ¦μ μ°λ κ²λ§μΌλ‘λ μ±λ₯μ΄ ν¬κ² λ¬λΌμ§ μ μλ€.
λ¨μ νμ simple search
νμ λ¬Έμ λ₯Ό ν λ μ¬μ©.
- λμ : λ¨μν μμ νλνλλ₯Ό λ§λμ§ μλμ§ μΌμΌμ΄ νμΈνλ λ°©μ
- nκ°μ μμ 리μ€νΈμμ μ΅λ nλ²λ§μ μ λ΅μ μ°Ύμ
μ΄μ§ νμ binary search
νμ λ¬Έμ search λ₯Ό ν λ μ¬μ©.
μ΄μ§ νμμ 맀 λ¨κ³λ§λ€ μ λ°μ ν보λ€μ μμ¨ μ μλ€.
- input : μ λ ¬λ μμ 리μ€νΈ
- output : μνλ μμκ° μμΌλ©΄ κ·Έ μμΉλ₯Ό λ°ν. μλλ©΄ null λ°ν.
- λμ
- μ λ ¬λ 리μ€νΈμ μ€κ°κ°λΆν° νμ μμ.
- νμμΌ λλ
(νμ + 1) / 2
λ‘ κ³μ°
- νμμΌ λλ
- νμλμμ΄ μ€κ°κ°λ³΄λ€ μμμ§ ν°μ§ νλ¨
- μμ/ν° λλ¨Έμ§ μ λ° λ¦¬μ€νΈμ μ€κ°λΆν° λ€μ νμ μμ - μ΄ κ³Όμ μ λ°λ³΅
- μ λ ¬λ 리μ€νΈμ μ€κ°κ°λΆν° νμ μμ.
- nκ°μ μμ 리μ€νΈμμ μ΅λ log2nλ² λ§μ μ λ΅μ μ°Ύμ
μ΄μ§ νμ μ½λ
def binary_search(list, item):
low = 0
high = len(list)-1
while low <= high:
mid = (low + high) / 2
guess = list[mid]
if guess == item: ## μΆμΈ‘ν κ°μ΄ μ λ΅μ
return mid
if guess > item: ## guessκ° λ무 νΌ - νμ μ²μ₯μ mid-1λ‘ μ€μ
high = mid - 1
else: ## guessκ° λ무 μμ
low = mid - 1
return None ## μμ΄ν
μ΄ λ¦¬μ€νΈμ μμ
my_list = [1, 3, 5, 7, 9]
print binary_search(my_list, 3) ## return = 1
print binary_search(my_list, -1) ## return = None
λ‘κ·Έμ κ°λ
- λ‘κ·Έλ κ±°λμ κ³±μ λ°λλ§μ΄λ€.
- λΉ μ€ νκΈ°λ²μμ - λͺ¨λ logν¨μλ log2λ₯Ό λ»νλ€ (λ°μ΄ 2μΈ λ‘κ·Έ).
- λ°μ΄ 10μΈ λ‘κ·Έμ λν΄μλ λ°μ μλ΅νλ€.
- logb(a) = bλ₯Ό λͺ λ² κ±°λμ κ³±ν΄μΌ aκ° λμ¬κΉμ?
μ€ν μκ° running time
μκ° λλ μ μ₯κ³΅κ° λ©΄μμ κ°μ₯ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ λνλΌ μ μλ€
- μ ν μκ° linear time
- O(n)
- nκ°μ μμκ° μλ€λ©΄ nλ² μΆμΈ‘ν΄μΌ ν¨ (ex. λ¨μνμ)
- λ‘κ·Έ μκ° logarithmic time
- O(log n)
- nκ°μ μμκ° μλ€λ©΄ log nλ² μΆμΈ‘ν΄μΌ ν¨ (ex. μ΄μ§νμ)
λΉ μ€νκΈ°λ² Big O notation - κΈ°μ΄
μ΄λ€ μκ³ λ¦¬μ¦μ΄ μΌλ§λ λΉ λ₯Έμ§ νκΈ°νλ λ°©λ². (μκ°λ³΅μ‘λ νκΈ°)
μ μ°λκ°?
- λ¨μν 'μκ³ λ¦¬μ¦μ μ€ν μκ°' μ΄ μλ '리μ€νΈ ν¬κΈ°μ λ°λ₯Έ μκ³ λ¦¬μ¦ μ€νμκ° μ¦κ°μ¨'μ νμ νκΈ° μν΄.
νΉμ§
- μκ³ λ¦¬μ¦μ μλλ 'μ°μ° μκ°'μ΄ μλ 'μ°μ° νμ μ¦κ°μ¨'λ‘ μΈ‘μ νλ€.
- μ λ ₯ λ°μ΄ν°μ ν¬κΈ°κ° λμ΄λ λ, μ€νμλκ° μΌλ§λ μ¦κ°νλμ§ μ μ μλ€.
- μΈμ λ μ΅μ
μ κ²½μ°λ₯Ό κ°μ νλ€.
- = μ΅μ μ κ²½μ°λΌλ νμμ΄ κ·Έ μκ°λ³΄λ€ λλ €μ§μ§ μμμ 보μ₯νλ€.
λ§μ΄ μ°μ΄λ λΉ μ€ μ€νμκ° 5κ°μ§
μμͺ½μΌμλ‘ λΉ λ₯΄κ³ , μλμͺ½μΌμλ‘ λλ¦Ό
- O(log n) λ‘κ·Έ μκ° (ex. μ΄μ§ νμ)
- O(n) μ ν μκ° (ex. λ¨μ νμ)
- O(n * log n) (ex. ν΅ μ λ ¬)
- O(nμ κ³±) (ex. μ ν μ λ ¬)
- O(n!) (ex. μΈνμ λ¬Έμ )
O(n!) - μΈνμ λ¬Έμ traveling salesperson problem
μ€νμκ°μ΄ O(n!)μΈ μκ³ λ¦¬μ¦. (μΈνμ=μΈμΌμ¦λ§¨)
- λ¬Έμ : μΈμΌμ¦λ§¨μ΄ κ°μ₯ 짧μ κ±°λ¦¬λ‘ nκ°μ λμλ₯Ό λͺ¨λ λ°©λ¬Ένλ € ν λ, λμλ₯Ό λ°©λ¬Ένλ λͺ¨λ κ²½λ‘λ₯Ό μ΄ν΄λ³΄μμΌ νλ€.
- λμμ μκ° nκ°μΌ λ, κ²½λ‘ νμμ μν μ°μ° νμλ n!λ‘ μ¦κ°μ¨μ΄ μμ²λκ² λλ€.
- 1κ° = 1
- 2κ° = 2! = 1x2 = 2
- 3κ° = 3! = 1x2x3 = 6
- 4κ° = 4! = 1x2x3x4 = 24
- 5κ° = 5! = 1x2x3x4x5 = 120
- ...
'νλ‘κ·Έλλ° > Algorithm μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Hello Coding μκ³ λ¦¬μ¦] 4. ν΅ μ λ ¬ (0) | 2021.07.01 |
---|---|
[Hello Coding μκ³ λ¦¬μ¦] 3μ₯. μ¬κ· (0) | 2021.06.30 |
[Hello Coding μκ³ λ¦¬μ¦] 2μ₯. μ ν μ λ ¬ (0) | 2021.06.30 |
νλ‘κ·Έλλ¨Έμ€ Lv1 - μμ°μ λ€μ§μ΄ λ°°μ΄λ‘ λ§λ€κΈ° (0) | 2021.06.24 |
[Hello Coding μκ³ λ¦¬μ¦] 1. μκ³ λ¦¬μ¦ μκ° (0) | 2021.02.03 |