https://www.youtube.com/watch?v=-Gx0T92-7h8&list=PLVsNizTWUw7H9_of5YCB0FmsSc-K44y81&index=26

26강 이진 탐색 개요-0
26강 이진 탐색 개요-1
26강 이진 탐색 개요-2

하나씩 확인하는 방법

26강 이진 탐색 개요-4
26강 이진 탐색 개요-5
26강 이진 탐색 개요-6

다시말해

별다른 말이 없다면 기본적으로

26강 이진 탐색 개요-9

정렬되어 있는

절반씩 좁혀가며 데이터를

정리

순차탐색(단순히 그냥 데이터를 하나하나씩 확인하는 것) 리스트에서 특정 데이터가 존재하는지를 검사할때 별다른 말이 없으면 기본적으로 순차탐색임

26강 이진 탐색 개요-17
26강 이진 탐색 개요-18

데이터를 탐색할수 있다는 저에서 log 시간의 시간복잡도를

정리

이진 탐색은 기본적으로 리스트가 정렬되어 있을때 사용이 가능 하며 이러한 조건을 만족한다고 하면 탐색 범위를 빠르게 절반씩 좁혀 나가면서 데이터를 탐색할수 있다는 점에서 log 시간의 시간복잡도를 가질수 있음

이진탐색은 탐색 범위를 정해줘야함 이때 탐색 범위를 명시하기 위해 시작점 끝점을 명시(인덱스를 의미함)하고 그 시작점에 중간지점을 중간점이라고 표현함

이러한 세가지 변수를 이용해서 탐색범위를 절반씩 좁혀 나가면서 이진 탐색을 수행 할수 있습니다

26강 이진 탐색 개요-26
26강 이진 탐색 개요-27

중간점이라고 표현

26강 이진 탐색 개요-29

절반씩 좁혀나가면서

26강 이진 탐색 개요-31
26강 이진 탐색 개요-32
26강 이진 탐색 개요-33

탐색하고 싶기 때문에

26강 이진 탐색 개요-35

정리

중간점을 봣을때 값이 8임 그럼 중간점 포함 이후에 값은 볼필요가 없은 4보다 커서

그래서 끝점을 중간점 바로 왼쪽으로 옮겨서

다시 중간점을 찾음 값은 2임

중간점을 포함한 왼쪽 값을 볼필요가 없음 4보다 작아서

시작점을 중간점 우측으로 옮김

시작점 중간점 동시에 가리키는게 4임 찾고자 하는 데이터를 찾았음

** 시작점 중간점 동시에 가리키는 것이 본질이 아님 이럴 경우가 있을수 있지만

** 중간점이 가리키는게 맞아야 정답을 도출했다고 할수 있음

26강 이진 탐색 개요-46

26강 이진 탐색 개요-49
26강 이진 탐색 개요-50
26강 이진 탐색 개요-51
26강 이진 탐색 개요-53

현재 코드는 재귀 함수를 이용해서 작성한 코드임

def binary_search(array, target, start, end):

이와같이 탐색을 수행하고자 하는 배열 정보가 들어오고 그리고 찾고자 하는 데이터 탐색 범위가 주어지게 됨 일단 가장먼저 소스를 보면

스타트가 엔드보다 크다면 탐색하고자 하는 범위의 데이터가 동일하므로 이와같이

데이터가 존재하지 않는다고 none 값을 반환 할수 있도록 함

26강 이진 탐색 개요-61

시작점에다가 끝점을 더한 값에서 이를 나눈 몫을 중간점이라고 명시할수 있습니다

26강 이진 탐색 개요-63

하구요

26강 이진 탐색 개요-65

인덱스 라고 할수 있습니다

중간점의 값보다 찾고자 하는 값이 작은 경우에는 중간점 위치를 포함해

26강 이진 탐색 개요-68

큰 값들이 존재

26강 이진 탐색 개요-70

리턴 할수

26강 이진 탐색 개요-72

찾고자 하는 값이

26강 이진 탐색 개요-74
26강 이진 탐색 개요-75

그래서 이와 같이 작성된 이진 탐색함수를 이용해서 실제로 이진탐색을 수행 해볼수 있는데요

26강 이진 탐색 개요-78

찾고자

이진 탐색을 수행한 결과를

26강 이진 탐색 개요-81

none

26강 이진 탐색 개요-83
26강 이진 탐색 개요-84

있는데요

이 반복 구문이 수행 될때마다 현재 중간점 위치에 값을 확인해서 찾고자 하는 데이터를 찾았는지를 검사할수 있고

만약 찾지 못했다면 마찬가지로 탐색범위를 좁혀 가는 방법을 사용할 수 있습니다

정리

이진탐색 구현은 반복문을 통해서도 가능함

