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;
}