Learn R Programming

protViz (version 0.2.06)

findNN: find index of nearest neighbor

Description

Given a vector of sorted double values vec of size n and a vector of m query objects q.

findNN determines for each element q[i] in q the nearest neighbor index o so that the following remains true:

there is no element k with 1 $\le$ k $\le$ n and k is not o so that

abs(vec[k] - q[i]) < abs(vec[o] - q[i]).

Usage

findNN(q, vec, check)

Arguments

q
a double vector which can be considered as query objects.
vec
a sorted double vector which can be considered as a data base.
check
boolean enables test if vec is sorted. default is FALSE

Details

The internal algorithm of findNN is implemented as binary search. findNN has $O(m * log(n))$ time complexity.

Examples

Run this code
(NNidx <- findNN(q<-c(1, 1.0001, 1.24, 1.26), DB<-seq(1,5,by=0.25)))
    (NNidx == c(1,1,2,2))

    DB<-sort(rnorm(100, mean=100, sd=10))

    # should be 0
    unique(DB[findNN(DB,DB)] - DB)

    q<-rnorm(100, mean=100)

    idx.NN<-findNN(q,DB)
    hist(DB[findNN(q,DB)] - q)

    # definition of findNN holds
    i<-1:5
    findNN(3.5, i)

    i<-1:6
    findNN(3.5, i)

Run the code above in your browser using DataLab