μλ£κ΅¬μ‘°/πμκ³ λ¦¬μ¦ - 15
μ€λ λ€μ κ°μ λͺ©λ‘
- μ΄μ§ νμ - 1
- μ΄μ§ νμ - 2
- μ΄μ§ νμ - 3
μ΄μ§νμ
νμν μλ£λ₯Ό λλ‘ λλμ΄ νμνλ λ°©λ²
μ΄μ§ νμμ λ°μ΄ν°κ° μ λ ¬λμ΄ μμ΄μΌ νλ€.
μ€κ° κ°κ³Ό λΉκ΅νμ¬ μ€κ° κ°λ³΄λ€ μ°Ύκ³ μ νλ κ°μ΄
λ μλ€λ©΄ μΌμͺ½μ μλ€λ κ²μ΄κ³ ,
λ ν¬λ€λ©΄ μ€λ₯Έμͺ½μ μλ€λ κ²μ΄λ€.
λ°λΌμ μ΄λ₯Ό λ°λ³΅ν΄μ μ°Ύλλ€.
- μ°Ύκ³ μ νλ κ°μ΄ μ€κ° κ°λ³΄λ€ μμΌλ©΄ μΌμͺ½ 리μ€νΈμμ νμ μμ
- μ°Ύκ³ μ νλ κ°μ΄ μ€κ° κ°λ³΄λ€ ν¬λ©΄ μ€λ₯Έμͺ½ 리μ€νΈμμ νμ μμ
- 1κ³Ό 2λ₯Ό λ°λ³΅
μ΄μ§νμ ꡬν
def binarySearch(list, value):
if len(list) == 1:
return value == list[0]
elif len(list) == 0:
return False
mid = int(len(list) / 2)
if value == list[mid]:
return True
elif value < list[mid]:
return binarySearch(list[:mid], value)
else:
return binarySearch(list[mid + 1:], value)
μ ꡬνλμλ€.
νμν¨μ μ κ²ν¨μ(checkSearchFunc)
def checkSearchFunc(func, wacnt = 10, warange = 10, maxrand=1000, elemcnt = 10, repeatcnt = 10):
for i in range(repeatcnt):
list = random.sample(range(maxrand), elemcnt + (wacnt - int(wacnt / 3) * 2))
wa, list = list[elemcnt:], list[:elemcnt]
list.sort()
wa += random.sample(range(-warange, 0), int(wacnt / 3))
wa += random.sample(range(maxrand, maxrand + warange), int(wacnt / 3))
for e in list:
result = func(list, e)
if result == False:
print("cannot find : ", e, " from :", list)
return False
for e in wa:
result = func(list, e)
if result == True:
print("founded : ", e, " from :", list)
return False
return True
μμΌλ‘ μ΄ ν¨μλ₯Ό ν΅ν΄μ νμν¨μκ° μ μλνλμ§ μμ보면 λκ² λ€.
μκ°λ³΅μ‘λ
λ§€λ² νμμ λλ²μΌλ‘ λλκΈ°μ $O(log n)$
μκ°λ³΅μ‘λ : $O(log n)$
λ§μ§λ§
μ΄λΆνμμ κ΅³μ΄ μ¬κ·ν¨μλ‘ μμ§λ λλ€.
(μ¬κ·ν¨μλ‘ μ§λ©΄ ν¨μ μ€νμ΄ μμ¬μ.. μ¬μ€ νμμ μ§μ μ§μ μΈμΌμ΄ κ±°μ μλ€.)
λκΈλ¨κΈ°κΈ°