summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java66
1 files changed, 29 insertions, 37 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java
index 60791159..d1f0485c 100644
--- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java
+++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2013
+ Copyright (C) 2014
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -23,14 +23,13 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import java.util.BitSet;
-
import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
+import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
/**
- * Provides a distance function that computes the Euclidean distance between
- * feature vectors only in specified dimensions.
+ * Maximum distance function between {@link NumberVector}s only in specified
+ * dimensions.
*
* @author Elke Achtert
*/
@@ -40,29 +39,20 @@ public class SubspaceMaximumDistanceFunction extends SubspaceLPNormDistanceFunct
*
* @param dimensions Selected dimensions
*/
- public SubspaceMaximumDistanceFunction(BitSet dimensions) {
+ public SubspaceMaximumDistanceFunction(long[] dimensions) {
super(1.0, dimensions);
}
- /**
- * Provides the Euclidean distance between two given feature vectors in the
- * selected dimensions.
- *
- * @param v1 first feature vector
- * @param v2 second feature vector
- * @return the Euclidean distance between two given feature vectors in the
- * selected dimensions
- */
@Override
- public double doubleDistance(NumberVector<?> v1, NumberVector<?> v2) {
- if (v1.getDimensionality() != v2.getDimensionality()) {
+ public double distance(NumberVector v1, NumberVector v2) {
+ if(v1.getDimensionality() != v2.getDimensionality()) {
throw new IllegalArgumentException("Different dimensionality of FeatureVectors\n " + "first argument: " + v1 + "\n " + "second argument: " + v2);
}
double agg = 0.;
- for (int d = dimensions.nextSetBit(0); d >= 0; d = dimensions.nextSetBit(d + 1)) {
+ for(int d = BitsUtil.nextSetBit(dimensions, 0); d >= 0; d = BitsUtil.nextSetBit(dimensions, d + 1)) {
double v = Math.abs(v1.doubleValue(d) - v2.doubleValue(d));
- if (v > agg) {
+ if(v > agg) {
agg = v;
}
}
@@ -70,24 +60,25 @@ public class SubspaceMaximumDistanceFunction extends SubspaceLPNormDistanceFunct
}
@Override
- protected double doubleMinDistObject(SpatialComparable mbr, NumberVector<?> v) {
- if (mbr.getDimensionality() != v.getDimensionality()) {
+ protected double minDistObject(SpatialComparable mbr, NumberVector v) {
+ if(mbr.getDimensionality() != v.getDimensionality()) {
throw new IllegalArgumentException("Different dimensionality of objects\n " + "first argument: " + mbr.toString() + "\n " + "second argument: " + v.toString());
}
double agg = 0.;
- for (int d = dimensions.nextSetBit(0); d >= 0; d = dimensions.nextSetBit(d + 1)) {
+ for(int d = BitsUtil.nextSetBit(dimensions, 0); d >= 0; d = BitsUtil.nextSetBit(dimensions, d + 1)) {
final double value = v.doubleValue(d);
final double omin = mbr.getMin(d);
final double diff1 = omin - value;
- if (diff1 > 0.) {
- if (diff1 > agg) {
+ if(diff1 > 0.) {
+ if(diff1 > agg) {
agg = diff1;
}
- } else {
+ }
+ else {
final double omax = mbr.getMax(d);
final double diff2 = value - omax;
- if (diff2 > agg) {
+ if(diff2 > agg) {
agg = diff2;
}
}
@@ -96,24 +87,25 @@ public class SubspaceMaximumDistanceFunction extends SubspaceLPNormDistanceFunct
}
@Override
- public double doubleMinDist(SpatialComparable mbr1, SpatialComparable mbr2) {
- if (mbr1.getDimensionality() != mbr2.getDimensionality()) {
+ public double minDist(SpatialComparable mbr1, SpatialComparable mbr2) {
+ if(mbr1.getDimensionality() != mbr2.getDimensionality()) {
throw new IllegalArgumentException("Different dimensionality of objects\n " + "first argument: " + mbr1.toString() + "\n " + "second argument: " + mbr2.toString());
}
double agg = 0.;
- for (int d = dimensions.nextSetBit(0); d >= 0; d = dimensions.nextSetBit(d + 1)) {
+ for(int d = BitsUtil.nextSetBit(dimensions, 0); d >= 0; d = BitsUtil.nextSetBit(dimensions, d + 1)) {
final double max1 = mbr1.getMax(d);
final double min2 = mbr2.getMin(d);
- if (max1 < min2) {
+ if(max1 < min2) {
double v = min2 - max1;
- if (v > agg) {
+ if(v > agg) {
agg = v;
}
- } else {
+ }
+ else {
final double min1 = mbr1.getMin(d);
final double max2 = mbr2.getMax(d);
double v = min1 - max2;
- if (v > agg) {
+ if(v > agg) {
agg = v;
}
}
@@ -122,11 +114,11 @@ public class SubspaceMaximumDistanceFunction extends SubspaceLPNormDistanceFunct
}
@Override
- public double doubleNorm(NumberVector<?> obj) {
+ public double norm(NumberVector obj) {
double agg = 0.;
- for (int d = dimensions.nextSetBit(0); d >= 0; d = dimensions.nextSetBit(d + 1)) {
+ for(int d = BitsUtil.nextSetBit(dimensions, 0); d >= 0; d = BitsUtil.nextSetBit(dimensions, d + 1)) {
double v = Math.abs(obj.doubleValue(d));
- if (v > agg) {
+ if(v > agg) {
agg = v;
}
}
@@ -140,7 +132,7 @@ public class SubspaceMaximumDistanceFunction extends SubspaceLPNormDistanceFunct
*
* @apiviz.exclude
*/
- public static class Parameterizer extends AbstractDimensionsSelectingDoubleDistanceFunction.Parameterizer {
+ public static class Parameterizer extends AbstractDimensionsSelectingDistanceFunction.Parameterizer {
@Override
protected SubspaceMaximumDistanceFunction makeInstance() {
return new SubspaceMaximumDistanceFunction(dimensions);