728x90
๐ section07 - 10 - ์ด๋ถ๊ฒ์
์ด๋ถ๊ฒ์์ ์๊ฐ ๋ณต์ก๋๊ฐ O(logN)์ผ๋ก ์ ํ ๊ฒ์์ธ O(N)๋ณด๋ค ๋น ๋ฅธ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋ ํจ๊ณผ์ ์ธ๋ฐ, ์๋ฅผ ๋ค์ด 1,000,000๊ฐ์ ๋ฐ์ดํฐ์์ ํน์ ๊ฐ์ ์ฐพ๋๋ค๊ณ ๊ฐ์ ํ๋ฉด, ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด ์ ํ์ ์ผ๋ก ํ์ํ๋ฉด ์ต์
์ ๊ฒฝ์ฐ ๋ฐฑ๋ง๋ฒ์ ๋์์ผ ํ์ง๋ง ์ด์งํ์(binarySearch)์ ์ด์ฉํ๋ฉด ์ต๋ 11๋ฒ๊น์ง ๋๋ฉด ๋๋ค. ํ์ง๋ง, ์ด์งํ์์ ์ค๋ฆ์ฐจ์ ํน์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด์์ด์ผ ์ฐพ์ ์ ์๋ ์ ์ ์กฐ๊ฑด์ด ์๋ค.
while๋ฌธ์ ๋ฒ์๋lt<=rt์ธ๋ฐ,lt์rt๊ฐ ๊ฐ์ ๋๊น์ง ๋๊ณ ๊ทธlt๊ฐrt๋ณด๋ค ์ปค์ง ๊ฒฝ์ฐ๋ ํ์์ ์ข ๋ฃํ๋ค.mid๊ฐ์ ๊ฒฝ์ ํ๋ค.target์ดarr[mid]๋ณด๋ค ์ผ์ชฝ์ ์์ ๊ฒฝ์ฐ ํ์ฌmid์ค๋ฅธ์ชฝ์๋ ๋ด๊ฐ ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ์์ผ๋ฏ๋ก ๋ค์rt๋ฅผmid-1๋ก ์ฌ์ค์ ํ๋ค.target์ดarr[mid]๋ณด๋ค ์ค๋ฅธ์ชฝ์ ์์ ๊ฒฝ์ฐ ํ์ฌmid์ผ์ชฝ์๋ ๋ด๊ฐ ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ์์ผ๋ฏ๋กlt๋ฅผmid+1๋ก ์ฌ์ค์ ํ๋ค.
728x90
let arr = [23, 87, 65, 12, 57, 32, 99, 81];
let m = 32;
console.log(binarySearch(arr, m));
๐๐ฝ 3
function binarySearch(arr, target){
let lt = 0;
let rt = arr.length - 1;
arr.sort((a, b) => a - b);
while (lt <= rt) {
let mid = Math.floor((lt + rt) / 2);
if (arr[mid] === target) return mid + 1;
else if (arr[mid] > target) rt = mid-1;
else lt = mid+1;
}
}๋ฐ์ํ
๋๊ธ