Package elki.database.query.distance
Class LinearScanPrioritySearcher<Q,O>
- java.lang.Object
-
- elki.database.query.distance.LinearScanPrioritySearcher<Q,O>
-
- Type Parameters:
Q
- Query typeO
- Relation object type
- All Implemented Interfaces:
DBIDIter
,DBIDRef
,KNNSearcher<Q>
,LinearScanQuery
,PrioritySearcher<Q>
,RangeSearcher<Q>
,Iter
- Direct Known Subclasses:
LinearScanPrioritySearcher.ByDBID
,LinearScanPrioritySearcher.ByObject
public abstract class LinearScanPrioritySearcher<Q,O> extends java.lang.Object implements PrioritySearcher<Q>, LinearScanQuery
Default linear scan search class.This is a fallback option - results are not returned in order, and (as always) may exceed the given cutoff threshold.
- Since:
- 0.4.0
- Author:
- Erich Schubert
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
LinearScanPrioritySearcher.ByDBID<O>
Search by DBID.static class
LinearScanPrioritySearcher.ByObject<O>
Search by Object.
-
Field Summary
Fields Modifier and Type Field Description protected double
curdist
Current distanceprotected DistanceQuery<O>
distanceQuery
Distance to use.protected DBIDIter
iter
Iterator.protected O
query
Current query object.
-
Constructor Summary
Constructors Constructor Description LinearScanPrioritySearcher(DistanceQuery<O> distanceQuery)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description PrioritySearcher<Q>
advance()
Moves the iterator forward to the next entry.double
allLowerBound()
Lower bound for all subsequent instances (that have been completely explored).double
computeExactDistance()
Compute the exact distance to the current candidate.PrioritySearcher<Q>
decreaseCutoff(double threshold)
Decrease the cutoff threshold.double
getApproximateAccuracy()
Get approximate distance accuracy (if available).double
getApproximateDistance()
Get approximate distance (if available).double
getLowerBound()
Get the lower bound (if available).double
getUpperBound()
Get the upper bound (if available).int
internalGetIndex()
Internal only: Get the internal index.protected PrioritySearcher<Q>
realSearch(O query)
Implementation of the search function.boolean
valid()
Returns true if the iterator currently points to a valid object.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface elki.database.query.PrioritySearcher
getKNN, getRange, search, search
-
Methods inherited from interface elki.database.query.range.RangeSearcher
getRange
-
-
-
-
Field Detail
-
distanceQuery
protected DistanceQuery<O> distanceQuery
Distance to use.
-
iter
protected DBIDIter iter
Iterator.
-
query
protected O query
Current query object.
-
curdist
protected double curdist
Current distance
-
-
Constructor Detail
-
LinearScanPrioritySearcher
public LinearScanPrioritySearcher(DistanceQuery<O> distanceQuery)
Constructor.- Parameters:
distanceQuery
- Distance function to use
-
-
Method Detail
-
realSearch
protected PrioritySearcher<Q> realSearch(O query)
Implementation of the search function.- Parameters:
query
- Query object- Returns:
- this
-
valid
public boolean valid()
Description copied from interface:Iter
Returns true if the iterator currently points to a valid object.
-
advance
public PrioritySearcher<Q> advance()
Description copied from interface:Iter
Moves the iterator forward to the next entry.
-
internalGetIndex
public int internalGetIndex()
Description copied from interface:DBIDRef
Internal only: Get the internal index.NOT FOR PUBLIC USE - ELKI Optimization engine only.
- Specified by:
internalGetIndex
in interfaceDBIDRef
- Returns:
- Internal index
-
decreaseCutoff
public PrioritySearcher<Q> decreaseCutoff(double threshold)
Description copied from interface:PrioritySearcher
Decrease the cutoff threshold.The cutoff must not be increased, as the search may have pruned some results automatically.
- Specified by:
decreaseCutoff
in interfacePrioritySearcher<Q>
- Parameters:
threshold
- Threshold parameter- Returns:
- this, for chaining
-
computeExactDistance
public double computeExactDistance()
Description copied from interface:PrioritySearcher
Compute the exact distance to the current candidate.The searcher may or may not have this value already.
- Specified by:
computeExactDistance
in interfacePrioritySearcher<Q>
- Returns:
- Distance
-
getApproximateAccuracy
public double getApproximateAccuracy()
Description copied from interface:PrioritySearcher
Get approximate distance accuracy (if available).Quality guarantees may vary a lot!
- Specified by:
getApproximateAccuracy
in interfacePrioritySearcher<Q>
- Returns:
Double.NaN
if not valid
-
getApproximateDistance
public double getApproximateDistance()
Description copied from interface:PrioritySearcher
Get approximate distance (if available).Quality guarantees may vary a lot!
- Specified by:
getApproximateDistance
in interfacePrioritySearcher<Q>
- Returns:
Double.NaN
if not valid
-
getLowerBound
public double getLowerBound()
Description copied from interface:PrioritySearcher
Get the lower bound (if available).Note: the lower bound is already checked by the cutoff of the priority search, so this is primarily useful for analyzing the search behavior.
- Specified by:
getLowerBound
in interfacePrioritySearcher<Q>
- Returns:
Double.NaN
if not valid
-
getUpperBound
public double getUpperBound()
Description copied from interface:PrioritySearcher
Get the upper bound (if available).- Specified by:
getUpperBound
in interfacePrioritySearcher<Q>
- Returns:
Double.NaN
if not valid
-
allLowerBound
public double allLowerBound()
Description copied from interface:PrioritySearcher
Lower bound for all subsequent instances (that have been completely explored). The searcher guarantees that no further results will be returned with a distance less than this.- Specified by:
allLowerBound
in interfacePrioritySearcher<Q>
- Returns:
- lower bound;
0
if no guarantees (e.g., linear scan)
-
-