[알고리즘] 선형 검색 (linear search), 보초법(sentinel method)에 대하여

2024. 6. 28. 14:19·CS/알고리즘
목차
  1. 선형 검색?
  2. 선형 검색의 구현 with 파이썬
  3. 보초법이란?
  4. 보초법을 적용한 선형 검색 알고리즘 구현

선형 검색?

선형의 배열에서 검색하는 경우, 원하는 키 값을 가진 원소를 찾을 때 까지 맨 앞부터 스캔하여 차례차례 검색하는 알고리즘이다. 아래와 같이 앞에서부터 값을 비교하면서 검색을 진행한다.

이 때, 만약 2가 아니라 8을 검색하려고 하였다면 검색이 실패하게 된다.

 

선형 검색의 종료 조건은 다음과 같다.

  • 검색할 값과 일치하는 원소를 찾은 경우 (성공)
  • 검색할 값을 찾지 못하고 배열의 맨 끝에 도달한 경우 (실패)

 

선형 검색의 구현 with 파이썬

def linearSearch(arr, key):
    i = 0
    while True:
        if i == len(arr):
            return -1
        if arr[i] == key:
            return i
        i += 1

while문으로 구현

 

def linearSearch(arr, key):
    for i in range(len(arr)):
        if arr[i] == key:
            return i
    else:
        return -1

for문으로 구현

 

보초법이란?

앞의 기존 선형 검색 과정에서 종료 조건은 아래와 같았다.

  • 검색할 값과 일치하는 원소를 찾은 경우 (성공)
  • 검색할 값을 찾지 못하고 배열의 맨 끝에 도달한 경우 (실패)

이 때, 종료 조건은 2가지로 검사 비용이 들게 된다.

이러한 검사 비용을 줄이기 위하여 등장한 것이 바로 보초법이다.

 

보초법은 검색 대상 배열 맨 뒤에 검색하고자 하는 키 값을 추가하는 것이다.

그리고 종료 조건을 다음과 같은 한 가지로 줄이게 된다.

  • 검색할 값과 일치하는 원소를 찾은 경우

검색 대상 배열에 키와 일치하는 값이 존재하지 않았더라도, 보초법을 통해 배열의 맨 뒤에 키 값이 추가되었으므로 알고리즘은 종료되게 된다.

 

위 그림과 같이 검색 대상 배열이 [7, 4, 1, 2, 6, 2, 9] 이었다면, 배열의 마지막에 검색 키인 2를 추가한다.

이후 검색 키와 일치하는 값을 찾을 때 까지 검색을 진행한다.

 

만약, 기존의 배열에 키 값이 존재하지 않았다고 하더라도, 알고리즘은 종료된다.

위와 같이 기존에 5는 존재하지 않았지만, 배열의 맨 뒤에 5를 추가함으로써 알고리즘이 종료될 수 있다.

 

보초법을 적용한 선형 검색 알고리즘 구현

import copy

def linearSearch(arr, key):
    a = copy.deepcopy(arr)
    a.append(key)       # 보초 key 추가

    i = 0
    while True:
        if a[i] == key:
            break
        i += 1
    
    if i == len(arr):
        return -1
    else:
        return i

다음의 책을 참고하였습니다.

 

Do it! 자료구조와 함께 배우는 알고리즘 입문 : 파이썬 편 - 예스24

기업 코딩 테스트와 모든 시험의 기초가 되는 ‘자료구조와 알고리즘’!213개의 그림과 136개의 파이썬 실전 예제로 빠르고! 쉽게! 배운다.자료구조와 알고리즘은 국내외 IT 기업의 면접과 코딩

www.yes24.com

 

'CS > 알고리즘' 카테고리의 다른 글

[알고리즘] 8퀸 문제  (0) 2024.07.14
[알고리즘] 하노이의 탑  (0) 2024.07.14
[알고리즘] 재귀 알고리즘(Recursion) - 1: 팩토리얼, 유클리드 호제법, 재귀 분석, 비재귀적 표현  (0) 2024.07.06
[알고리즘] 이진 검색 (Binary Search)  (0) 2024.06.28
[알고리즘] DFS(Depth First Search) 깊이 우선 탐색  (0) 2024.06.28
  1. 선형 검색?
  2. 선형 검색의 구현 with 파이썬
  3. 보초법이란?
  4. 보초법을 적용한 선형 검색 알고리즘 구현
'CS/알고리즘' 카테고리의 다른 글
  • [알고리즘] 하노이의 탑
  • [알고리즘] 재귀 알고리즘(Recursion) - 1: 팩토리얼, 유클리드 호제법, 재귀 분석, 비재귀적 표현
  • [알고리즘] 이진 검색 (Binary Search)
  • [알고리즘] DFS(Depth First Search) 깊이 우선 탐색
1in
1in
1in
Love IT!
1in
전체
오늘
어제
  • 분류 전체보기 (52)
    • BackEnd (9)
      • Django (3)
      • AWS (0)
      • Error (2)
    • 문제 풀이 (7)
      • Baekjoon (7)
    • CS (36)
      • 자료구조 (17)
      • Java (11)
      • C언어 (1)
      • 알고리즘 (6)
      • 어셈블리어 (0)
      • Python (1)
    • 이것저것 (0)
      • 회고 (0)
      • 책 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 링크드리스트
  • 큐
  • 유클리드 호제법
  • 이진트리
  • 하향식 분석
  • 재귀
  • 알고리즘
  • 자바
  • 레드블랙트리
  • 자료구조
  • 이중연결리스트
  • 라이브러리
  • avl tree
  • 모듈
  • 연결리스트
  • C언어
  • 상향식 분석
  • Queue
  • 재귀 분석
  • 인터페이스

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
1in
[알고리즘] 선형 검색 (linear search), 보초법(sentinel method)에 대하여
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.