β곡λΆνκ² λ κ³κΈ°
β‘οΈ λ€μ μκ³ λ¦¬μ¦ μ€ν°λ μ£Όμ μΈ μ΄λΆ νμμ λν΄μ μμ΅
βοΈκ³΅λΆν λ΄μ©
1οΈβ£ μ΄λΆνμμ΄λ?
β‘οΈ μμ°¨μ νμκ³Ό λΉκ΅ν΄λ³΄λ©΄ μ νν μ μ μλ€.
β μμ°¨μ νμ (Sequential Search)
β‘οΈ μ²μλΆν° νλνλμ© λΉκ΅ν΄κ°λ©° λκΉμ§ νμνλ κ²μ΄λ€. μ΅μ
μ κ²½μ° λ§μ§λ§ λ°μ΄ν° κΉμ§ νμνλ―λ‘ O(n) μ μκ° λ³΅μ‘λλ₯Ό κ°μ§κ³ μλ€.
β‘ μ΄λΆ νμ (Binary Search)
β‘οΈ mid κ°μ ꡬν΄μ κ³μν΄μ νμ λ²μλ₯Ό λ°μ© μ€μ¬λκ°λ©° νμνλ κ²μ΄λ€. μ΅μ
μ κ²½μ° Tree ꡬ쑰μμ λ§μ§λ§ leaf κ°κΉμ§ λ΄λ €κ°μΌλ‘ O(logN) μ μκ° λ³΅μ‘λλ₯Ό κ°μ§κ³ μλ€.
2οΈβ£ μ΄λΆνμ κ³Όμ
β μ²μ λ²μλ index 0 μμ λκΉμ§ μ΄λ€. μ΄ λμ mid = λ°°μ΄μ κΈΈμ΄ / 2
β‘ mid κ°κ³Ό μ°Ύλ κ°μ λΉκ΅νλ€
- μ°Ύλ κ°κ³Ό mid κ°μ΄ κ°λ€λ©΄ μ’ λ£
- μ°Ύλ κ°μ΄ mid κ°λ³΄λ€ μμΌλ©΄ right = mid-1 λ‘ νκ³ λ€μ mid κ° κ³μ°
- μ°Ύλ κ°μ΄ md κ°λ³΄λ€ ν¬λ©΄ left = mid+1 λ‘ νκ³ λ€μ mid κ° κ³μ°
β’ λ§μ½ left > right κ° λλ©΄ κ°μ μ°Ύμ§ λͺ»ν κ²μ΄λ―λ‘ μ’
λ£
3οΈβ£ μ΄λΆνμ ꡬν
β‘οΈ μ΄λΆνμ ꡬν λ°©λ²μλ λ°λ³΅λ¬Έκ³Ό μ¬κ·κ° μλ€.
β λ°λ³΅λ¬Έ
// λ°λͺ©λ¬Έμ ν΅ν ꡬν
public static int BinarySearch_Loop(int[] arr, int n) {
// int arr[] : μ£Όμ΄μ§ λ°°μ΄
// int n : μ°Ύκ³ μ νλ κ°
// κ³Όμ β : μ²μ left=0 & λ right=arr.length-1;
int left = 0;
int right = arr.length-1;
int mid; // μ€κ°κ° μ μΈ
int value;
while (right >= left) {
mid = (left + right) / 2;
value = arr[mid];
if(value > n) right = mid-1;
else if(value <n) left = mid+1;
else return mid; // μ€κ°κ°
}
return -1; // μ°Ύλ κ° μμ
}
β‘ μ¬κ·
public static boolean BSearchRecursive(int[] arr, int n, int left, int right) {
/*
1. arr : μ£Όμ΄μ§ λ°°μ΄
2. n : μ°Ύκ³ μ νλ κ°
3. left : μΌμͺ½ λ index
4. right : μ€λ₯Έμͺ½ λ index
*/
// μ€μ§ 쑰건
if(left > right) return false;
int mid = (left + right) / 2;
if (arr[mid] < n) // (1) μ°Ύκ³ μνλ κ°λ³΄λ€ μμ κ²½μ° : μ€λ₯Έμͺ½μΌλ‘ μ΄λ
return BSearchRecursive(arr, n, mid +1, right);
else if (arr[mid] > n) (2) μ°Ύκ³ μνλ κ°λ³΄λ€ ν° κ²½μ° : μΌμͺ½μΌλ‘ μ΄λ
return BSearchRecursive(arr, n, left, mid - 1);
else
return true; // κ°μ΄ μ‘΄μ¬νλ κ²½μ°
}
βοΈ μ μ© μμΌλ³Έ μμ
π§ μΆκ°λ‘ κΆκΈν μ
'Algorithm π€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| (μκ³ λ¦¬μ¦ μ€ν°λ) (Programmers) μ¬ μ°κ²°νκΈ° ποΈ (0) | 2023.07.20 |
|---|---|
| (μκ³ λ¦¬μ¦ μ€ν°λ) (Programmers) νλ Έμ΄μ ν π° (0) | 2023.05.23 |
| κ·Έλνπ (Graph) (0) | 2023.03.21 |
| λμ κ³νλ²ποΈ (Dynamic Programming) (0) | 2023.03.13 |
| κΉμ΄ μ°μ νμ (DFS) & λλΉ μ°μ νμ (BFS ) (0) | 2023.01.15 |