diff options
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.java | 35 |
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. * |