다차원 데이터에 대한 동기를 부여해주는 사용 사례인 **최근접 이웃 탐색(nearest-neighbor search)**을 소개한다.
: 주어진 탐색 목표와 가장 가까운 데이터 점을 찾는다.
실수 범위인 수직 선상에서 최근접 이웃 탐색이라는 맥락에서 두 가지 이점이 있다.
# LinearScanClosestNeighbor 함수는 주어진 배열 A에서 target 값과의 거리가 가장 가까운 요소를 찾습니다.
LinearScanClosestNeighbor(Array: A, Float: target, Function: dist):
# 배열의 길이를 계산
Integer: N = length(A)
# 배열이 비어있는 경우 null 반환
IF N == 0:
return null
# 초기 후보 값으로 배열의 첫 번째 요소를 설정
Float: candidate = A[0]
# 첫 번째 요소와 target 간의 거리를 계산
Float: closest_distance = dist(target, candidate)
Integer: i = 1
# 배열을 순차적으로 탐색하면서 가장 가까운 값을 찾음
WHILE i < N:
# 현재 요소와 target 간의 거리 계산
Float: current_distance = dist(target, A[i])
# 현재 거리가 기존의 최소 거리보다 작다면 업데이트
IF current_distance < closest_distance:
closest_distance = current_distance
candidate = A[i]
# 다음 요소로 이동
i = i + 1
# 가장 가까운 요소 반환
return candidate
// LinearScanClosestNeighbor implementation in JavaScript
function LinearScanClosestNeighbor(array, target, dist) {
const N = array.length;
if (N === 0) return null;
let candidate = array[0];
let closestDistance = dist(target, candidate);
for (let i = 1; i < N; i++) {
const currentDistance = dist(target, array[i]);
if (currentDistance < closestDistance) {
closestDistance = currentDistance;
candidate = array[i];
}
}
return candidate;
}
// Example usage
const array = [1, 3, 7, 8, 10];
const target = 6;
// Distance function: absolute difference
const distance = (a, b) => Math.abs(a - b);
const closestNeighbor = LinearScanClosestNeighbor(array, target, distance);
console.log(`The closest neighbor to ${target} is ${closestNeighbor}`);