algorithm - making use of neighbour finding and symmetry for runtime performance? -
suppose have set of 3d points {x[i], i=1,...,n}
, ,
i have array a
, each entry a[i]
of array corresponds measurement of point x[i]
. if 2 points x[i]
, x[j]
within fixed distance d
each other, add constant f(x[i],x[j])
, computed function f
, both of entries a[i]
, a[j]
in array.
a direct way compute entries of array a
(in pseudocode)
for = 1,...,n a[i] = 0 = 1,...,n j = i,...,n if dist(x[i],x[j]) < d tmp = f(x[i],x[j]) a[i]+= tmp a[j]+= tmp
if have function find_nb(x[i])
, takes point x[i]
argument , returns set of points within fixed distance d
point x[i]
, including point x[i]
itself, , number of them, wonder how function can improve run time performance (such time and/or space) of above algorithm?
following way thought of:
for = 1,...,n a[i] = 0 = 1,...,n (nbs, num) = find_nb(x[i]) j = 1,...,num a[i]+=f(x[i],x[nbs[j]])
but doesn't make use of symmetry between every 2 points, i.e. have calculate f(x[i],x[nbs[j]])
twice, fora[i]
, a[nbs[j]]
. waste. can improved?
thanks!
first, there's bug in code: when = j, add tmp twice, both [i] , [j] same array element.
quite function doesn't return set of points, set of indices of points, improvement quite simple:
for = 1,...,n (nbs, num) = find_nb(x[i]) k = 1,...,num j = nbs [k] if (j >= i) tmp = f (x [i], x [j]) a[i]+=tmp if (j != i) [j] += tmp
Comments
Post a Comment