diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/query/distance')
10 files changed, 147 insertions, 143 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDatabaseDistanceQuery.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDatabaseDistanceQuery.java index f530b72a..2edd9d0b 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDatabaseDistanceQuery.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDatabaseDistanceQuery.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database.query.distance; 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,10 +23,8 @@ package de.lmu.ifi.dbs.elki.database.query.distance; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -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.relation.Relation; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; /** * Run a database query in a database context. @@ -34,9 +32,8 @@ import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; * @author Erich Schubert * * @param <O> Database object type. - * @param <D> Distance result type. */ -public abstract class AbstractDatabaseDistanceQuery<O, D extends Distance<D>> extends AbstractDistanceQuery<O, D> { +public abstract class AbstractDatabaseDistanceQuery<O> extends AbstractDistanceQuery<O> { /** * Constructor. * @@ -47,25 +44,25 @@ public abstract class AbstractDatabaseDistanceQuery<O, D extends Distance<D>> ex } @Override - public D distance(O o1, DBIDRef id2) { - if(o1 instanceof DBID) { - return distance((DBID) o1, id2); + public double distance(O o1, DBIDRef id2) { + if(o1 instanceof DBIDRef) { + return distance((DBIDRef) o1, id2); } throw new UnsupportedOperationException("This distance function is only defined for known DBIDs."); } @Override - public D distance(DBIDRef id1, O o2) { - if(o2 instanceof DBID) { - return distance(id1, (DBID) o2); + public double distance(DBIDRef id1, O o2) { + if(o2 instanceof DBIDRef) { + return distance(id1, (DBIDRef) o2); } throw new UnsupportedOperationException("This distance function is only defined for known DBIDs."); } @Override - public D distance(O o1, O o2) { - if(o1 instanceof DBID && o2 instanceof DBID) { - return distance((DBID) o1, (DBID) o2); + public double distance(O o1, O o2) { + if(o1 instanceof DBIDRef && o2 instanceof DBIDRef) { + return distance((DBIDRef) o1, (DBIDRef) o2); } throw new UnsupportedOperationException("This distance function is only defined for known DBIDs."); } diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDistanceQuery.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDistanceQuery.java index 933bd0d3..8f35eb58 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDistanceQuery.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDistanceQuery.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database.query.distance; 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 @@ -24,9 +24,7 @@ package de.lmu.ifi.dbs.elki.database.query.distance; */ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; -import de.lmu.ifi.dbs.elki.database.query.AbstractDataBasedQuery; import de.lmu.ifi.dbs.elki.database.relation.Relation; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; /** * A distance query serves as adapter layer for database and primitive @@ -35,16 +33,21 @@ import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; * @author Erich Schubert * * @param O Input object type - * @param D Distance result type */ -public abstract class AbstractDistanceQuery<O, D extends Distance<D>> extends AbstractDataBasedQuery<O> implements DistanceQuery<O, D> { +public abstract class AbstractDistanceQuery<O> implements DistanceQuery<O> { + /** + * The data to use for this query + */ + final protected Relation<? extends O> relation; + /** * Constructor. * * @param relation Relation to use. */ public AbstractDistanceQuery(Relation<? extends O> relation) { - super(relation); + super(); + this.relation = relation; } /** @@ -55,7 +58,7 @@ public abstract class AbstractDistanceQuery<O, D extends Distance<D>> extends Ab * @return the distance between the two objects specified by their object ids */ @Override - public abstract D distance(DBIDRef id1, DBIDRef id2); + public abstract double distance(DBIDRef id1, DBIDRef id2); /** * Returns the distance between the two objects specified by their object ids. @@ -65,7 +68,7 @@ public abstract class AbstractDistanceQuery<O, D extends Distance<D>> extends Ab * @return the distance between the two objects specified by their object ids */ @Override - public abstract D distance(O o1, DBIDRef id2); + public abstract double distance(O o1, DBIDRef id2); /** * Returns the distance between the two objects specified by their object ids. @@ -75,7 +78,7 @@ public abstract class AbstractDistanceQuery<O, D extends Distance<D>> extends Ab * @return the distance between the two objects specified by their object ids */ @Override - public abstract D distance(DBIDRef id1, O o2); + public abstract double distance(DBIDRef id1, O o2); /** * Returns the distance between the two objects specified by their object ids. @@ -85,40 +88,10 @@ public abstract class AbstractDistanceQuery<O, D extends Distance<D>> extends Ab * @return the distance between the two objects specified by their object ids */ @Override - public abstract D distance(O o1, O o2); - - @Override - public D getDistanceFactory() { - return getDistanceFunction().getDistanceFactory(); - } + public abstract double distance(O o1, O o2); - /** - * Provides an infinite distance. - * - * @return an infinite distance - */ - @Override - public D infiniteDistance() { - return getDistanceFunction().getDistanceFactory().infiniteDistance(); - } - - /** - * Provides a null distance. - * - * @return a null distance - */ - @Override - public D nullDistance() { - return getDistanceFunction().getDistanceFactory().nullDistance(); - } - - /** - * Provides an undefined distance. - * - * @return an undefined distance - */ @Override - public D undefinedDistance() { - return getDistanceFunction().getDistanceFactory().undefinedDistance(); + public Relation<? extends O> getRelation() { + return relation; } }
\ No newline at end of file diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/DBIDDistanceQuery.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/DBIDDistanceQuery.java index e619bc57..b9966b53 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/distance/DBIDDistanceQuery.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/DBIDDistanceQuery.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database.query.distance; 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 @@ -27,7 +27,6 @@ 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.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.DBIDDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; /** * Run a distance query based on DBIDs @@ -36,14 +35,12 @@ import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; * * @apiviz.landmark * @apiviz.uses DBIDDistanceFunction - * - * @param <D> Distance result type. */ -public class DBIDDistanceQuery<D extends Distance<D>> extends AbstractDatabaseDistanceQuery<DBID, D> { +public class DBIDDistanceQuery extends AbstractDatabaseDistanceQuery<DBID> { /** * The distance function we use. */ - final protected DBIDDistanceFunction<D> distanceFunction; + final protected DBIDDistanceFunction distanceFunction; /** * Constructor. @@ -51,13 +48,13 @@ public class DBIDDistanceQuery<D extends Distance<D>> extends AbstractDatabaseDi * @param relation Database to use. * @param distanceFunction Our distance function */ - public DBIDDistanceQuery(Relation<DBID> relation, DBIDDistanceFunction<D> distanceFunction) { + public DBIDDistanceQuery(Relation<DBID> relation, DBIDDistanceFunction distanceFunction) { super(relation); this.distanceFunction = distanceFunction; } @Override - public D distance(DBIDRef id1, DBIDRef id2) { + public double distance(DBIDRef id1, DBIDRef id2) { if(id1 == null) { throw new UnsupportedOperationException("This distance function can only be used for objects stored in the database."); } @@ -68,7 +65,7 @@ public class DBIDDistanceQuery<D extends Distance<D>> extends AbstractDatabaseDi } @Override - public DBIDDistanceFunction<D> getDistanceFunction() { + public DBIDDistanceFunction getDistanceFunction() { return distanceFunction; } }
\ No newline at end of file diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/DBIDRangeDistanceQuery.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/DBIDRangeDistanceQuery.java new file mode 100644 index 00000000..d5457dd5 --- /dev/null +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/DBIDRangeDistanceQuery.java @@ -0,0 +1,74 @@ +package de.lmu.ifi.dbs.elki.database.query.distance; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2014 + Ludwig-Maximilians-Universität München + Lehr- und Forschungseinheit für Datenbanksysteme + ELKI Development Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRange; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; +import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; +import de.lmu.ifi.dbs.elki.database.relation.Relation; +import de.lmu.ifi.dbs.elki.distance.distancefunction.DBIDDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.DBIDRangeDistanceFunction; + +/** + * Run a distance query based on DBIDRanges + * + * @author Erich Schubert + * + * @apiviz.landmark + * @apiviz.uses DBIDRangeDistanceFunction + */ +public class DBIDRangeDistanceQuery extends DBIDDistanceQuery { + /** + * The distance function we use. + */ + final protected DBIDRangeDistanceFunction distanceFunction; + + /** + * The DBID range we are accessing. + */ + final protected DBIDRange range; + + /** + * Constructor. + * + * @param relation Database to use. + * @param distanceFunction Our distance function + */ + public DBIDRangeDistanceQuery(Relation<DBID> relation, DBIDRangeDistanceFunction distanceFunction) { + super(relation, distanceFunction); + this.range = DBIDUtil.assertRange(relation.getDBIDs()); + this.distanceFunction = distanceFunction; + } + + @Override + public double distance(DBIDRef id1, DBIDRef id2) { + return distanceFunction.distance(range.getOffset(id1), range.getOffset(id2)); + } + + @Override + public DBIDDistanceFunction getDistanceFunction() { + return distanceFunction; + } +}
\ No newline at end of file diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/DistanceQuery.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/DistanceQuery.java index 12e76ace..07bd6c53 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/distance/DistanceQuery.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/DistanceQuery.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database.query.distance; 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 @@ -27,20 +27,18 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.query.DatabaseQuery; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; /** - * A distance query serves as adapter layer for database and primitive distances. + * A distance query serves as adapter layer for database and primitive + * distances. * * @author Erich Schubert * * @apiviz.landmark - * @apiviz.has Distance * * @param O Input object type - * @param D Distance result type */ -public interface DistanceQuery<O, D extends Distance<?>> extends DatabaseQuery { +public interface DistanceQuery<O> extends DatabaseQuery { /** * Returns the distance between the two objects specified by their object ids. * @@ -48,7 +46,7 @@ public interface DistanceQuery<O, D extends Distance<?>> extends DatabaseQuery { * @param id2 second object id * @return the distance between the two objects specified by their object ids */ - D distance(DBIDRef id1, DBIDRef id2); + double distance(DBIDRef id1, DBIDRef id2); /** * Returns the distance between the two objects specified by their object ids. @@ -57,7 +55,7 @@ public interface DistanceQuery<O, D extends Distance<?>> extends DatabaseQuery { * @param id2 second object id * @return the distance between the two objects specified by their object ids */ - D distance(O o1, DBIDRef id2); + double distance(O o1, DBIDRef id2); /** * Returns the distance between the two objects specified by their object ids. @@ -66,7 +64,7 @@ public interface DistanceQuery<O, D extends Distance<?>> extends DatabaseQuery { * @param o2 second object * @return the distance between the two objects specified by their object ids */ - D distance(DBIDRef id1, O o2); + double distance(DBIDRef id1, O o2); /** * Returns the distance between the two objects specified by their object ids. @@ -75,44 +73,16 @@ public interface DistanceQuery<O, D extends Distance<?>> extends DatabaseQuery { * @param o2 second object * @return the distance between the two objects specified by their object ids */ - D distance(O o1, O o2); - - /** - * Method to get the distance functions factory. - * - * @return Factory for distance objects - */ - D getDistanceFactory(); + double distance(O o1, O o2); /** * Get the inner distance function. * * @return Distance function */ - DistanceFunction<? super O, D> getDistanceFunction(); - - /** - * Provides an infinite distance. - * - * @return an infinite distance - */ - D infiniteDistance(); + DistanceFunction<? super O> getDistanceFunction(); /** - * Provides a null distance. - * - * @return a null distance - */ - D nullDistance(); - - /** - * Provides an undefined distance. - * - * @return an undefined distance - */ - D undefinedDistance(); - - /** * Access the underlying data query. * * @return data query in use diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceQuery.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceQuery.java index ab3046ed..92125ae7 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceQuery.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceQuery.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database.query.distance; 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 @@ -26,7 +26,6 @@ package de.lmu.ifi.dbs.elki.database.query.distance; import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; /** * Run a database query in a database context. @@ -37,13 +36,12 @@ import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; * @apiviz.uses PrimitiveDistanceFunction * * @param <O> Database object type. - * @param <D> Distance result type. */ -public class PrimitiveDistanceQuery<O, D extends Distance<D>> extends AbstractDistanceQuery<O, D> { +public class PrimitiveDistanceQuery<O> extends AbstractDistanceQuery<O> { /** * The distance function we use. */ - final protected PrimitiveDistanceFunction<? super O, D> distanceFunction; + final protected PrimitiveDistanceFunction<? super O> distanceFunction; /** * Constructor. @@ -51,32 +49,32 @@ public class PrimitiveDistanceQuery<O, D extends Distance<D>> extends AbstractDi * @param relation Representation to use. * @param distanceFunction Our distance function */ - public PrimitiveDistanceQuery(Relation<? extends O> relation, PrimitiveDistanceFunction<? super O, D> distanceFunction) { + public PrimitiveDistanceQuery(Relation<? extends O> relation, PrimitiveDistanceFunction<? super O> distanceFunction) { super(relation); this.distanceFunction = distanceFunction; } @Override - public D distance(DBIDRef id1, DBIDRef id2) { + public double distance(DBIDRef id1, DBIDRef id2) { O o1 = relation.get(id1); O o2 = relation.get(id2); return distance(o1, o2); } @Override - public D distance(O o1, DBIDRef id2) { + public double distance(O o1, DBIDRef id2) { O o2 = relation.get(id2); return distance(o1, o2); } @Override - public D distance(DBIDRef id1, O o2) { + public double distance(DBIDRef id1, O o2) { O o1 = relation.get(id1); return distance(o1, o2); } @Override - public D distance(O o1, O o2) { + public double distance(O o1, O o2) { if(o1 == null) { throw new UnsupportedOperationException("This distance function can only be used for object instances."); } @@ -87,7 +85,7 @@ public class PrimitiveDistanceQuery<O, D extends Distance<D>> extends AbstractDi } @Override - public PrimitiveDistanceFunction<? super O, D> getDistanceFunction() { + public PrimitiveDistanceFunction<? super O> getDistanceFunction() { return distanceFunction; } }
\ No newline at end of file diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceSimilarityQuery.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceSimilarityQuery.java index 52f79f06..b90abc23 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceSimilarityQuery.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceSimilarityQuery.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database.query.distance; 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 @@ -27,7 +27,6 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.query.DistanceSimilarityQuery; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; import de.lmu.ifi.dbs.elki.distance.similarityfunction.PrimitiveSimilarityFunction; /** @@ -38,14 +37,13 @@ import de.lmu.ifi.dbs.elki.distance.similarityfunction.PrimitiveSimilarityFuncti * @apiviz.uses PrimitiveSimilarityFunction * * @param <O> Object type - * @param <D> Distance type */ -public class PrimitiveDistanceSimilarityQuery<O, D extends Distance<D>> extends PrimitiveDistanceQuery<O, D> implements DistanceSimilarityQuery<O, D> { +public class PrimitiveDistanceSimilarityQuery<O> extends PrimitiveDistanceQuery<O> implements DistanceSimilarityQuery<O> { /** * Typed reference to the similarity function (usually the same as the * distance function!) */ - private PrimitiveSimilarityFunction<? super O, D> similarityFunction; + private PrimitiveSimilarityFunction<? super O> similarityFunction; /** * Constructor. @@ -55,37 +53,37 @@ public class PrimitiveDistanceSimilarityQuery<O, D extends Distance<D>> extends * @param similarityFunction similarity function (usually the same as the * distance function!) */ - public PrimitiveDistanceSimilarityQuery(Relation<? extends O> relation, PrimitiveDistanceFunction<? super O, D> distanceFunction, PrimitiveSimilarityFunction<? super O, D> similarityFunction) { + public PrimitiveDistanceSimilarityQuery(Relation<? extends O> relation, PrimitiveDistanceFunction<? super O> distanceFunction, PrimitiveSimilarityFunction<? super O> similarityFunction) { super(relation, distanceFunction); this.similarityFunction = similarityFunction; } @Override - public D similarity(DBIDRef id1, DBIDRef id2) { + public double similarity(DBIDRef id1, DBIDRef id2) { O o1 = relation.get(id1); O o2 = relation.get(id2); return similarity(o1, o2); } @Override - public D similarity(O o1, DBIDRef id2) { + public double similarity(O o1, DBIDRef id2) { O o2 = relation.get(id2); return similarity(o1, o2); } @Override - public D similarity(DBIDRef id1, O o2) { + public double similarity(DBIDRef id1, O o2) { O o1 = relation.get(id1); return similarity(o1, o2); } @Override - public D similarity(O o1, O o2) { + public double similarity(O o1, O o2) { return this.similarityFunction.similarity(o1, o2); } @Override - public PrimitiveSimilarityFunction<? super O, D> getSimilarityFunction() { + public PrimitiveSimilarityFunction<? super O> getSimilarityFunction() { return similarityFunction; } } diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/SpatialDistanceQuery.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/SpatialDistanceQuery.java index 14839dd7..1340130e 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/distance/SpatialDistanceQuery.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/SpatialDistanceQuery.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database.query.distance; 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 @@ -26,7 +26,6 @@ package de.lmu.ifi.dbs.elki.database.query.distance; import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable; import de.lmu.ifi.dbs.elki.database.ids.DBID; import de.lmu.ifi.dbs.elki.distance.distancefunction.SpatialPrimitiveDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; /** * Query interface for spatial distance queries. @@ -34,9 +33,8 @@ import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; * @author Erich Schubert * * @param <V> Vector type - * @param <D> Distance type */ -public interface SpatialDistanceQuery<V extends SpatialComparable, D extends Distance<D>> extends DistanceQuery<V, D> { +public interface SpatialDistanceQuery<V extends SpatialComparable> extends DistanceQuery<V> { /** * Computes the minimum distance between the given MBR and the FeatureVector * object according to this distance function. @@ -46,7 +44,7 @@ public interface SpatialDistanceQuery<V extends SpatialComparable, D extends Dis * @return the minimum distance between the given MBR and the FeatureVector * object according to this distance function */ - D minDist(SpatialComparable mbr, V v); + double minDist(SpatialComparable mbr, V v); /** * Computes the minimum distance between the given MBR and the FeatureVector @@ -57,7 +55,7 @@ public interface SpatialDistanceQuery<V extends SpatialComparable, D extends Dis * @return the minimum distance between the given MBR and the FeatureVector * object according to this distance function */ - D minDist(SpatialComparable mbr, DBID id); + double minDist(SpatialComparable mbr, DBID id); /** * Get the inner distance function. @@ -65,5 +63,5 @@ public interface SpatialDistanceQuery<V extends SpatialComparable, D extends Dis * @return Distance function */ @Override - SpatialPrimitiveDistanceFunction<? super V, D> getDistanceFunction(); + SpatialPrimitiveDistanceFunction<? super V> getDistanceFunction(); }
\ No newline at end of file diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/SpatialPrimitiveDistanceQuery.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/SpatialPrimitiveDistanceQuery.java index c5a601bd..4453a2ef 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/distance/SpatialPrimitiveDistanceQuery.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/SpatialPrimitiveDistanceQuery.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database.query.distance; 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 @@ -27,7 +27,6 @@ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable; import de.lmu.ifi.dbs.elki.database.ids.DBID; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.SpatialPrimitiveDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; /** * Distance query for spatial distance functions @@ -36,35 +35,34 @@ import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; * @apiviz.uses SpatialPrimitiveDistanceFunction * * @param <V> Vector type to use - * @param <D> Distance result type */ -public class SpatialPrimitiveDistanceQuery<V extends SpatialComparable, D extends Distance<D>> extends PrimitiveDistanceQuery<V, D> implements SpatialDistanceQuery<V, D> { +public class SpatialPrimitiveDistanceQuery<V extends SpatialComparable> extends PrimitiveDistanceQuery<V> implements SpatialDistanceQuery<V> { /** * The distance function we use. */ - final protected SpatialPrimitiveDistanceFunction<? super V, D> distanceFunction; + final protected SpatialPrimitiveDistanceFunction<? super V> distanceFunction; /** * @param relation Representation to use * @param distanceFunction Distance function to use */ - public SpatialPrimitiveDistanceQuery(Relation<? extends V> relation, SpatialPrimitiveDistanceFunction<? super V, D> distanceFunction) { + public SpatialPrimitiveDistanceQuery(Relation<? extends V> relation, SpatialPrimitiveDistanceFunction<? super V> distanceFunction) { super(relation, distanceFunction); this.distanceFunction = distanceFunction; } @Override - public D minDist(SpatialComparable mbr, V v) { + public double minDist(SpatialComparable mbr, V v) { return distanceFunction.minDist(mbr, v); } @Override - public D minDist(SpatialComparable mbr, DBID id) { + public double minDist(SpatialComparable mbr, DBID id) { return distanceFunction.minDist(mbr, relation.get(id)); } @Override - public SpatialPrimitiveDistanceFunction<? super V, D> getDistanceFunction() { + public SpatialPrimitiveDistanceFunction<? super V> getDistanceFunction() { return distanceFunction; } }
\ No newline at end of file diff --git a/src/de/lmu/ifi/dbs/elki/database/query/distance/package-info.java b/src/de/lmu/ifi/dbs/elki/database/query/distance/package-info.java index 97bc471d..0d949669 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/distance/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/distance/package-info.java @@ -2,12 +2,13 @@ * <p>Prepared queries for distances.</p> * * @apiviz.exclude .*Instance + * @apiviz.exclude de.lmu.ifi.dbs.elki.index.distance.* */ /* 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 |