ěëŁ ęľŹěĄ°ě ě°ě° : ě˝ę¸° / ę˛ě / ě˝ě / ěě
ěëŁ ęľŹěĄ°ě ěę° ëłľěĄë
: 죟ě´ě§ ě°ě°ě 깸댏ë ë¨ęł ě
ě˝ę¸° : íě 1ë¨ęł
ěť´í¨í°ë ë°°ě´ě 첍 ë˛ě§¸ ě¸ëąě¤ě ëŠëŞ¨ëŚŹ 죟ě뼟 ěęł ě기 ë돸ě´ë¤
ę˛ě : ěľë(맨 ë¤ ę˛ě) Në¨ęł
ě˝ě
ěľě(맨 ë¤ ě˝ě ) 1ë¨ęł
ěľë(맨 ě ě˝ě ) N + 1 ë¨ęł
ěě : ěľë(맨 ě ěě ) N ë¨ęł
ě¤ëłľ ę°ě íěŠíě§ ěë
ěëŁ ęľŹěĄ°
ě˘
ëĽę° ë¤ěíě§ë§, ěě ëĄë 'ë°°ě´ ę¸°ë° ě§íŠ'ě ë¤ëŁ¸
ě˝ę¸°, ę˛ě, ěě : ë°°ě´ęłź ëěźí ë¨ęłëĽź ęą°ěłěź íë¤
ě˝ě
ěľě(맨 ë¤ ě˝ě ) N + 1 ë¨ęł
먟ě , 기쥴 ě§íŠě ě¤ëłľ ę°ě´ ěëě§ ę˛ěíë¤. (Në¨ęł)
ě¤ëłľ ę°ě´ ěěźëŠ´, 맨 ë¤ě ëŁęł ě íë ę°ě ě˝ě íë¤. (1ë¨ęł)
ěľë(맨 ě ě˝ě ) 2N + 1 ë¨ęł
먟ě , 기쥴 ě§íŠě ě¤ëłľ ę°ě´ ěëě§ ę˛ěíë¤. (Në¨ęł)
ě¤ëłľ ę°ě´ ěěźëŠ´, 기쥴 ę°ë¤ě ě¤ëĽ¸ěŞ˝ěźëĄ í ěš¸ěŠ ěŽę¸´ë¤. (Në¨ęł)
맨 ěě ëŁęł ě íë ę°ě ě˝ě íë¤. (1ë¨ęł)
ěë 늴ěěë ě§íŠëł´ë¤ ë°°ě´ě´ í¨ě¨ě ě´ë¤.
꡸ëŹë, ě¤ëłľ ë°ě´í°ę° ěě´ěź í ëë ě§íŠě ěŹěŠí´ěź íë¤.
ě í댏ěźě´ě ě ě꾏ěŹíě 먟ě ëśěí í, ě´ë¤ ěëŁ ęľŹěĄ°ę° ë ě íŠíě§ ę˛°ě í´ěź íë¤.
ěęł ëŚŹěŚ : íšě ě°ě°ě íě´ëę°ë ě ě°¨
p.46
RubyëĄ ęľŹíë ě˝ë â JavaScriptëĄ ěě
function linearSearch (arr, value) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] > value) {
return null;
} else if (arr[i] === value) {
return value;
}
}
return null;
}
const arr1 = [2, 4, 6, 8, 10];
console.log(linearSearch(arr1, 6)); // 6
p.51
RubyëĄ ęľŹíë ě˝ë â JavaScriptëĄ ěě
íëë° ě´ë ę˛ íë ę˛ ë§ë 깸ęš
function binarySearch (arr, value) {
// ěíě (ě˛ě ě¸ëąě¤)ęłź ííě (ë§ě§ë§ ě¸ëąě¤)
let lowerBound = 0;
let upperBound = arr.length - 1;
while(lowerBound <= upperBound) {
// ě¤ę° ě§ě ě¸ëąě¤
const midpoint = (function searchMidpoint () {
if ((lowerBound + upperBound) % 2 === 0) {
return (lowerBound + upperBound) / 2;
} else {
return Math.floor((lowerBound + upperBound) / 2);
}
})();
// ě¤ę° ě§ě ę°
const valueAtMidpoint = arr[midpoint];
// ě°žěźë ¤ë ę°ęłź ě¤ę° ě§ě ę° ëšęľ
if (value < valueAtMidpoint) {
upperBound = midpoint - 1;
} else if (value > valueAtMidpoint) {
lowerBound = midpoint + 1;
} else {
return midpoint;
}
}
// ě°žěźë ¤ë ę°ě ę˛°ęľ ë°°ě´ěě ě°žě§ ëŞťí늴 null ë°í
return null;
}
// ě ěŠ ěě
const arr1 = [1, 2, 3, 4, 5, 6, 7];
console.log(binarySearch(arr1, 6)); // 5