YS's develop story

순차 탐색, 이진 탐색 정리 λ³Έλ¬Έ

Algorithm

순차 탐색, 이진 탐색 정리

Yusang 2021. 8. 1. 09:18

πŸ‘©‍πŸ’» μˆœμ°¨ 탐색(Sequential Search)κ³Ό 이진 탐색(Binary Search) 정리

 

πŸ₯˜ 순차 탐색(Sequential Search)

데이터가 λ‹΄κ²¨μžˆλŠ” 리슀트λ₯Ό μ•žμ—μ„œλΆ€ν„° ν•˜λ‚˜μ”© μ‚΄νŽ΄λ³΄μ•„μ„œ μ›ν•˜λŠ” 데이터λ₯Ό μ°ΎλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

 

πŸ€ 순차 탐색 μ½”λ“œ

def sequentialSearch(list, search):
    for index in range(len(list)):
        if list[index] == search:
            return True
    return False

 

☘️ 순차 탐색 μ‹œκ°„ λ³΅μž‘λ„

찾고자 ν•˜λŠ” 값이 리슀트의 맨 λ§ˆμ§€λ§‰μ— μžˆμ„ λ•Œ, 리슀트의 길이만큼 데이터λ₯Ό 비ꡐ해야 ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n)μž…λ‹ˆλ‹€.

 

🍳 이진 탐색 (Binary Search)

탐색할 데이터λ₯Ό μ •ν™•νžˆ 반으둜 λ‚˜λˆ„μ–΄ ν•œμͺ½μ— 데이터가 μ—†λ‹€λ©΄ ν•œμͺ½μ„ λ²„λ¦¬λ©΄μ„œ νƒμƒ‰ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

단, 이진 탐색은 데이터가 미리 μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Όμ§€ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

πŸ€ μ΄μ§„ νƒμƒ‰ μ½”λ“œ

def binarySearch(list, search):
    print(list)
    if len(list) == 1 and list[0] == search:
        return True
    if len(list) == 1 and list[0] != search:
        return False
    if len(list) == 0:
        return False

    medium = len(list) // 2
    if list[medium] == search:
        return True
    else:
        if list[medium] < search:
            return binarySearch(list[medium + 1:], search)
        else:
            return binarySearch(list[:medium], search)

 

☘️ 이진 탐색 μ‹œκ°„ λ³΅μž‘λ„

리슀트λ₯Ό 맀번 2개둜 λ‚˜λˆ„μ–΄ 1이 될 λ•ŒκΉŒμ§€ 비ꡐ 연산을 μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„ λ³΅μž‘λ„λŠ” O(log n)μž…λ‹ˆλ‹€.

Comments