В раздумьях

Apr 12, 2010 23:30

можно ли этот алгоритм обобщить на 2 измерения/3 измерения?
если нет, есть ли что-то что выполняет ту же функцию?

module Closest where
import MergeSort

proxMerge [] l _ = l
proxMerge l [] _ = l
proxMerge a@(x:xs) b@(y:ys) x0 =
if    x0-x < y-x0
then x:(proxMerge xs b x0)
closest l i = proxMerge (reverse (fst tuple)) (snd tuple) (l!!i)
where tuple = splitAt i asl

where asl = mergeSort l

или вот на Сях :

float* closest(float x[count], int x0)
{
    float result[count];
    int left=x0-1, right=x0+1, i;
    for( i=0;   left>=0 && right>=0;    i++ )
    {
        if( x[x0]-x[left] < x[right]-x[x0] )
            result[i]=x[left--];
        else
            result[i]=x[right++];
    }

}

int main()
{
    float x[count];
    sort(x);
    int someindex=31, i;
    for(i=count;i;i--) printf("%f\t", closest(x, someindex)[i]);
    return 0;
}
Previous post Next post
Up