알고리즘 특강 Week2: 완전탐색과 이분탐색

탐색

탐색이란

탐색이란, 많은 데이터 속에서 원하는 데이터를 찾는 행위이다.

탐색의 종류

완전탐색, 이분탐색, 깊이우선탐색, 너비우선탐색, 문자열탐색, KMP, BM

완전탐색(Bruto Force)

정의

  • 컴퓨터의 성능을 이용하여 가능한 모든 경우의 수를 탐색하는 방법

  • 효율성 관점에선 최악의 방법이나 무조건 원하는 값을 탐색할 수 있다는 장점

완전탐색 구현방법

[문제] 8장의 숫자카드 중 숫자가 8인 카드의 위치값을 반환하라.

반복문
def solution(card):
    for i in range(len(card)):
        if card[i] == 8:
            return i
        return -1
재귀함수
def solution(card, loc):
    if trump[loc] == 8:
        return loc
   	else:
        return(trump, loc+1)

정의

  • 이진검색이라고도 표현하며, 오름차순으로 정렬된 리스트에서 특정 값의 위치를 찾는 알고리즘
  • 중간값을 선택하여 타겟 값과의 대소를 비교하는 과정을 반복한다.

이분탐색 구현방법

[문제] 오름차순으로 정렬된 9장의 숫자카드 중 숫자가 8인 카드의 위치값을 반환하라.

예시코드
def solution(card):
    left = 0
    right = len(card)-1
    while(left<=right):
        mid = (left+right)//2 # 중간 인덱스
        if card[mid] == 8:
            return mid
        elif card[mid] < 8:
            left = mid + 1
        elif card[mid] > 8:
            right = mid - 1
    return mid
  • 중간 인덱스의 값을 target값과 비교한 뒤 일치하지 않으면 새로운 구간을 설정하는 방식
  • 중간값과 target값의 크기를 비교하여 구간을 정하기 때문에 반드시 정렬된 데이터여야만 한다.

Leave a comment