κ²μ(Search)
κ²μ
μ μ₯λμ΄ μλ μλ£ μ€μμ μνλ νλͺ©μ μ°Ύλ μμ
λͺ©μ νλ νμ ν€λ₯Ό κ°μ§ νλͺ©μ μ°Ύλ κ²
- νμ ν€(search key) : μλ£λ₯Ό ꡬλ³νμ¬ μΈμν μ μλ ν€
κ²μμ μ’ λ₯
- μμ°¨ κ²μ (sequential search)
- μ΄μ§ κ²μ (binary search)
- ν΄μ¬ (hash)
μμ°¨ κ²μ
μΌλ ¬λ‘ λμ΄ μλ μλ£λ₯Ό μμλλ‘ κ²μνλ λ°©λ²
- κ°μ₯ κ°λ¨νκ³ μ§κ΄μ μΈ κ²μ λ°©λ²
- λ°°μ΄μ΄λ μ°κ²° 리μ€νΈ λ± μμ°¨κ΅¬μ‘°λ‘ κ΅¬νλ μλ£κ΅¬μ‘°μμ μνλ νλͺ©μ μ°Ύμ λ μ μ©ν¨
- μκ³ λ¦¬μ¦μ΄ λ¨μνμ¬ κ΅¬νμ΄ μ½μ§λ§, κ²μ λμμ μκ° λ§μ κ²½μ°μλ μνμκ°μ΄ κΈκ²©ν μ¦κ°νμ¬ λΉν¨μ¨μ μ
2κ°μ§ κ²½μ°
- μ λ ¬λμ΄ μμ§ μμ κ²½μ°
- μ λ ¬λμ΄ μλ κ²½μ°
μ λ ¬λμ΄ μμ§ μμ κ²½μ°
κ²μκ³Όμ
- 첫 λ²μ§Έ μμλΆν° μμλλ‘ κ²μ λμκ³Ό ν€ κ°μ΄ κ°μ μμκ° μλμ§ λΉκ΅νλ©° μ°Ύλλ€.
- ν€ κ°μ΄ λμΌν μμλ₯Ό μ°ΎμΌλ©΄ κ·Έ μμμ μΈλ±μ€λ₯Ό λ°ννλ€.
- μλ£κ΅¬μ‘°μ λ§μ§λ§μ μ΄λ₯Ό λκΉμ§ κ²μ λμμ μ°Ύμ§ λͺ»νλ©΄ κ²μ μ€ν¨
μ°Ύκ³ μ νλ μμμ μμμ λ°λΌ λΉκ΅νμκ° κ²°μ λ¨
첫λ²μ§Έ μμλ₯Ό μ°Ύμ λλ 1λ² λΉκ΅, λλ²μ§Έ μμλ₯Ό μ°Ύμ λλ 2λ² λΉκ΅
μ λ ¬λμ§ μμ μλ£μμμ μμ°¨ κ²μμ νκ· λΉκ΅ νμ
= (1/n) * (1+2+3+β¦+n) = (n+1)/2
μκ°λ³΅μ‘λ
O(n)
μ λ ¬λμ΄ μμ§ μμ κ²½μ° μμ°¨ κ²μ
def sequentialSearch(a, n, key):
i <- 0
while i<n and a[i]!=key :
i <- i+1
if i<n : return
else : return -1
μ λ ¬ λμ΄ μλ κ²½μ°
κ²μκ³Όμ
μλ£κ° μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ μνμμ κ²μμ μ€μνλ€κ³ κ°μ νμ
μλ£λ₯Ό μμ°¨μ μΌλ‘ κ²μνλ©΄μ ν€ κ°μ λΉκ΅νμ¬, μμμ ν€ κ°μ΄ κ²μ λμμ ν€ κ°λ³΄λ€ ν¬λ©΄ μμκ° μλ€λ κ²μ΄λ―λ‘ λ μ΄μ κ²μνμ§ μκ³ κ²μμ μ’ λ£νλ€.
μ°Ύκ³ μ νλ μμμ μμμ λ°λΌ λΉκ΅νμκ° κ²°μ λ¨
μ λ ¬μ΄ λμ΄μμΌλ―λ‘, κ²μ μ€ν¨λ₯Ό λ°ννλ κ²½μ° νκ· λΉκ΅ νμκ° λ°μΌλ‘ μ€μ΄λ λ€.
μκ°λ³΅μ‘λ
O(n)
μ λ ¬λμ΄ μλ κ²½μ° μμ°¨ κ²μ
def sequentialSearch2(a, n, key):
i <- 0
while i<n and a[i] < key :
i <- i+1
if i<n and a[i] == key :
return i
else : return -1
μ΄μ§ κ²μ(Binary Search)
μλ£μ κ°μ΄λ°μ μλ νλͺ©κ³Ό ν€ κ°κ³Ό λΉκ΅νμ¬ λ€μ κ²μμ μμΉλ₯Ό κ²°μ νκ³ κ²μμ κ³μ μ§ννλ λ°©λ²
λͺ©μ ν€λ₯Ό μ°Ύμ λκΉμ§ μ΄μ§ κ²μμ μνμ μΌλ‘ λ°λ³΅ μνν¨μΌλ‘μ¨ κ²μ λ²μλ₯Ό λ°€μΌλ‘ μ€μ¬κ°λ©΄μ λ³΄λ€ λΉ λ₯΄κ² κ²μμ μνν¨
μ΄μ§ κ²μμ νκΈ° μν΄μλ μλ£κ° μ λ ¬λ μνμ¬μΌ νλ€.
κ²μκ³Όμ
μλ£μ μ€μμ μλ μμλ₯Ό κ³ λ₯Έλ€.
μ€μ μμμ κ°κ³Ό μ°Ύκ³ μ νλ λͺ©ν κ°μ λΉκ΅νλ€.
μλ£μ μ€μ μμμ κ°λ³΄λ€ μμΌλ©΄ μλ£μ μΌμͺ½ λ°μ λν΄μ μλ‘ κ²μμ μννκ³ , ν¬λ€λ©΄ μλ£μ μ€λ₯Έμͺ½ λ°μ λν΄μ μλ‘ κ²μμ μννλ€.
μ°Ύκ³ μ νλ κ°μ μ°Ύμ λκΉμ§ 1 ~ 3μ κ³Όμ μ λ°λ³΅νλ€.
ꡬν
κ²μ λ²μμ μμμ κ³Ό μ’ λ£μ μ μ΄μ©νμ¬ κ²μμ λ°λ³΅ μννλ€.
μ΄μ§ κ²μμ κ²½μ°, μλ£μ μ½μ μ΄λ μμ κ° λ°μ νμ λ λ°°μ΄μ μνλ₯Ό νμ μ λ ¬ μνλ‘ μ μ§νλ μΆκ° μμ μ΄ νμνλ€.
def binarySearch(a, N, key):
start = 0
end = N-1
while start <= end:
middle = (start + end) //2
if a[middle] == key: # κ²μ μ±κ³΅
return True
elif a[middle] < key:
end = middle - 1
else :
start = middle + 1
return False # κ²μ μ€ν¨
μ¬κ· ν¨μλ₯Ό μ΄μ©ν ꡬν
μλμ κ°μ΄ μ¬κ· ν¨μλ₯Ό μ΄μ©νμ¬ μ΄μ§ κ²μμ ꡬνν μλ μλ€.
μ΄μ§νμμ λ°λ³΅λ¬Έμ μ¬μ©νλ κ²μ΄ ν¨μ¬ ν¨μ¨μ μ΄λ€.
def binarySearch(a, low, high, key):
if low > high: #κ²μ μ€ν¨
return False
else :
middle = (low + high) //2
if key == a[middle] : # κ²μ μ±κ³΅
return True
elif key < a[middle] :
return binarySearch2(a, low, middle-1, key)
elif a[middle] < key :
return binarySearch2(a, middle+1, high, key)
'πΆ Programming > Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
4. Array Extra λ°°μ΄ (0) | 2022.10.15 |
---|---|
3. Sort μ λ ¬ (0) | 2022.10.02 |
2. Array λ°°μ΄ (2) | 2022.10.01 |
1. Algorithm μκ³ λ¦¬μ¦ (4) | 2022.09.29 |