Algorithm

선형 탐색(Linear Search), 이진 탐색(Binary Search)

isaac.kim 2021. 9. 16. 09:49
728x90
반응형

선형 탐색(Linear Search)

 

선형탐색은 처음부터 끝까지 순차적으로 탐색해 나가는 방법입니다.

 

파이썬 코드 (Python Code)

def linear_search(element, some_list):
    for i in range(len(some_list)):
        if some_list[i] == element:
            return i
    return None

# 테스트
print(linear_search(2, [2, 3, 5, 7, 11]))
print(linear_search(0, [2, 3, 5, 7, 11]))
print(linear_search(5, [2, 3, 5, 7, 11]))
print(linear_search(3, [2, 3, 5, 7, 11]))
print(linear_search(11, [2, 3, 5, 7, 11]))

 

이진 탐색(Binary Search)

 

정렬된 리스트가 있을 때, 이진 탐색을 할 수 있습니다.

 

1. 리스트에서 중앙 값을 탐색 : (첫 인덱스 + 마지막 인덱스) / 2 = 대략 중앙 인덱스로 리스트의 중앙 값 체크

2. 중앙 값과 찾고자 하는 값을 비교하여 같으면 OK

아니면, 찾는 것보다

크면 찾은 위치부터 큰 값은 제외(반 제외 시킴),

작으면 제일 작은 값부터 탐색한 위치까지 제외

3. 반복해나가면서 탐색

 

이진 탐색(Binary Search)은 반 씩 줄여 나가면서 찾는 방법입니다.

 

파이썬 코드 (Python Code)

def binary_search(element, some_list):
    # 코드를 작성하세요.
    first = 0
    last =  len(some_list) - 1    
    
    
    # for i in range(0, len(some_list)) :
    while first <= last :    
        center = int((first + last) / 2)
        if element == some_list[center] :
            return center
        elif element > some_list[center] :
            first = center + 1
        elif element < some_list[center] :
            last = center - 1
        
    return None
    

print(binary_search(2, [2, 3, 5, 7, 11]))
print(binary_search(0, [2, 3, 5, 7, 11]))
print(binary_search(5, [2, 3, 5, 7, 11]))
print(binary_search(3, [2, 3, 5, 7, 11]))
print(binary_search(11, [2, 3, 5, 7, 11]))
728x90
반응형

'Algorithm' 카테고리의 다른 글

[Java]백준-문제-단계별로 풀어보기-2  (0) 2022.04.11
[Java]백준-문제-단계별로 풀어보기-1  (0) 2022.04.05
[백준-문제 1001-JAVA]  (0) 2022.04.04
[백준-문제 1000-JAVA]  (1) 2022.04.04
팔린드롬 문제 해결  (0) 2021.09.15