# MetricMDNUEntropyPrecomputed (ARX Developer Documentation)

org.deidentifier.arx.metric.v2

## Class MetricMDNUEntropyPrecomputed

- java.lang.Object
- - org.deidentifier.arx.metric.Metric<AbstractILMultiDimensional>
  - - org.deidentifier.arx.metric.v2.AbstractMetricMultiDimensional
    - - org.deidentifier.arx.metric.v2.MetricMDNUEntropyPrecomputed

- All Implemented Interfaces:
    java.io.Serializable
  Direct Known Subclasses:
    MetricMDNUEntropy, MetricMDNUNMEntropyPrecomputed

      public class MetricMDNUEntropyPrecomputed
      extends AbstractMetricMultiDimensional

  This class provides an efficient implementation of the non-uniform entropy metric. It avoids a cell-by-cell process by utilizing a three-dimensional array that maps identifiers to their frequency for all quasi-identifiers and generalization levels. It further reduces the overhead induced by subsequent calls by caching the results for previous columns and generalization levels. TODO: Add reference
  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.deidentifier.arx.metric.Metric

      `Metric.AggregateFunction`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `MetricMDNUEntropyPrecomputed()` Creates a new instance.
    `` | `MetricMDNUEntropyPrecomputed(boolean monotonicWithGeneralization, boolean monotonicWithSuppression, boolean independent, double gsFactor, Metric.AggregateFunction function)` Precomputed.
    `protected` | `MetricMDNUEntropyPrecomputed(double gsFactor, Metric.AggregateFunction function)` Creates a new instance.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `MetricConfiguration` | `getConfiguration()` Returns the configuration of this metric.
    `protected ILMultiDimensionalWithBound` | `getInformationLossInternal(Transformation node, HashGroupify g)` Evaluates the metric for the given node.
    `protected ILMultiDimensionalWithBound` | `getInformationLossInternal(Transformation node, HashGroupifyEntry entry)` Returns the information loss that would be induced by suppressing the given entry.
    `protected double[]` | `getInformationLossInternalRaw(Transformation node, HashGroupify g)`
    `protected AbstractILMultiDimensional` | `getLowerBoundInternal(Transformation node)` Returns a lower bound for the information loss for the given node.
    `protected AbstractILMultiDimensional` | `getLowerBoundInternal(Transformation node, HashGroupify groupify)` Returns a lower bound for the information loss for the given node.
    `protected double[]` | `getUpperBounds()` Returns the upper bound of the entropy value per column
    `protected void` | `initialize(double[][] cache, int[][][] cardinalities, int[][][] hierarchies)` For backwards compatibility.
    `protected void` | `initializeInternal(DataManager manager, DataDefinition definition, Data input, GeneralizationHierarchy[] hierarchies, ARXConfiguration config)` Implement this to initialize the metric.
    `boolean` | `isGSFactorSupported()` Returns whether a generalization/suppression factor is supported
    `boolean` | `isPrecomputed()` Returns whether the metric is precomputed
    `ElementData` | `render(ARXConfiguration config)` Renders the privacy model
    `java.lang.String` | `toString()` Returns the name of metric.

    - ### Methods inherited from class org.deidentifier.arx.metric.v2.AbstractMetricMultiDimensional

      `createInformationLoss, createInformationLossWithBound, createInformationLossWithoutBound, createMaxInformationLoss, createMinInformationLoss, getAggregateFunction, getAggregateFunctions, getDimensions, getDimensionsAggregated, getDimensionsGeneralized, getError, getMicroaggregationFunctions, getMicroaggregationStartIndex, initialize, setMax, setMin`

    - ### Methods inherited from class org.deidentifier.arx.metric.Metric

      `createAECSMetric, createAECSMetric, createAmbiguityMetric, createDiscernabilityMetric, createDiscernabilityMetric, createEntropyBasedInformationLossMetric, createEntropyBasedInformationLossMetric, createEntropyMetric, createEntropyMetric, createEntropyMetric, createEntropyMetric, createEntropyMetric, createEntropyMetric, createHeightMetric, createHeightMetric, createInstanceOfHighestScore, createInstanceOfLowestScore, createKLDivergenceMetric, createLossMetric, createLossMetric, createLossMetric, createLossMetric, createMetric, createNormalizedEntropyMetric, createNormalizedEntropyMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedLossMetric, createPrecomputedLossMetric, createPrecomputedLossMetric, createPrecomputedLossMetric, createPrecomputedNormalizedEntropyMetric, createPrecomputedNormalizedEntropyMetric, createPublisherPayoutMetric, createPublisherPayoutMetric, createStaticMetric, createStaticMetric, getDescription, getDescription, getGeneralizationFactor, getGeneralizationSuppressionFactor, getInformationLoss, getInformationLoss, getLowerBound, getLowerBound, getName, getNumRecords, getSubset, getSuppressionFactor, initialize, isAbleToHandleMicroaggregation, isIndependent, isMonotonic, isMonotonicWithGeneralization, isMonotonicWithSuppression, isMultiDimensional, isWeighted, list, round`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### MetricMDNUEntropyPrecomputed

          public MetricMDNUEntropyPrecomputed(boolean monotonicWithGeneralization,
                                      boolean monotonicWithSuppression,
                                      boolean independent,
                                      double gsFactor,
                                      Metric.AggregateFunction function)

      Precomputed.
      Parameters:
        `monotonicWithGeneralization` -
        `monotonicWithSuppression` -
        `independent` -
        `gsFactor` -
        `function` -

    - #### MetricMDNUEntropyPrecomputed

          protected MetricMDNUEntropyPrecomputed()

      Creates a new instance.

    - #### MetricMDNUEntropyPrecomputed

          protected MetricMDNUEntropyPrecomputed(double gsFactor,
                                      Metric.AggregateFunction function)

      Creates a new instance.
      Parameters:
        `gsFactor` -
        `function` -

  - ### Method Detail

    - #### getConfiguration

          public MetricConfiguration getConfiguration()

      Returns the configuration of this metric.
      Overrides:
        `getConfiguration` in class `Metric<AbstractILMultiDimensional>`
      Returns:

    - #### isGSFactorSupported

          public boolean isGSFactorSupported()

      Description copied from class: `Metric`
      Returns whether a generalization/suppression factor is supported
      Overrides:
        `isGSFactorSupported` in class `Metric<AbstractILMultiDimensional>`
      Returns:

    - #### isPrecomputed

          public boolean isPrecomputed()

      Description copied from class: `Metric`
      Returns whether the metric is precomputed
      Overrides:
        `isPrecomputed` in class `Metric<AbstractILMultiDimensional>`
      Returns:

    - #### render

          public ElementData render(ARXConfiguration config)

      Description copied from class: `Metric`
      Renders the privacy model
      Specified by:
        `render` in class `Metric<AbstractILMultiDimensional>`
      Returns:

    - #### toString

          public java.lang.String toString()

      Description copied from class: `Metric`
      Returns the name of metric.
      Overrides:
        `toString` in class `Metric<AbstractILMultiDimensional>`

    - #### getInformationLossInternal

          protected ILMultiDimensionalWithBound getInformationLossInternal(Transformation node,
                                                               HashGroupify g)

      Description copied from class: `Metric`
      Evaluates the metric for the given node.
      Specified by:
        `getInformationLossInternal` in class `Metric<AbstractILMultiDimensional>`
      Parameters:
        `node` - The node for which to compute the information loss
        `g` - The groupify operator of the previous check
      Returns:
        the double

    - #### getInformationLossInternal

          protected ILMultiDimensionalWithBound getInformationLossInternal(Transformation node,
                                                               HashGroupifyEntry entry)

      Description copied from class: `Metric`
      Returns the information loss that would be induced by suppressing the given entry. The loss is not necessarily consistent with the loss that is computed by `getInformationLoss(node, groupify)` but is guaranteed to be comparable for different entries from the same groupify operator.
      Specified by:
        `getInformationLossInternal` in class `Metric<AbstractILMultiDimensional>`
      Returns:

    - #### getInformationLossInternalRaw

          protected double[] getInformationLossInternalRaw(Transformation node,
                                               HashGroupify g)

      Parameters:
        `node` -
        `g` -
      Returns:

    - #### getLowerBoundInternal

          protected AbstractILMultiDimensional getLowerBoundInternal(Transformation node)

      Description copied from class: `Metric`
      Returns a lower bound for the information loss for the given node. This can be used to expose the results of monotonic shares of a metric, which can significantly speed-up the anonymization process. If no such metric exists, simply return `null`.
      Specified by:
        `getLowerBoundInternal` in class `Metric<AbstractILMultiDimensional>`
      Returns:

    - #### getLowerBoundInternal

          protected AbstractILMultiDimensional getLowerBoundInternal(Transformation node,
                                                         HashGroupify groupify)

      Description copied from class: `Metric`
      Returns a lower bound for the information loss for the given node. This can be used to expose the results of monotonic shares of a metric, which can significantly speed-up the anonymization process. If no such metric exists, simply return `null`.
      This variant of the method allows computing a monotonic share based on a groupified data representation. IMPORTANT NOTE: The groups may not have been classified correctly when the method is called, i.e., HashGroupifyEntry.isNotOutlier may not be set correctly!
      Specified by:
        `getLowerBoundInternal` in class `Metric<AbstractILMultiDimensional>`
      Returns:

    - #### getUpperBounds

          protected double[] getUpperBounds()

      Returns the upper bound of the entropy value per column
      Returns:

    - #### initialize

          protected void initialize(double[][] cache,
                        int[][][] cardinalities,
                        int[][][] hierarchies)

      For backwards compatibility.
      Parameters:
        `cache` -
        `cardinalities` -
        `hierarchies` -

    - #### initializeInternal

          protected void initializeInternal(DataManager manager,
                                DataDefinition definition,
                                Data input,
                                GeneralizationHierarchy[] hierarchies,
                                ARXConfiguration config)

      Description copied from class: `Metric`
      Implement this to initialize the metric.
      Overrides:
        `initializeInternal` in class `AbstractMetricMultiDimensional`