리μ€νΈ A = [ 0, 1, ,2, 3 ] μ΄ μμ λ, λ§μ§λ§ μμμΈ '3'μ μ°Ύλλ€κ³ ν΄λ³΄μ. |
Simple search, λ¨μ νμμ κ²½μ° μ²μλΆν° μμ°¨μ μΌλ‘ μμ κ°μ νμΈνλ€. λ§μ§λ§μ μμΉνκ³ μλ μμμΈ '3'μ μ°ΎκΈ° μν΄μλ 리μ€νΈμ κΈΈμ΄μ κ°μ μκ°μ΄ κ±Έλ¦°λ€. 리μ€νΈμ κΈΈμ΄μ κ°μμκ°μ O(n), linear time μ νμκ° μ΄λΌκ³ νλ€. |
Binary search, μ΄μ§ νμμ 리μ€νΈμ μ€κ°μ μλ μμμ ν¬κΈ°μ λ°λΌ νμν ꡬκ°(range)λ₯Ό λ°μ© μ€μ¬λκ° O(log n), logarithm time λ‘κ·Έ μκ°μ΄ 걸리λ λ°©μμ΄λ€. λ§μ½ 100κ°μ μμλ₯Ό κ°μ§κ³ μλ 리μ€νΈλΌλ©΄ νμν ꡬκ°μ΄ 100 μμ 50, 25, 13, 7, 4, 2, 1 μμΌλ‘ μ€μ΄λ λ€. λ°λΌμ, Aμ μ€κ°μ μμΉν A[2] μμΉμ μμμΈ '2'μ μ°Ύκ³ μνλ μμμΈ '3'λ³΄λ€ μμΌλ―λ‘ κ΅¬κ° A[:3] = [ 0, 1] μ λ²λ €μ§κ³ , λ€μ iterationμμλ A[3:] = [3]μ΄ νμλλ ꡬκ°μ΄λ€. |
Binary search νμ΄μ¬ ꡬν (* μ΄μ§ νμμ νμν 리μ€νΈκ° μ΄λ―Έ μ λ ¬λμ΄ μμ λλ₯Ό κ°μ νλ€.)
'''
INPUT: A = sorted array, i = value want to fine
OUTPUT: If value i is in A, return the index of it,
if not return -1.low = νμ λ²μ 맨 μ μΈλ±μ€
high = νμ λ²μ 맨 λ μΈλ±μ€
'''
def binarySearch(A,i):
low = 0
high = len(A) -1
while low <= high:
mid = (low + high) // 2
if A[mid] == i:
return mid
elif A[mid] < i:
low = mid+1
else:
high = mid
return -1