μ΄μ§ νμ(Binary Search) μκ³ λ¦¬μ¦ :
μμκ° μ€λ¦μ°¨μ λλ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬(sort)λ λ°°μ΄μμ μνλ ν€ κ°μ κ°λ μμλ₯Ό λ§λ λ κΉμ§ νμ.
μ ν νμλ³΄λ€ μ’ λ λΉ λ₯΄κ² νμ κ°λ₯
κ° 53μ νμ
1. λ°°μ΄μ μ€μ Binary[5] μ λΉκ΅, 53 > Binary[5] => Binary[5] μ΄μ λ°°μ΄ νμ λμμμ μ μΈ
2. Binary[6] ~ Binary[10]μ μ€μ Binary[8] κ³Ό λΉκ΅, 53 < Binary[8] => Binary[8] μ΄ν λ°°μ΄ νμ λμμμ μ μΈ
3. Binary[6] ~ Binary[7]μ μ€μ Binary[6] κ³Ό λΉκ΅, 53 == Binary[6] => νμ μ±κ³΅
맨 μμ μΈλ±μ€λ₯Ό pl, 맨 λμ μΈλ±μ€λ₯Ό pr, μ€μ μΈλ±μ€λ₯Ό pcλΌκ³ ν λ νμ μμμ plμ 0, prμ n-1, pcλ (n-1)/2λ‘ μ΄κΈ°ν.
κ²μ¬ν μμλ₯Ό νλμ© μ μΈμν€λ μ ν νμκ³Ό λ€λ₯΄κ² μ΄μ§ νμμ νμμ ν λ¨κ³μ© μ§νν λ λ§λ€ νμ λ²μκ° λ°μΌλ‘ μ€μ΄λ λ€.
Binary[pc]μ ν€ κ°μ λΉκ΅νμ¬ κ°μΌλ©΄ νμ μ±κ³΅
1.Binary[pc] < key μΌ λ
Binary[pl] ~ Binary[pc]λ keyλ³΄λ€ μμ κ²μ΄ λΆλͺ νλ―λ‘ νμ λ²μλ₯Ό μ€μ μμ λ€μͺ½μ Binary[pc+1] ~ Binary[pr] λ‘ μμ , plμ pc+1λ‘ μ λ°μ΄νΈ
2. BSArray[pc] > key μΌ λ
Binary[pc] ~ Binary[pr]λ keyλ³΄λ€ ν° κ²μ΄ λΆλͺ νλ―λ‘ νμ λ²μλ₯Ό μ€μ μμ μμͺ½μ Binary[pl] ~ Binary[pc-1] λ‘ μμ , prμ pc-1λ‘ μ λ°μ΄νΈ
μ΄μ§ νμμ μ’ λ£ μ‘°κ±΄μ λ€μκ³Ό κ°λ€.
쑰건 1 : Binary[pc]μ keyκ° μΌμΉν κ²½μ° (νμ μ±κ³΅)
쑰건 2 : νμ λ²μκ° λμ΄μ μ‘΄μ¬νμ§ μλ κ²½μ° (νμ μ€ν¨)
λ°°μ΄μ μμ μκ° nκ° μΌ λ μ΄μ§ νμμ νμμ λ°λ³΅ν λ λ§λ€ νμ λ²μκ° μ λ°μ΄ λλ―λ‘ νμμ νμν λΉκ΅ νμμ νκ· κ°μ log nν μ΄λ€. => O(log n)
λ©μλ binSearch() : λ°°μ΄ a μ μ²μλΆν° λκΉμ§ μ΄ nκ°μ μμ μ€μμ κ°μ΄ keyμΈ μμλ₯Ό μ΄μ§ νμ
맀κ°λ³μ : int[] a, int n, int key
λ°νκ° : ν€ κ°μ΄ μ¬λ¬κ° μ‘΄μ¬ν κ²½μ°, μ²μ λ°κ²¬ν μμμ μΈλ±μ€λ₯Ό, ν€ κ°μ΄ μ‘΄μ¬νμ§ μμΌλ©΄ -1μ λ°ν
쑰건 1 : a[pc] == key (νμ μ±κ³΅)
쑰건 2 : pl > pr (νμ λ²μκ° μ‘΄μ¬νμ§ μμ) (νμ μ€ν¨)
int binSearch(int[]a, int n, int key) {
int pl = 0;
int pr = n - 1;
do {
int pc = (pl + pr) / 2;
if(a[pc] == key) {
return pc;
} else if (a[pc] < key) {
pl = pc + 1;
} else {
pr = pc - 1;
}
} while(pl <= pr);
return -1;
}
μ΄μ§ νμ Binary Search : O(logN)