728x90
๋ฐ์ํ
์ด์งํ์(Binary Search)
์ ๋ ฌ๋ ๋ฐฐ์ด ๋๋ ๋ฆฌ์คํธ์์ ์ํ๋ ๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ด๋ ํ์ ์๊ณ ๋ฆฌ์ฆ
์์
- ํ์ ๋์์ ์ค๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ต๋๋ค.
- ์ค๊ฐ ๊ฐ๊ณผ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ ๋น๊ตํฉ๋๋ค.
- ๋ง์ฝ ์ค๊ฐ ๊ฐ์ด ์ฐพ๊ณ ์ ํ๋ ๊ฐ๊ณผ ์ผ์นํ๋ฉด ํ์์ ์ข ๋ฃํฉ๋๋ค.
- ๋ง์ฝ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ ๊ฐ๋ณด๋ค ์๋ค๋ฉด, ์ผ์ชฝ ๋ถ๋ถ์ ํ์ํฉ๋๋ค.
- ๋ง์ฝ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ ๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด, ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ ํ์ํฉ๋๋ค.
- ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ์ํ๋ ๊ฐ์ ์ฐพ์ ๋๊น์ง ๊ณ์ํฉ๋๋ค.
์ด์ง ํ์๊ณผ ์ ํ ํ์์ ์ฐจ์ด์
- ์ ํ ํ์(Linear Search)
๋ฐฐ์ด ๋๋ ๋ฆฌ์คํธ๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์์ฐจ์ ์ผ๋ก ํ์ํ์ฌ ์ํ๋ ๊ฐ์ ์ฐพ์ต๋๋ค.
๋ฐฐ์ด ๋๋ ๋ฆฌ์คํธ๊ฐ ์ ๋ ฌ๋์ด ์์ง ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. - ์ด์ง ํ์(Binary Search)
์ ๋ ฌ๋ ๋ฐฐ์ด ๋๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์ผ๋ก ๋๋์ด ํ์ ๋ฒ์๋ฅผ ์ขํ๊ฐ๋ฉด์ ์ํ๋ ๊ฐ์ ์ฐพ์ต๋๋ค.
๋ฐฐ์ด ๋๋ ๋ฆฌ์คํธ๊ฐ ์ ๋ ฌ๋์ด ์์ด์ผ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ๋ ฌ์ฌ๋ถ | ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด/๋ฆฌ์คํธ | ์ ๋ ฌ๋ ๋ฐฐ์ด/๋ฆฌ์คํธ |
ํ์์๋ | ๋๋ฆผ | ๋น ๋ฆ |
ํ์๋ฒ์ | ์ฒ์๋ถํฐ ๋๊น์ง | ์ค๊ฐ๊ฐใ ๋ฅด ๊ธฐ์ค์ผ๋ก ์ข/์ฐ์ธก ๋ฐ ์ค ํ๋ |
๊ตฌํ๋ฐฉ์ | for/while ๋ฃจํ ์ฌ์ฉ | ์ฌ๊ทํจ์ ์ฌ์ฉ |
์๊ฐ๋ณต์ก๋ | O(n) | O(log n) |
์๊ฐ๋ณต์ก๋
O(log n)
์์ ์ฝ๋
array[mid] ๊ฐ๊ณผ ๊ตฌํ๊ณ ์ ํ๋ key๊ฐ์ ๋น๊ต
- key > mid : ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ๊ฐ๋ณด๋ค ๋๋ค๋ฉด low๋ฅผ mid +1๋ก ๋ง๋ค์ด ์ค (์ผ์ชฝ ๋ฐ์ ๋ฒ๋ฆผ)
- key < mid : ๊ตฌํ๊ณ ์ํ๋ ๊ฐ์ด ์ค๊ฐ๊ฐ ๋ณด๋ค ๋ฎ๋ค๋ฉด high๋ฅผ mid-1๋ก ๋ง๋ค์ด ์ค (์ค๋ฅธ์ชฝ ๋ฐ์ ๋ฒ๋ฆผ)
- key == mid : ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ ์ฐพ์ ์ค๊ฐ๊ฐ ๋ฆฌํด
๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ตฌํ
// ์ด์ง ํ์ ํจ์
public static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // ์ค๊ฐ ์ธ๋ฑ์ค ๊ณ์ฐ
if (arr[mid] == target) {
return mid; // ๊ฐ์ ์ฐพ์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
} else if (arr[mid] < target) {
left = mid + 1; // ํ์ ๋ฒ์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ขํ
} else {
right = mid - 1; // ํ์ ๋ฒ์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ขํ
}
}
return -1; // ๊ฐ์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ -1์ ๋ฐํ
}
์ฌ๊ท๋ก ๊ตฌํ
public static int binarySearch(int[] arr, int left, int right, int target) {
if (right >= left) {
int mid = left + (right - left) / 2; // ์ค๊ฐ ์ธ๋ฑ์ค ๊ณ์ฐ
// ๊ฐ์ ์ฐพ์ ๊ฒฝ์ฐ
if (arr[mid] == target) {
return mid;
}
// ๊ฐ์ด ์ค๊ฐ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ, ์ผ์ชฝ ๋ถ๋ถ์ ํ์
if (arr[mid] > target) {
return binarySearch(arr, left, mid - 1, target);
}
// ๊ฐ์ด ์ค๊ฐ๊ฐ๋ณด๋ค ํฐ ๊ฒฝ์ฐ, ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ ํ์
return binarySearch(arr, mid + 1, right, target);
}
// ๊ฐ์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ
return -1;
}
๋ฐ์ํ
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] DFS์ BFS JAVA (0) | 2024.06.14 |
---|---|
Queue ๊ฐ๋ ์ ๋ฆฌ (0) | 2024.06.11 |
Stack ๊ฐ๋ ์ ๋ฆฌ (0) | 2024.06.11 |
๋ฐฑ์ค 10988 ์๋ฐ ํฐ๋ฆฐ๋๋กฌ์ธ์ง ํ์ธํ๊ธฐ (0) | 2023.12.15 |
๋ฐฑ์ค 2609 java ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์ (0) | 2023.12.11 |