Package org.tinspin.index.kdtree
Class KDTree<T>
- java.lang.Object
-
- org.tinspin.index.kdtree.KDTree<T>
-
- Type Parameters:
T- Value type
- All Implemented Interfaces:
Index<T>,PointIndex<T>,PointIndexMM<T>
public class KDTree<T> extends Object implements PointIndex<T>, PointIndexMM<T>
A simple KD-Tree implementation.- Author:
- T. Zäschke
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classKDTree.KDStatsStatistics container class.
-
Field Summary
Fields Modifier and Type Field Description static booleanDEBUG
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description voidclear()Removes all elements from the tree.booleancontains(double[] key, T value)Lookup an entry, using exact match.booleancontainsExact(double[] key)Check whether a given key exists.static <T> KDTree<T>create(int dims)static <T> KDTree<T>create(int dims, PointDistanceFunction dist)Deprecated.static <T> KDTree<T>create(IndexConfig config)intgetDepth()intgetDims()intgetNodeCount()KDTree.KDStatsgetStats()voidinsert(double[] key, T value)Insert a key-value pair.QueryIterator<PointEntry<T>>iterator()List<KDEntryDist<T>>knnQuery(double[] center, int k)List<KDEntryDist<T>>knnQuery(double[] center, int k, PointDistanceFunction distFn)KDEntryDist<T>nnQuery(double[] center)1-nearest neighbor query.KDIterator<T>query(double[] point)Lookup an entry, using exact match.KDIterator<T>query(double[] min, double[] max)Query the tree, returning all points in the axis-aligned rectangle between 'min' and 'max'.PointEntryDist<T>query1NN(double[] center)Finds the nearest neighbor.TqueryExact(double[] key)Get the value associates with the key.QueryIteratorKNN<PointEntryDist<T>>queryKNN(double[] center, int k)Finds the nearest neighbor.QueryIteratorKNN<PointEntryDist<T>>queryKNN(double[] center, int k, PointDistanceFunction distFn)Finds the nearest neighbor.Tremove(double[] key)Remove a key.booleanremove(double[] key, T value)Remove all entries at the given point.booleanremoveIf(double[] key, Predicate<PointEntry<T>> pred)Remove *one* entry with the given condition.intsize()Get the number of key-value pairs in the tree.StringtoString()StringtoStringTree()Returns a printable list of the tree.Tupdate(double[] oldKey, double[] newKey)Reinsert the key.booleanupdate(double[] oldKey, double[] newKey, T value)Reinsert the key.
-
-
-
Field Detail
-
DEBUG
public static final boolean DEBUG
- See Also:
- Constant Field Values
-
-
Method Detail
-
create
public static <T> KDTree<T> create(int dims)
-
create
@Deprecated public static <T> KDTree<T> create(int dims, PointDistanceFunction dist)
Deprecated.
-
create
public static <T> KDTree<T> create(IndexConfig config)
-
insert
public void insert(double[] key, T value)Insert a key-value pair.- Specified by:
insertin interfacePointIndex<T>- Specified by:
insertin interfacePointIndexMM<T>- Parameters:
key- the keyvalue- the value
-
containsExact
public boolean containsExact(double[] key)
Check whether a given key exists.- Parameters:
key- the key to check- Returns:
- true iff the key exists
-
query
public KDIterator<T> query(double[] point)
Lookup an entry, using exact match.- Specified by:
queryin interfacePointIndexMM<T>- Parameters:
point- the point- Returns:
- an iterator over all entries at the given point
-
queryExact
public T queryExact(double[] key)
Get the value associates with the key.- Specified by:
queryExactin interfacePointIndex<T>- Parameters:
key- the key to look up- Returns:
- the value for the key or 'null' if the key was not found
-
remove
public boolean remove(double[] key, T value)Remove all entries at the given point.- Specified by:
removein interfacePointIndexMM<T>- Parameters:
key- the pointvalue- only entries with this value are removed- Returns:
- `true` iff an entry was found and removed
-
remove
public T remove(double[] key)
Remove a key.- Specified by:
removein interfacePointIndex<T>- Parameters:
key- key to remove- Returns:
- the value associated with the key or 'null' if the key was not found
-
removeIf
public boolean removeIf(double[] key, Predicate<PointEntry<T>> pred)Description copied from interface:PointIndexMMRemove *one* entry with the given condition.- Specified by:
removeIfin interfacePointIndexMM<T>- Parameters:
key- the pointpred- the condition required for removing an entry- Returns:
- the value of the entry or null if the entry was not found
-
update
public T update(double[] oldKey, double[] newKey)
Reinsert the key.- Specified by:
updatein interfacePointIndex<T>- Parameters:
oldKey- old keynewKey- new key- Returns:
- the value associated with the key or 'null' if the key was not found.
-
update
public boolean update(double[] oldKey, double[] newKey, T value)Reinsert the key.- Specified by:
updatein interfacePointIndexMM<T>- Parameters:
oldKey- old keynewKey- new keyvalue- the value of the entry that should be updated- Returns:
- `true` iff the entry was found and updated
-
contains
public boolean contains(double[] key, T value)Description copied from interface:PointIndexMMLookup an entry, using exact match.- Specified by:
containsin interfacePointIndexMM<T>- Parameters:
key- the pointvalue- the value- Returns:
- `true` if an entry was found, otherwise `false`.
-
size
public int size()
Get the number of key-value pairs in the tree.
-
clear
public void clear()
Removes all elements from the tree.
-
query
public KDIterator<T> query(double[] min, double[] max)
Query the tree, returning all points in the axis-aligned rectangle between 'min' and 'max'.- Specified by:
queryin interfacePointIndex<T>- Specified by:
queryin interfacePointIndexMM<T>- Parameters:
min- lower left corner of querymax- upper right corner of query- Returns:
- all entries in the rectangle
-
nnQuery
public KDEntryDist<T> nnQuery(double[] center)
1-nearest neighbor query.- Parameters:
center- The point for which the nearest neighbors are requested- Returns:
- Nearest neighbor
-
knnQuery
public List<KDEntryDist<T>> knnQuery(double[] center, int k)
-
knnQuery
public List<KDEntryDist<T>> knnQuery(double[] center, int k, PointDistanceFunction distFn)
-
toStringTree
public String toStringTree()
Returns a printable list of the tree.- Specified by:
toStringTreein interfaceIndex<T>- Returns:
- the tree as String
-
getStats
public KDTree.KDStats getStats()
-
getDims
public int getDims()
-
iterator
public QueryIterator<PointEntry<T>> iterator()
- Specified by:
iteratorin interfacePointIndex<T>- Specified by:
iteratorin interfacePointIndexMM<T>- Returns:
- An iterator over all entries.
-
query1NN
public PointEntryDist<T> query1NN(double[] center)
Description copied from interface:PointIndexFinds the nearest neighbor. This uses euclidean distance. Other distance types can only be specified directly on the index implementations.- Specified by:
query1NNin interfacePointIndex<T>- Specified by:
query1NNin interfacePointIndexMM<T>- Parameters:
center- center point- Returns:
- the nearest neighbor
-
queryKNN
public QueryIteratorKNN<PointEntryDist<T>> queryKNN(double[] center, int k)
Description copied from interface:PointIndexFinds the nearest neighbor. This uses euclidean distance. Other distance types can only be specified directly on the index implementations.- Specified by:
queryKNNin interfacePointIndex<T>- Specified by:
queryKNNin interfacePointIndexMM<T>- Parameters:
center- center pointk- number of neighbors- Returns:
- list of nearest neighbors
-
queryKNN
public QueryIteratorKNN<PointEntryDist<T>> queryKNN(double[] center, int k, PointDistanceFunction distFn)
Description copied from interface:PointIndexMMFinds the nearest neighbor. This uses Euclidean distance. Other distance types can only be specified directly on the index implementations.- Specified by:
queryKNNin interfacePointIndexMM<T>- Parameters:
center- center pointk- number of neighborsdistFn- the point distance function to be used- Returns:
- list of nearest neighbors
-
getNodeCount
public int getNodeCount()
- Specified by:
getNodeCountin interfaceIndex<T>
-
-