μ΄μ§ νμμ κ²μ μκ³ λ¦¬μ¦ μ€ νλλ‘, μ€λ¦μ°¨μμΌλ‘ μ λ ¬λμ΄ μλ λ°°μ΄μμ κ°μ μ°ΎκΈ° μν΄ μ€κ° κ°μ κΈ°μ€μΌλ‘ κ°λ₯μ±μ λ°μ© μ€μ¬ target valueλ₯Ό νμνλ μκ³ λ¦¬μ¦μ΄λ€.
μ΄μ§ κ²μ μκ³ λ¦¬μ¦(binary search algorithm)μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ 리μ€νΈμμ νΉμ ν κ°μ μμΉλ₯Ό μ°Ύλ μκ³ λ¦¬μ¦μ΄λ€.
μ²μ μ€κ°μ κ°μ μμμ κ°μΌλ‘ μ ννμ¬, κ·Έ κ°κ³Ό μ°Ύκ³ μ νλ κ°μ ν¬κ³ μμμ λΉκ΅νλ λ°©μμ μ±ννκ³ μλ€. μ²μ μ νν μ€μκ°μ΄ λ§μ½ μ°Ύλ κ°λ³΄λ€ ν¬λ©΄ κ·Έ κ°μ μλ‘μ΄ μ΅λκ°μ΄ λλ©°, μμΌλ©΄ κ·Έ κ°μ μλ‘μ΄ μ΅μκ°μ΄ λλ€.
κ²μ μ리μ μ λ ¬λ 리μ€νΈμλ§ μ¬μ©ν μ μλ€λ λ¨μ μ΄ μμ§λ§, κ²μμ΄ λ°λ³΅λ λλ§λ€ λͺ©νκ°μ μ°Ύμ νλ₯ μ λ λ°°κ° λλ―λ‘ μλκ° λΉ λ₯΄λ€λ μ₯μ μ΄ μλ€. (μ°Έκ³ : μν€λ°±κ³Ό)
μ¬κ·ν¨μλ₯Ό μ¬μ©ν μ΄μ§νμ ν¨μλ€. μ΄μ©μ§ λκ° λ°λ³΅λ¬Έμ²λΌ Returnμ μΈμλ§ λ°κΎΌ μκΈ° μμ μ ν΄μ μ κΈ°νλ€κ³ μκ°νλλ°, μ΄λ¦μ΄ λ°λ‘ μμλ€. μ¬κ·ν¨μ μΈμλ λ°λ³΅λ¬Έμ ν΅ν΄μ ꡬν μ μλ€.
μ»΄ν¨ν° κ³Όνμ μμ΄μ μ¬κ·λ μμ μ μ μν λ μκΈ° μμ μ μ¬μ°Έμ‘°νλ λ°©λ²μ λ»νλ©°, μ΄λ₯Ό νλ‘κ·Έλλ°μ μ μ©ν μ¬κ· νΈμΆμ ννλ‘ λ§μ΄ μ¬μ©λλ€. λ μ¬μ§μ΄λ κ·Έλ¦Ό λ±μμ μ¬κ·μ ννλ₯Ό μ¬μ©νλ κ²½μ°λ μλ€.
def binarySearch(array, value, low, high): if low > high: return False mid = (low+high) / 2 if array[mid] > value: return binarySearch(array, value, low, mid-1) elif array[mid] < value: return binarySearch(array, value, mid+1, high) else: return mid
Nκ°μ μ μ A[1], A[2], β¦, A[N]μ΄ μ£Όμ΄μ Έ μμ λ, μ΄ μμ XλΌλ μ μκ° μ‘΄μ¬νλμ§ μμλ΄λ νλ‘κ·Έλ¨μ μμ±νμμ€.
첫째 μ€μ μμ°μ N(1β€Nβ€100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ Nκ°μ μ μ A[1], A[2], β¦, A[N]μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ M(1β€Mβ€100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ Mκ°μ μλ€μ΄ μ£Όμ΄μ§λλ°, μ΄ μλ€μ΄ Aμμ μ‘΄μ¬νλμ§ μμλ΄λ©΄ λλ€. λͺ¨λ μ μμ λ²μλ -231 λ³΄λ€ ν¬κ±°λ κ°κ³ 231λ³΄λ€ μλ€.
5
4 1 5 2 3
5
1 3 7 9 5
Mκ°μ μ€μ λ΅μ μΆλ ₯νλ€. μ‘΄μ¬νλ©΄ 1μ, μ‘΄μ¬νμ§ μμΌλ©΄ 0μ μΆλ ₯νλ€.
1
1
0
0
1
λ¬Έμ λ₯Ό μ΄ν΄νλλ° μκ°μ΄ μ‘°κΈ κ±Έλ Έλλ°, Nμ λ΄κ° μ«μκ° μλμ§ μ¬λΆλ₯Ό νμΈν΄μ€ μ λ΅ λ°°μ΄μ κΈΈμ΄, κ·Έ λ€μ μ€μ 1λΆν° NκΉμ§μ μ«μκ° λλ€μΌλ‘ μλ λ°°μ΄μ΄λ€.
κ·Έλ¦¬κ³ Mμ λ΄κ° μλμ§ μ¬λΆλ₯Ό νμΈν λ¬Έμ λ€μ΄ λͺ¨μ¬μλ λ°°μ΄μ΄κ³ , λ°λ³΅λ¬Έμ λλ €μ μ λ΅ λ°°μ΄ μμ μλμ§ νμΈν μ«μ λ€μ΄λ€.
μλ μ½λλ₯Ό 보면 κ²°κ³Όμ μΌλ‘ μ λ΅ λ°°μ΄μ sorted ν¨μλ‘ μ€λ¦μ°¨μ μ λ ¬ν΄μ€ λ€μ, λ¬Έμ λ°°μ΄μ μ΄μ§νμμΌλ‘ λλ €μ κ²°κ³Όλ₯Ό νλ¦°νΈνλ€.
μ κΈ°νκ² ν¨μλ₯Ό Returnνλ©΄μ μ μν λ³μλ₯Ό μΈμλ‘ λ£λ ννλ‘ λ°λ³΅λ¬Έμ²λΌ λλ¦¬κ² λλ€. μλλ©΄ while Trueλ₯Ό μ¨λ λ κ² κ°λ€.
def BinarySearch(arr, val, low, high):
if low > high:
return False
mid = (low + high) // 2
if arr[mid] > val:
return BinarySearch(arr, val, low, mid - 1)
elif arr[mid] < val:
return BinarySearch(arr, val, mid + 1, high)
else:
return True
N = int(input())
A = list(map(int, input().split()))
M = int(input())
M_list = list(map(int, input().split()))
A = sorted(A)
for m in M_list:
if BinarySearch(A, m, 0, N-1):
print(1)
else:
print(0)
맀 μνλ§λ€ κ²μν μλ£μ μκ° 1/2μ© μ€μ΄λ λ€λ νΉμ§μ΄ μλ€. μλ£μ κ°μ Nμμ κ³μ 1/2μ κ³±νλ νμμ νλ€λ³΄λ©΄ μ΅μ’
μ μΌλ‘ kλ²νμ λ μλμ κ°μ΄ λ¨μ μλ£μ μκ° 1μ΄ λλ μμ΄ λμ¨λ€.
μ΄ λ μ°λ¦¬κ° ꡬν΄μΌ νλ κ²μ kκ°μ΄κΈ° λλ¬Έμ, μλ³μ 2μ kμΉμ κ³±νκ³ λ‘κ·Έλ₯Ό μ·¨ν΄μ£Όλ©΄ λ€μκ³Ό κ°μ΄ kλ log2Nμ΄ λλ€.
κ²°κ³Όμ μΌλ‘ μλ£ Nκ°μ λν μ΄μ§ νμμ μκ°λ³΅μ‘λλ BigO νκΈ°λ²μΌλ‘ λ€μκ³Ό κ°λ€. Big O νκΈ°λ²μμ μμλ 무μνκΈ° λλ¬Έμ 2λ μ μΈνκ³ logλ§ μ°μ¬μ‘λ€)
μν€λ°±κ³Όμλ λ무 μ΄λ ΅κ² μ¨μ Έμμ΄μ λ§ν¬λ₯Ό μ°Έκ³ νλ€. λ€λ₯Έ λ§λ‘ μ κ·Ό νκΈ°λ²μ΄λΌκ³ λ νλ€.
"μ€ν μκ°μ μ΅λν μ΄λ§νΌ 컀μ§μ§λ§ λ μ²μ²ν μ»€μ§ μλ μλ€"λ μλ―ΈμΈ μ κ·Όμ νκΈ°λ² ννλ₯Ό μ¬μ©νλ κ²μ΄ νΈλ¦¬ν μλ μμ΅λλ€. μ΄λ° κ²½μ°λ₯Ό μν΄ "big-O" νκΈ°λ²μ μ¬μ©ν©λλ€.
big-Oλ μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ λνλ΄λ μ§νμ λλ€. big-Oλ₯Ό μ΄μ©νμ¬ λ΄κ° κ°μ ν μκ³ λ¦¬μ¦μ΄ λΉ¨λΌμ‘λμ§, λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μ‘μ λ¨Ήμ§λ μλμ§ λ±μ μκ³ λ¦¬μ¦μ μ±λ₯μ νλ¨ν©λλ€. μκ°μ λν κ°λ μΈ μκ° λ³΅μ‘λμ 곡κ°μ λν κ³΅κ° λ³΅μ‘λκ° μμ΅λλ€. (μ°Έκ³ : λ§ν¬)
κ·Έλλ§ μ½κ² μ€λͺ λμ΄ μλ λ§ν¬λ₯Ό κ°μ Έμλ΄€λ€.
κ²½μ°μ λ°λΌμ μ νν μκ°λ³΅μ‘λλ₯Ό ꡬνλ κ² μ΄λ €μΈ μ μλ€. μ΄μ κ°μ₯ μ°¨μκ° λμ κ²λ§ λ¨κ²¨λμ λΉκ΅νλ λΉ μ€ νκΈ°λ²μ΄λ€. μ°¨μκ° λμ nμ΄ μ²λ¦¬ν λ°μ΄ν°κ° λ§μμλ‘ κ·Έ μ°¨μ΄κ° ν¬κΈ° λλ¬Έμ΄λ€.
T(n)=n5+n3+n+5 => O(n)=n5
λΉ μ€ νκΈ°λ²μ μμ λ¨μννλ κ²λ³΄λ€ "μκ³ λ¦¬μ¦μ μνμκ°μ λ°λ₯Έ μ±λ₯ κΈ°μ€μ λλκΈ° μ½λ€"μ μλ―Έκ° μλ€. μ νν μμ λͺ¨λ₯΄λλΌλ "μ΄ μκ³ λ¦¬μ¦μ μ±λ₯μ μ¬κΈ° μ λλ€"λΌκ³ νλ¨ν μ μκΈ° λλ¬Έμ΄λ€. λ€μμ κΈ°μ€μΌλ‘ μμ£Ό μ¬μ©λλ λΉ μ€ νκΈ°λ€.
μ§μ κ·Έλνλ https://www.desmos.com/calculator μμ κ·Έλ €λ³Ό μ μλ€. 2nμ μ μΈνλ©΄ μ΄λ°λΆμ O(1)λ³΄λ€ λ μ’μ μ±λ₯μ²λΌ κ·Έλνμ λμ€μ§λ§, μ€μ λ‘ λ°μ΄ν° μ²λ¦¬λ κ°μκ° 1λΆν° μμμ΄λ―λ‘ μλ―Έκ° μλ€.
lognμ μ±λ₯μ΄ κ΅μ₯ν μ’μ κ²μ μ μ μλλ° μ΄κ² λ°λ‘ μ΄μ§ νμ!