26강 이진 탐색 개요-91
26강 이진 탐색 개요-92

값에 인덱스를 리턴

26강 이진 탐색 개요-94

위해서 이 끝점을 중간점 보다 1 작은 값으로 갱신 할수 있도록 합니다

마찬가지 로직으로 중간점에 값보다 찾고자 하는 값이 더 큰 경우에는 오른쪽 부분을 탐색할 필요가 있기 때문에 시작점에 값을 중감점에 1을 더한 값으로 갱신 할수 있도록 합니다

데이터 예시를 넣어서 이진탐색을 수행한 결과를 확인해 보시면 아까 확인했던 결과와 동일하게 출력되는것을 확인할수 있습니다

26강 이진 탐색 개요-99

바이너리 서치 함수

26강 이진 탐색 개요-101

확인해 보시면 하나의 어뤠이 정보를 입력받을때 포인터를 사용하거나 이와같이 백터 라이브러리를 사용하되 별도로 변수를

26강 이진 탐색 개요-103

그 벡터 변수에

만약 &(엔퍼센드)를 빼주게 되면 이 함수를 호출할때 기존 백터에 담겨있던

값을 카피 하기 때문에 시간 복잡도가 O(N)이 됩니다 그렇기 때문에

26강 이진 탐색 개요-107
26강 이진 탐색 개요-108

설정한 뒤에

찾고 자 하는 값과 동일할때 해당 인덱스를 반환 할수 있도록 하는

26강 이진 탐색 개요-111

부분을 탐색할수 있도록 하고 마찬가지로 중간점에 값보다 찾고자 하는 값이 큰경우에는

26강 이진 탐색 개요-113

26강 이진 탐색 개요-115

원소가 존재하지

26강 이진 탐색 개요-117
26강 이진 탐색 개요-118
26강 이진 탐색 개요-119

바이너리 서치 함수

26강 이진 탐색 개요-121

매 스텝 마다

26강 이진 탐색 개요-124

수 있도록 하고

26강 이진 탐색 개요-126

반씩 줄이면서

26강 이진 탐색 개요-128

걸 확인할수 있습니다

26강 이진 탐색 개요-130
26강 이진 탐색 개요-131

바이섹트 레프트 , 라이트

참고로 파이썬에서 바이섹트 레프트는 C++에서의 로얼 바운드와 동일하며

바이섹트 라이트는 c++의 어펄 바운드와 사실상 같다고 볼수 있습니다

26강 이진 탐색 개요-136

바이섹트 레프트 하는 역할은

배열 a에 x를 삽입할 가장 왼쪽 인덱스를 반환 하는 거고요

바이섹트 롸이트는 정렬된 순서를 유지하면서 배열 a에 x를 삽입할 가장 오른쪽 인덱스를 반환하는 함수라고 할수 있습니다

26강 이진 탐색 개요-141
26강 이진 탐색 개요-142

바이섹트 레프트 4라는 원소에 대해서 이진 탐색을 수행하면 이 4라는 원소가 들어갈

첫번째 위치인 인덱스 2가 반환이 되구요

26강 이진 탐색 개요-145

26강 이진 탐색 개요-147

그림에서

26강 이진 탐색 개요-150

26강 이진 탐색 개요-153
26강 이진 탐색 개요-154
26강 이진 탐색 개요-155

있는

26강 이진 탐색 개요-157

라이트 벨류 사이에 있는 값들의 개수가 반환 됩니다

26강 이진 탐색 개요-159

레프트 벨류와 라이트 벨류 값을 둘다 4로 설정해서 현재 정렬되어

26강 이진 탐색 개요-161

값이 4인

26강 이진 탐색 개요-163

이어서 값이 -1 부터 3사이에 있는 데이터의 개수를 출력하고자 한다면 이와 같이

레프트 벨류로 -1 롸이트 벨류로 3을 넣어서 함수를 호출 할수 있습니다 이렇게

26강 이진 탐색 개요-166
26강 이진 탐색 개요-167

실제로 -1 이상 3이하인 값은 이렇게 총 6개가 존재하는 걸 확인할수있죠

26강 이진 탐색 개요-169

26강 이진 탐색 개요-171

이진 탐색을

26강 이진 탐색 개요-173

서치 유형으로 문제가 출제되는

26강 이진 탐색 개요-175

여기에서 최적화 문제는 어떤 함수의 값을

26강 이진 탐색 개요-177
26강 이진 탐색 개요-178
26강 이진 탐색 개요-179

찾는 최적화 문제가

26강 이진 탐색 개요-181

알맞은 값을 찾을수 있습니다

26강 이진 탐색 개요-183

많습니다

26강 이진 탐색 개요-186

아이디어를 이용해서 이진탐색으로 문제를

Last Updated:

Summarize & share videos seamlessly

Loading...