알고리즘 문제풀이 - 선형검색과 보초법 & 이진탐색 (Python)

2021. 1. 8. 18:55·공부하기/다른 PL

1. 선형 검색

 

선형 검색 알고리즘은 직선 모양으로 늘어선 요소의 배열에서 앞부터 순차적으로 검색을 수행한다.

 

선형 검색 알고리즘에서 종료 조건은 2가지이다.

1. 배열의 끝

2. 검색할 값을 발견

 

보초법은
배열의 마지막 요소로 검색 요소를 추가하여
반복문에서 종료 판단 횟수를 2회에서 1회로 줄이는 역할을 한다.

 

# search 함수

def search(array, n, key):
    
    i=0
    array.append(key)
    # array의 마지막에 key를 추가
    
    while(True):
        if(array[i] == key):
            break
        i+=1
        # 마지막 요소까지 없으면 i = n으로 while문을 빠져나오게 된다.
      	
    return i if i != n else -1
	# 마지막 요소까지 검색하지 않았다면 인덱스를 반환하고 마지막 요소까지 검색했다면 -1을 반환

# main

array = [3, 5, 7, 2, 1, 9, 10, 24, 60, 26]
n = len(array)
key = int(input("찾을 값:"))

idx = search(array, n, key)

if(idx == -1):
    print("검색 실패")
else:
    print("{0}은 array[{1}]에 있습니다.".format(key, idx))

# 찾을 값:8
# 검색 실패

# 찾을 값:7
# 7은 array[2]에 있습니다.

# 찾을 값:3
# 3은 array[0]에 있습니다.

 


2. 이진 탐색

 

이진 탐색 알고리즘은 이미 정렬된 상태의 배열에서 선형 검색보다 빠르게 검색을 수행한다.

검색 규칙은 검색하려는 값이 중앙 값을 기준으로 작은지 큰지를 판별하는 것이다.

 

def binSearch(array, n, key):
    left = 0
    # 아직 검색하지 않은 값 중 가장 작은 값
    right = n-1
    # 아직 검색하지 않은 값 중 가장 큰 값

    point = 0
    # 검색 수행 기준점
    count = 0
    # 반복문 수행 카운터
    
    while(left <= right):
    # 가장 작은 값과 큰 값이 만날 때까지 반복 탐색
    
        count += 1
        
        point = int((right + left)/2)
        # 중간 값을 기준점으로 
        
        if(array[point] == key) :
            return point, count
            # 검색값을 찾으면 리턴

        elif(array[point] < key) :
            left = point + 1
            # 검색값을 찾지 못했고 기준값이 검색값보다 작은 경우 left index를 하나 올림
        else:
            right = point - 1
            # 검색값을 찾지 못했고 기준값이 검색값보다 큰 경우 right index를 하나 내림

    return -1, count

array = [10, 27, 38, 70, 99, 110, 130, 150, 200]
# 오름차순으로 정렬된 배열을 준비

key = int(input("찾을 값 :"))

idx, count = binSearch(array, len(array), key)
if(idx == -1):
    print("검색 실패 (반복문 수행:{0}회)".format(count))
else:
    print("{0}운 array[{1}]에 있습니다. (반복문 수행:{2}회)".format(key, idx, count))
    
    
# 찾을 값 :130
# 130운 array[6]에 있습니다. (반복문 수행:2회)
# 찾을 값 :8
# 검색 실패 (반복문 수행 : 3회)
# 찾을 값 :200
# 200운 array[8]에 있습니다. (반복문 수행:4회)
저작자표시 비영리 변경금지 (새창열림)

'공부하기 > 다른 PL' 카테고리의 다른 글

Blender 블렌더 초보 맥에서 단축키가 잘 안되는 것 같을 때 해결방법  (2) 2024.06.19
알고리즘 문제풀이 - 소수구하기 & 기수 (Python)  (3) 2020.12.23
객체지향과 상속  (1) 2019.09.10
웹 크롤링 PHP html dom parser  (0) 2019.09.06
'공부하기/다른 PL' 카테고리의 다른 글
  • Blender 블렌더 초보 맥에서 단축키가 잘 안되는 것 같을 때 해결방법
  • 알고리즘 문제풀이 - 소수구하기 & 기수 (Python)
  • 객체지향과 상속
  • 웹 크롤링 PHP html dom parser
hyunjicraft
hyunjicraft
모든 것을 기록하고 싶었지만 복잡하지 않은 것만 기록하게 된 블로그
    반응형
  • hyunjicraft
    개발망고발
    hyunjicraft
  • 전체
    오늘
    어제
    • 분류 전체보기
      • iOS
        • Swift
        • RxSwift
      • 공부하기
        • React
        • Python
        • 다른 PL
        • Figma
      • 스타트업
      • 글쓰기
        • 회고
  • 블로그 메뉴

    • 태그
  • 인기 글

  • 태그

    스타트업개발
    생활코딩
    알고리즘
    블렌더 g키
    blender g
    swift codable
    URLSessionDataTask
    마스터 컴포넌트 연결 해제
    RxSwift 비교
    RxSwift 이미지 다운로드
    게임런칭
    RxSwift image download
    ios system architecture
    피그마 인스턴스
    react
    computer systems
    Communication Patterns
    비동기 프로그래밍
    스타트업경험
    swift
    Python
    daummap
    함수방식 컴포넌트
    mvvm-c
    중니어
    맥에서 블렌더
    기술적도전
    문자열 포맷
    setState()
    블렌더
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
hyunjicraft
알고리즘 문제풀이 - 선형검색과 보초법 & 이진탐색 (Python)
상단으로

티스토리툴바