node swapping algorithm

"Daniel Cheng" <[email protected]>
Newsgroups gmane.network.freenet.technical
Message-ID <[email protected]>
Hi list,

On LocationManager#shouldSwap(), I wonder if we should use a geometric
mean instead of just multiplying them together.
Let's see the current implement:

 748         double A = 1.0;
 749         for(int i=0;i<friendLocs.length;i++) {
 750             if(Math.abs(friendLocs[i] - myLoc) <=
Double.MIN_VALUE*2) continue;

#1. some friends are skipped.
     this number should be small -- my friends shouldn't be sooo close to me.
     rare, but not impossible (?)

 751             A *= Location.distance(friendLocs[i], myLoc);
 752         }
 753         for(int i=0;i<hisFriendLocs.length;i++) {
 754             if(Math.abs(hisFriendLocs[i] - hisLoc) <=
Double.MIN_VALUE*2) continue;

#2. again some friends are skipped. (same as #1)

 755             A *= Location.distance(hisFriendLocs[i], hisLoc);
 756         }
 757
 758         // B = the same, with our two values swapped
 759         double B = 1.0;
 760         for(int i=0;i<friendLocs.length;i++) {

(      never mention his number of friends may not be the same as mine
       should we use for(int i=0;i<friendLocs.length &&
;i<hisFriendLocs.length ; i++)  ? )

 761             if(Math.abs(friendLocs[i] - hisLoc) <=
Double.MIN_VALUE*2) continue;

#3. skip yet other friends...
      but this time, we compare my friend's location with his location ..
      I have him as my friend, so this is skipped _at least_ once.

      The number of friends skipped here is not the same as those in #1 and #3..
       i.e.  A and B are calculated using different number of samples.

       as Location.distance() < 1.0 ,  the more round you multiply,
the less the value.


 762             B *= Location.distance(friendLocs[i], hisLoc);
 763         }
 764         for(int i=0;i<hisFriendLocs.length;i++) {
 765             if(Math.abs(hisFriendLocs[i] - myLoc) <=
Double.MIN_VALUE*2) continue;
 766             B *= Location.distance(hisFriendLocs[i], myLoc);
 767         }

[...]

 771         if(A>B) return true;

#4   And now, we compare A and B. This is unfair!


Regards,
Daniel Cheng
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.