프로그래밍/자료구조&알고리즘

검색 알고리즘_선형 검색(linear search), 보초법

O'bin 2024. 3. 20. 11:39

- 배열 검색방법 중 가장 기본

- 직선 배열에서 검색하는 경우에 원하는 데이터를 찾을때까지 맨 앞부터 순서대로 검색하는 알고리즘


목차


1. 선형 검색의 종료 조건

 

 

2. 보초법(sentinel method)

 

선형검색의 종료 조건 검사 비용 감소 방법

원본 데이터 맨 끝에 검색할 값(보초)를 추가

종료 조건 1번이 필요 없으므로 판단 횟수 반으로 감소

스캔 종료 시 찾은 데이터가 원본 데이터인지 보초인지 구별 필요

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from typing import Any, Sequence
import copy
 
""" 시퀀스 seq에서 key와 일치하는 원소 선형 검색(보초법) """
def seq_search(seq: Sequence, key: Any) -> int:
    a = copy.deepcopy(seq)  # seq 복사
    a.append(key)           # 보초 추가
 
    i = 0
    while True:
        if a[i] == key:     # 검색 값 찾으면 while문 종료
            break
        i += 1
    
    return -1 if i == len(seq) else i   # 검색 성공 : 인덱스, 검색 실패 : -1 return
 
if __name__ == '__main__':
    num = int(input('원소 수 입력 : '))
    x = [None* num
 
    for i in range(num):
        x[i] = int(input(f'x[{i}]: '))
 
    ky = int(input('검색할 값 : '))
 
    idx = seq_search(x, ky)
 
    if idx == -1:
        print('찾는 원소가 존재하지 않습니다')
    else:
        print(f'검색값은 x[{idx}]에 있습니다')
cs