summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java
index 3d6d1128..ce95a390 100644
--- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java
+++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction;
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
@@ -25,9 +25,14 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction;
import java.util.Random;
+import de.lmu.ifi.dbs.elki.data.type.TypeInformation;
+import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
+import de.lmu.ifi.dbs.elki.database.ids.DBID;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
-import de.lmu.ifi.dbs.elki.distance.distancevalue.DoubleDistance;
+import de.lmu.ifi.dbs.elki.database.query.distance.DBIDDistanceQuery;
+import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
+import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.utilities.Util;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
@@ -43,9 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Erich Schubert
*/
-public class RandomStableDistanceFunction extends AbstractDBIDDistanceFunction<DoubleDistance> {
- // TODO: add seed parameter!
-
+public class RandomStableDistanceFunction extends AbstractDatabaseDistanceFunction<DBID> implements DBIDDistanceFunction {
/**
* Static instance
*/
@@ -65,16 +68,16 @@ public class RandomStableDistanceFunction extends AbstractDBIDDistanceFunction<D
}
@Override
- public DoubleDistance distance(DBIDRef o1, DBIDRef o2) {
+ public double distance(DBIDRef o1, DBIDRef o2) {
final int c = DBIDUtil.compare(o1, o2);
if(c == 0) {
- return DoubleDistance.FACTORY.nullDistance();
+ return 0.;
}
// Symmetry
if(c > 0) {
return distance(o2, o1);
}
- return new DoubleDistance(pseudoRandom(seed, Util.mixHashCodes(DBIDUtil.deref(o1).hashCode(), DBIDUtil.deref(o2).hashCode(), (int) seed)));
+ return pseudoRandom(seed, Util.mixHashCodes(DBIDUtil.deref(o1).hashCode(), DBIDUtil.deref(o2).hashCode(), (int) seed));
}
/**
@@ -105,11 +108,6 @@ public class RandomStableDistanceFunction extends AbstractDBIDDistanceFunction<D
}
@Override
- public DoubleDistance getDistanceFactory() {
- return DoubleDistance.FACTORY;
- }
-
- @Override
public String toString() {
return "RandomDistance";
}
@@ -130,6 +128,17 @@ public class RandomStableDistanceFunction extends AbstractDBIDDistanceFunction<D
return (int) seed;
}
+ @Override
+ public TypeInformation getInputTypeRestriction() {
+ return TypeUtil.DBID;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T extends DBID> DistanceQuery<T> instantiate(Relation<T> relation) {
+ return (DistanceQuery<T>) new DBIDDistanceQuery((Relation<DBID>) relation, this);
+ }
+
/**
* Parameterization class.
*