“보초법(Sentinel Method)”은 알고리즘에서 흔히 사용되는 기법 중 하나로, 보통 순차 검색이나 정렬 등의 알고리즘에서 효율을 높이기 위해 사용됩니다.
보초법의 기본 아이디어는 다음과 같습니다:
- 배열이나 리스트의 끝에 특정 값을 추가(보초)하여 반복문에서의 경계 검사를 줄입니다.
- 이를 통해 반복문의 조건문에서의 비용을 줄여 알고리즘의 전체 실행 시간을 단축시킵니다.
예를 들어, 순차 검색 알고리즘에 보초법을 적용해보겠습니다.
// 보초법을 사용하지 않은 경우
function linearSearch(array, key) {
for (let i = 0; i < array.length; i++) {
if (array[i] == key) {
return i;
}
}
return -1;
}
// 보초법을 사용한 경우
function linearSearchWithSentinel(array, key) {
array.push(key); // 보초 추가
let i = 0;
while (array[i] != key) {
i++;
}
array.pop(); // 보초 제거
if (i != array.length) {
return i;
} else {
return -1;
}
}
위 두 함수는 동일한 기능을 수행하지만, 보초법을 사용한 경우에는 반복문 안에서 배열의 길이를 확인하는 조건 검사를 하지 않아도 됩니다. 이는 특히 대량의 데이터를 처리할 때 유의미한 성능 향상을 가져올 수 있습니다.
그러나, 보초법을 사용할 때는 보초가 원래의 데이터에 영향을 주지 않도록 주의해야 합니다. 위의 예제에서는 함수가 종료되기 전에 보초를 제거하여 원래의 배열을 유지하고 있습니다.