Coding Test
탐색 알고리즘 | 이진 탐색(Binary Search)
이진유진
2024. 10. 16. 00:00
반응형
1. 이진 탐색(Binary Search)이란?
탐색할 자료를 둘로 나누어 해당 데이터가 있을만한 곳을 탐색하는 방법
* 데이터가 정렬되어 있어야함
2. 분할 정복 알고리즘과 이진 탐색
분할 정복 알고리즘(Divide and Conquer)
Divide : 문제를 하나 또는 둘 이상으로 나눈다.
Conquer : 나눠진 문제가 충분히 작고, 해결이 가능하다면 해결하고, 그렇지 않다면 다시 나눈다.
이진 탐색
Divide : 리스트를 두 개의 서브 리스트로 나눈다.
Comquer : 검색할 숫자(search) > 중간값이면, 뒷부분 / < 면 서브 리스트에서 검색할 숫자를 찾는다.
import java.util.ArrayList;
public class BinarySearch {
public boolean searchFunc(ArrayList<Integer> dataList, Integer searchItem) {
if(dataList.size() == 1 && searchItem == dataList.get(0)) {
return true;
}
if(dataList.size() == 1 && searchItem != dataList.get(0)) {
return false;
}
if(dataList.size() == 0) {
return false;
}
int medium = dataList.size() / 2;
if(searchItem == dataList.get(medium)) {
return true;
}else {
if(searchItem < dataList.get(medium)) {
return this.searchFunc(new ArrayList<Integer>()(dataList.subList(0, medium)), searchItem);
} else {
return this.searhFunc(new ArrayList<Integer>()(dataList.subList(medium, dataList.size())), searchItem);
}
}
}
}
ArrayList<Integer> testData = new ArrayList<Integer>();
for(int index = 0; index < 100; index++) {
testData.add(int)(Math.random() * 100));
}
Collections.sort(testData);
System.out.println(testData);
BinarySearch bSearch = new BinarySearch();
bSearch.searchFunc(testData, 2);
알고리즘 분석
시간복잡도 O(logn)
반응형