Class ZipfianDistribution

java.lang.Object
com.github.tommyettinger.random.distribution.Distribution
com.github.tommyettinger.random.distribution.ZipfianDistribution

public class ZipfianDistribution extends Distribution
A discrete two-parameter distribution with range from integer 1 to alpha.
This gets some formulas from dirtyzipf, which is MIT-licensed. It doesn't share any code. See Wikipedia's page on the Zipfian distribution.
  • Constructor Details

    • ZipfianDistribution

      public ZipfianDistribution()
      Uses an AceRandom, alpha = 16, skew = 0.5 .
    • ZipfianDistribution

      public ZipfianDistribution(long alpha, double skew)
      Uses an AceRandom and the given alpha and skew.
    • ZipfianDistribution

      public ZipfianDistribution(EnhancedRandom generator, long alpha, double skew)
      Uses the given EnhancedRandom directly. Uses the given alpha and skew.
    • ZipfianDistribution

      public ZipfianDistribution(EnhancedRandom generator, long alpha, double skew, double zeta)
      Uses the given EnhancedRandom directly. Uses the given alpha, skew, and precalculated zeta. Because this does not calculate zeta directly, it may be faster if you already know getZeta().
  • Method Details

    • getTag

      public String getTag()
      Description copied from class: Distribution
      Gets the tag used to identify this type of Distribution, as a String. This tag should be unique. Unlike the tags for EnhancedRandom types, the names here can vary in length.
      Specified by:
      getTag in class Distribution
      Returns:
      a unique String identifier for this type of Distribution; must be non-null, can be any non-zero length
    • copy

      public ZipfianDistribution copy()
      Description copied from class: Distribution
      Returns an exact copy of this Distribution, with the same parameters and a copy of the generator.
      Specified by:
      copy in class Distribution
      Returns:
      an exact copy of this Distribution
    • getAlpha

      public double getAlpha()
    • getSkew

      public double getSkew()
    • getZeta

      public double getZeta()
    • setZeta

      public void setZeta(double zeta)
    • getParameterA

      public double getParameterA()
      Description copied from class: Distribution
      Gets the value of parameter "A" as a double. This corresponds to parameter "A" in Distribution.setParameters(double, double, double); it is usually called by some other name in the generator, and may not be stored as a double internally.
      This defaults to always returning Double.NaN, but any parameters a distribution actually uses should be overridden to return the actual parameter, which is almost certainly not going to be NaN. If a getParameter method returns NaN, you can generally safely assume that the parameter is not used by this distribution.
      Overrides:
      getParameterA in class Distribution
      Returns:
      the value of parameter "A" as a double.
    • getParameterB

      public double getParameterB()
      Description copied from class: Distribution
      Gets the value of parameter "B" as a double. This corresponds to parameter "B" in Distribution.setParameters(double, double, double); it is usually called by some other name in the generator, and may not be stored as a double internally.
      This defaults to always returning Double.NaN, but any parameters a distribution actually uses should be overridden to return the actual parameter, which is almost certainly not going to be NaN. If a getParameter method returns NaN, you can generally safely assume that the parameter is not used by this distribution.
      Overrides:
      getParameterB in class Distribution
      Returns:
      the value of parameter "B" as a double.
    • harmonic

      public static double harmonic(long limit, double skew)
      Gets the nth generalized harmonic number (with n equal to limit) with the given s (as skew). See Harmonic numbers on Wikipedia.
      Parameters:
      limit - N in the formula (a long), or how many values are in the sequence this processes
      skew - s in the formula (a non-negative double), or how skewed this is away from Zipf's Law
      Returns:
      the Nth generalized harmonic number with the given skew, where N equals limit
    • getMaximum

      public double getMaximum()
      Description copied from class: Distribution
      Gets the maximum possible value of distributed random numbers.
      Specified by:
      getMaximum in class Distribution
      Returns:
      the maximum possible value of distributed random numbers
    • getMean

      public double getMean()
      Description copied from class: Distribution
      Gets the mean of distributed random numbers.
      Specified by:
      getMean in class Distribution
      Returns:
      the mean of distributed random numbers
    • getMedian

      public double getMedian()
      Description copied from class: Distribution
      Gets the median of distributed random numbers.
      Specified by:
      getMedian in class Distribution
      Returns:
      the median of distributed random numbers
    • getMinimum

      public double getMinimum()
      Description copied from class: Distribution
      Gets the minimum possible value of distributed random numbers.
      Specified by:
      getMinimum in class Distribution
      Returns:
      the minimum possible value of distributed random numbers
    • getMode

      public double[] getMode()
      Description copied from class: Distribution
      Gets the mode(s) of distributed random numbers.
      Specified by:
      getMode in class Distribution
      Returns:
      the mode(s) of distributed random numbers
    • getVariance

      public double getVariance()
      Description copied from class: Distribution
      Gets the variance of distributed random numbers.
      Specified by:
      getVariance in class Distribution
      Returns:
      the variance of distributed random numbers
    • setParameters

      public boolean setParameters(double a, double b, double c)
      Sets all parameters and returns true if they are valid, otherwise leaves parameters unchanged and returns false. Note, if you pass a negative value for c, you must call setZeta(double) and provide a value for zeta before you generate any doubles. Typically, when a is very large, zeta takes a long time to process, so you might want to calculate it once, store the result of getZeta(), and set it on later runs after passing a negative c here.
      Specified by:
      setParameters in class Distribution
      Parameters:
      a - alpha; should be an int or long greater than 0
      b - skew; should be greater than or equal to 0.0 and less than 1.0
      c - if negative, the (challenging) zeta value will not be calculated here; otherwise ignored
      Returns:
      true if the parameters given are valid and will be used
    • nextDouble

      public double nextDouble()
      Description copied from class: Distribution
      Generates a double using this distribution.
      Specified by:
      nextDouble in class Distribution
      Returns:
      a distributed double
    • sample

      public static double sample(EnhancedRandom generator, double alpha, double skew, double zeta, double zetaTwoSkew)
    • sample

      public static double sample(EnhancedRandom generator, long alpha, double skew, double zeta)