πŸ’Ώ Data/λΆ€νŠΈμΊ ν”„

[TIL] 100. [μ•Œκ³ λ¦¬μ¦˜] 탐색

Jayden1116 2022. 4. 6. 20:56

ν‚€μ›Œλ“œ

  • 탐색
  • μ„ ν˜•νƒμƒ‰
  • 이진탐색

[μ•Œκ³ λ¦¬μ¦˜] 탐색

  • 자료λ₯Ό ν•˜λ‚˜μ”© νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜
  • 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” 문제λ₯Ό νƒμƒ‰ν•΄μ•Όν•œλ‹€.

[탐색] μ„ ν˜•νƒμƒ‰(Linear Search)

  • 기본적인 탐색 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ ν•œλ²ˆμ— ν•˜λ‚˜μ”© μ°¨κ·Όμ°¨κ·Ό λͺ¨λ‘ κ²€μƒ‰ν•˜λŠ” 것
def linear_search(arr, value):
    for i in range(len(arr)):
        if arr[i] == value:
            return i

[탐색] 이진탐색(Binary Search)

  • 탐색을 ν•  λ•Œ, λ°˜μ”© μ€„μ—¬λ‚˜κ°€λ©΄μ„œ 탐색
  • 마치 μ—…λ‹€μš΄ κ²Œμž„μ—μ„œ κ°€μš΄λ° 값을 λ§ν•˜λ©΄ 점점 μ’ν˜€λ‚˜κ°€λŠ” 방식
  • 단, 데이터가 이미 μ •λ ¬λœ κ²½μš°μ—λ§Œ μž‘λ™ν•œλ‹€.
  • O(logn)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°–λŠ”λ‹€.(그룹을 2κ°œμ”© λ‚˜λˆ„λ©΄μ„œ μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έ)
def binary_search(arr, value):
    low = 0
    high = len(arr) - 1

    while low <= high:
        mid = (low + high) // 2

        if arr[mid] == value:
            return mid
        elif arr[mid] < value:
            low = mid + 1
        else:
            high = mid - 1
    return '인덱슀 μ—†μŒ' # 값을 μ°Ύμ§€λͺ»ν•œ 경우