일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ec2
- 자료구조
- MariaDB
- 트리
- 버블정렬
- C
- aws
- graph
- C언어
- bubblesort
- 리스트
- 그래프
- Tomcat
- BinarySearchTree
- Queue
- algorithm
- java
- 웹서버
- datastructure
- data structure
- BinaryTree
- heap
- web
- 알고리즘
- Stack
- Recursion
- ADT
- 큐
- spring
- 이진탐색트리
- Today
- Total
Min'sLog
(자료구조) 이진탐색(BinarySearch) 본문
1. 개념
이진 탐색은 목표(Target)값 배열을 탐색할때, 탐색의 범위를 절반씩 줄여나가면서 목표값을 찾는다.
다만, 목표값 배열이 정렬되어 있어야 한다는 제약사항이 붙는다.
순차탐색의 경우, N 개의 배열중 Target 을 찾기위해 최대 N 번을 수행해야 하지만,
이진 탐색의 경우, 목표값을 탐색할때, 최대 log2N번을 수행하여 찾을수 있다.
따라서, 탐색을 해야하는 Data 범위가 늘어날수록 이진탐색이 목표값을 찾기위해 더 효율적이다.
(Data가 정렬되어있다면!)
2. 이진탐색의 알고리즘
Ⅰ. 최초 탐색의 범위를 지정하기 위해 배열의 시작 위치[First]와 마지막 위치[Last] Index를 지정.
Ⅱ. 시작위치와 마지막위치의 값을 더한 후, 2로 나눈값을 중앙 값[Mid]으로 지정한다.
Ⅲ . 배열의 중앙값과 목표값을 대소비교한다.
Ⅲ-1. 배열의 중앙값이 목표값보다 큰경우
목표값은 배열의 중앙보다 작은범위에 있으므로, 마지막위치[Last] 를 현재 중앙값-1 의 위치로 조정한다.
이후 다시 Ⅱ 부터 다시 반복 한다.
Ⅲ-2. 배열의 중앙값이 목표값보다 작은경우
목표값은 배열의 중앙보다 높은범위에 있으므로, 시작위치[First] 를 현재 중앙값+1 의 위치로 조정한다.
이후 다시 Ⅱ 부터 다시 반복 한다.
Ⅲ-3. 배열의 중앙값과 목표값이 같은 경우
타겟값을 찾았으므로 해당 인덱스 혹은 목표값을 반환한다.
※ 탐색은 언제까지 시행되는가?
탐색이 종료되는 시점은 배열내에서 목표된 값을 찾지 못했을때까지 반복해야한다.
즉, 탐색의 범위가 First 가 Last 의 위치보다 클때까지 반복되어야한다.
(First == Last 가 같은 경우, 탐색을 해야하는 범위가 1개 남았다는 뜻이다.)
3. 코드구현(JAVA 구현)
아래와 같이, 배열에 Integer(정수형) 숫자들을 무작위로 입력 받되, 숫자들을 자동으로 정렬(sorting)한 후,
목표하는 Target Number 를 입력 받고 Target Number가 있는 경우, 해당 배열의 인덱스를 반환
없는 경우 -1을 반환하도록 구현하였다.
<main>
<method>
'DataStructure' 카테고리의 다른 글
(자료구조) 리스트(1) 배열리스트(ArrayList) ADT 및 구현 연습 (0) | 2024.04.18 |
---|---|
(자료구조) ADT(추상자료형)란? (0) | 2024.04.16 |
(자료구조) 하노이 타워(Tower of Hanoi) (0) | 2024.04.14 |
(자료구조)재귀(Recursion) (0) | 2024.04.13 |
(자료구조) 알고리즘 성능 분석 방법 (1) | 2024.04.12 |