땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • I
  • 이것이 리눅스다 with Rocky Linux9
  • D
  • ㅗ
  • E

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Coding Test(이진 탐색)
Algorithm/concept

Coding Test(이진 탐색)

2021. 12. 16. 18:14

순차 탐색

- 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법

이진탐색

- 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법

- 시작점, 끝점, 중간점을 이용하여 탐색 범위 설정

- 시간복잡도 : O(logN)

# 이진 탐색 소스코드 구현 (재귀 함수)
def binary_search(array, target, start, end):
    if start > end:
        return None
    mid = (start + end) // 2
    # 찾은 경우 중간점 인덱스 반환
    if array[mid] == target:
        return mid
    # 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
    elif array[mid] > target:
        return binary_search(array, target, start, mid - 1)
    # 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
    else:
        return binary_search(array, target, mid + 1, end)
# 이진 탐색 소스코드 구현 (반복문)
def binary_search(array, target, start, end):
    while start <= end:
        mid = (start + end) // 2
        # 찾은 경우 중간점 인덱스 반환
        if array[mid] == target:
            return mid
        # 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
        elif array[mid] > target:
            end = mid - 1
        # 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
        else:
            start = mid + 1
    return None

#이진 탐색 라이브러리
from bisect import bisect_left,bisect_right

a = [1,2,4,4,8]
x = 4

print(bisect_left(a,x))
prinT(bisect_right(a,x))

>> 2
>> 4

파라메트릭 서치(Parametric Search)

- 최적화 문제를 결정 문제(yes or no)로 바꾸어 해결하는 기법

- 이진 탐색을 이용하여 해결 가능

- ex) 특정한 조건을 만족하는 가장 알맞은 값을 빠르게 찾는 최적화 문제 

 

'현재 이 높이로 자르면 조건을 만족할 수 있는가?'

를 확인한 뒤에 조건의 만족여부에 따라 탐색 범위를 좁혀 해결한다.

중간점의 값은 시간이 지날수록 '최적화된 값'이 된다.

'Algorithm > concept' 카테고리의 다른 글

Coding Test(최단 경로 알고리즘)  (0) 2021.12.17
Coding Test(다이나믹 프로그래밍)  (0) 2021.12.16
Coding Test(DFS/BFS)  (0) 2021.12.15
Coding Test(그리디 & 구현)  (0) 2021.12.14
Coding Test(Algorithm) - Python  (0) 2021.11.02
    'Algorithm/concept' 카테고리의 다른 글
    • Coding Test(최단 경로 알고리즘)
    • Coding Test(다이나믹 프로그래밍)
    • Coding Test(DFS/BFS)
    • Coding Test(그리디 & 구현)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바