자료ꡬ쑰/πŸ‘‰μ•Œκ³ λ¦¬μ¦˜ - 15

였늘 듀은 κ°•μ˜ λͺ©λ‘

  1. 이진 탐색 - 1
  2. 이진 탐색 - 2
  3. 이진 탐색 - 3

이진탐색

탐색할 자료λ₯Ό λ‘˜λ‘œ λ‚˜λˆ„μ–΄ νƒμƒ‰ν•˜λŠ” 방법

이진 탐색은 데이터가 μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

쀑간 κ°’κ³Ό λΉ„κ΅ν•˜μ—¬ 쀑간 값보닀 찾고자 ν•˜λŠ” 값이
더 μž‘λ‹€λ©΄ μ™Όμͺ½μ— μžˆλ‹€λŠ” 것이고,
더 크닀면 였λ₯Έμͺ½μ— μžˆλ‹€λŠ” 것이닀.
λ”°λΌμ„œ 이λ₯Ό λ°˜λ³΅ν•΄μ„œ μ°ΎλŠ”λ‹€.

  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

κ²°κ³Ό2

μ•žμœΌλ‘œ 이 ν•¨μˆ˜λ₯Ό ν†΅ν•΄μ„œ νƒμƒ‰ν•¨μˆ˜κ°€ 잘 μž‘λ™ν•˜λŠ”μ§€ μ•Œμ•„λ³΄λ©΄ λ˜κ² λ‹€.

μ‹œκ°„λ³΅μž‘λ„

맀번 νƒμƒ‰μ‹œ λ‘λ²ˆμœΌλ‘œ λ‚˜λ‰˜κΈ°μ— $O(log n)$

μ‹œκ°„λ³΅μž‘λ„ : $O(log n)$

λ§ˆμ§€λ§‰

이뢄탐색은 ꡳ이 μž¬κ·€ν•¨μˆ˜λ‘œ μ•ˆμ§œλ„ λœλ‹€.
(μž¬κ·€ν•¨μˆ˜λ‘œ 짜면 ν•¨μˆ˜ μŠ€νƒμ΄ μŒ“μ—¬μ„œ.. 사싀 탐색을 μ§μ ‘μ§œμ„œ 쓸일이 거의 μ—†λ‹€.)

μˆ˜κ°•μΈμ¦

λŒ“κΈ€λ‚¨κΈ°κΈ°