Package elki.distance

Class RandomStableDistance

  • All Implemented Interfaces:
    elki.distance.DBIDDistance, elki.distance.Distance<elki.database.ids.DBID>

    @Priority(-100)
    public class RandomStableDistance
    extends AbstractDatabaseDistance<elki.database.ids.DBID>
    implements elki.distance.DBIDDistance
    This is a dummy distance providing random values (obviously not metrical), useful mostly for unit tests and baseline evaluations: obviously this distance provides no benefit whatsoever. This distance is based on the combined hash codes of the two objects queried, if they are different. Extra caution is done to ensure symmetry and objects with the same ID will have a distance of 0. Obviously this distance is not metrical.
    Since:
    0.4.0
    Author:
    Erich Schubert
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private long seed
      Seed for reproducible random.
      static RandomStableDistance STATIC
      Static instance
    • Constructor Summary

      Constructors 
      Constructor Description
      RandomStableDistance​(long seed)
      Constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      double distance​(elki.database.ids.DBIDRef o1, elki.database.ids.DBIDRef o2)  
      boolean equals​(java.lang.Object obj)  
      elki.data.type.TypeInformation getInputTypeRestriction()  
      int hashCode()  
      <T extends elki.database.ids.DBID>
      elki.database.query.distance.DistanceQuery<T>
      instantiate​(elki.database.relation.Relation<T> relation)  
      private double pseudoRandom​(long seed, int input)
      Pseudo random number generator, adaption of the common rand48 generator which can be found in C (man drand48), Java and attributed to Donald Knuth.
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface elki.distance.Distance

        isMetric, isSquared, isSymmetric
    • Field Detail

      • seed

        private long seed
        Seed for reproducible random.
    • Constructor Detail

      • RandomStableDistance

        public RandomStableDistance​(long seed)
        Constructor. Usually it is preferred to use the static instance!
    • Method Detail

      • distance

        public double distance​(elki.database.ids.DBIDRef o1,
                               elki.database.ids.DBIDRef o2)
        Specified by:
        distance in interface elki.distance.DBIDDistance
      • pseudoRandom

        private double pseudoRandom​(long seed,
                                    int input)
        Pseudo random number generator, adaption of the common rand48 generator which can be found in C (man drand48), Java and attributed to Donald Knuth.
        Parameters:
        seed - Seed value
        input - Input code
        Returns:
        Pseudo random double value
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • getInputTypeRestriction

        public elki.data.type.TypeInformation getInputTypeRestriction()
        Specified by:
        getInputTypeRestriction in interface elki.distance.Distance<elki.database.ids.DBID>
      • instantiate

        public <T extends elki.database.ids.DBID> elki.database.query.distance.DistanceQuery<T> instantiate​(elki.database.relation.Relation<T> relation)
        Specified by:
        instantiate in interface elki.distance.Distance<elki.database.ids.DBID>