Class PrecomputedDistanceMatrix<O>

  • Type Parameters:
    O - Object type
    All Implemented Interfaces:
    elki.index.DistanceIndex<O>, elki.index.DistancePriorityIndex<O>, elki.index.Index, elki.index.KNNIndex<O>, elki.index.RangeIndex<O>

    public class PrecomputedDistanceMatrix<O>
    extends java.lang.Object
    implements elki.index.DistanceIndex<O>, elki.index.RangeIndex<O>, elki.index.KNNIndex<O>, elki.index.DistancePriorityIndex<O>
    Distance matrix, for precomputing similarity for a small data set.

    This class uses a linear memory layout (not a ragged array), and assumes symmetry as well as strictness. This way, it only stores the upper triangle matrix with double precision. It has to store (n-1) * (n-2) distance values in memory, requiring 8 * (n-1) * (n-2) bytes. Since Java has a size limit of arrays of 31 bits (signed integer), we can store at most \(2^{16}\) objects (precisely, 65536 objects) in a single array, which needs about 16 GB of RAM.

    Since:
    0.7.0
    Author:
    Erich Schubert
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected elki.distance.Distance<? super O> distance
      Nested distance function.
      private elki.database.ids.DBIDRange ids
      DBID range.
      private static elki.logging.Logging LOG
      Class logger.
      private double[] matrix
      Distance matrix.
      protected java.lang.ref.WeakReference<elki.database.relation.Relation<O>> refrelation
      Data relation.
    • Constructor Summary

      Constructors 
      Constructor Description
      PrecomputedDistanceMatrix​(elki.database.relation.Relation<O> relation, elki.database.ids.DBIDRange range, elki.distance.Distance<? super O> distance)
      Constructor.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      elki.database.query.distance.DistanceQuery<O> getDistanceQuery​(elki.distance.Distance<? super O> distanceFunction)  
      private int getOffset​(int x, int y)
      Array offset computation.
      void initialize()  
      elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> kNNByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)  
      elki.database.query.knn.KNNSearcher<O> kNNByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)  
      void logStatistics()  
      elki.database.query.PrioritySearcher<elki.database.ids.DBIDRef> priorityByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)  
      elki.database.query.PrioritySearcher<O> priorityByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)  
      elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef> rangeByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)  
      elki.database.query.range.RangeSearcher<O> rangeByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)  
      protected static int triangleSize​(int x)
      Compute the size of a complete x by x triangle (minus diagonal)
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • LOG

        private static final elki.logging.Logging LOG
        Class logger.
      • refrelation

        protected final java.lang.ref.WeakReference<elki.database.relation.Relation<O>> refrelation
        Data relation.
      • distance

        protected final elki.distance.Distance<? super O> distance
        Nested distance function.
      • matrix

        private double[] matrix
        Distance matrix.
      • ids

        private elki.database.ids.DBIDRange ids
        DBID range.
    • Constructor Detail

      • PrecomputedDistanceMatrix

        public PrecomputedDistanceMatrix​(elki.database.relation.Relation<O> relation,
                                         elki.database.ids.DBIDRange range,
                                         elki.distance.Distance<? super O> distance)
        Constructor.
        Parameters:
        relation - Data relation
        range - DBID range
        distance - Distance function
    • Method Detail

      • initialize

        public void initialize()
        Specified by:
        initialize in interface elki.index.Index
      • triangleSize

        protected static int triangleSize​(int x)
        Compute the size of a complete x by x triangle (minus diagonal)
        Parameters:
        x - Offset
        Returns:
        Size of complete triangle
      • getOffset

        private int getOffset​(int x,
                              int y)
        Array offset computation.
        Parameters:
        x - X parameter
        y - Y parameter
        Returns:
        Array offset
      • logStatistics

        public void logStatistics()
        Specified by:
        logStatistics in interface elki.index.Index
      • getDistanceQuery

        public elki.database.query.distance.DistanceQuery<O> getDistanceQuery​(elki.distance.Distance<? super O> distanceFunction)
        Specified by:
        getDistanceQuery in interface elki.index.DistanceIndex<O>
      • kNNByObject

        public elki.database.query.knn.KNNSearcher<O> kNNByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                  int maxk,
                                                                  int flags)
        Specified by:
        kNNByObject in interface elki.index.DistancePriorityIndex<O>
        Specified by:
        kNNByObject in interface elki.index.KNNIndex<O>
      • kNNByDBID

        public elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> kNNByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                                        int maxk,
                                                                                        int flags)
        Specified by:
        kNNByDBID in interface elki.index.KNNIndex<O>
      • rangeByObject

        public elki.database.query.range.RangeSearcher<O> rangeByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                        double maxrange,
                                                                        int flags)
        Specified by:
        rangeByObject in interface elki.index.DistancePriorityIndex<O>
        Specified by:
        rangeByObject in interface elki.index.RangeIndex<O>
      • rangeByDBID

        public elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef> rangeByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                                              double maxrange,
                                                                                              int flags)
        Specified by:
        rangeByDBID in interface elki.index.RangeIndex<O>
      • priorityByObject

        public elki.database.query.PrioritySearcher<O> priorityByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                        double maxrange,
                                                                        int flags)
        Specified by:
        priorityByObject in interface elki.index.DistancePriorityIndex<O>
      • priorityByDBID

        public elki.database.query.PrioritySearcher<elki.database.ids.DBIDRef> priorityByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                                              double maxrange,
                                                                                              int flags)
        Specified by:
        priorityByDBID in interface elki.index.DistancePriorityIndex<O>