org.apache.sysds.runtime.compress.cost

## Interface ICostEstimate

All Superinterfaces:
  Serializable

All Known Implementing Classes:
  ComputationCostEstimator, DistinctCostEstimator, HybridCostEstimator, MemoryCostEstimator

    public interface ICostEstimate
    extends Serializable

A cost estimator interface. Cost here is either memory based or computation based. It is used to estimate the cost of a specific compression layout.

### Field Summary

Fields
`static org.apache.commons.logging.Log` `LOG`
`static long` `serialVersionUID`

### Method Summary

All Methods Instance Methods Abstract Methods
`double` `getCostOfColumnGroup(CompressedSizeInfoColGroup g)` If the instruction does not care about the inter column group cost, such as in memory cost or in computation cost of right or left matrix multiplication we simply estimate the cost of individual column groups.
`double` `getUncompressedCost(CompressedSizeInfoColGroup g)` Calculate the cost of execution if uncompressed.
`boolean` `shouldAnalyze(CompressedSizeInfoColGroup g1, CompressedSizeInfoColGroup g2)` Decide if the column groups should be analysed, or the worst case join should be expected.

### Field Detail

#### serialVersionUID

    static final long serialVersionUID

See Also:
  Constant Field Values

#### LOG

    static final org.apache.commons.logging.Log LOG

### Method Detail

#### getUncompressedCost

    double getUncompressedCost(CompressedSizeInfoColGroup g)

Calculate the cost of execution if uncompressed. This is used as an optimization goal to at least achieve, since if the uncompressed cost of calculation is lower than in compressed space we don't want to compress.

Parameters:
  `g` - A potential column group to compare to.
Returns:
  The uncompressed cost.

#### getCostOfColumnGroup

    double getCostOfColumnGroup(CompressedSizeInfoColGroup g)

If the instruction does not care about the inter column group cost, such as in memory cost or in computation cost of right or left matrix multiplication we simply estimate the cost of individual column groups.

Parameters:
  `g` - Column group to estimate the cost of
Returns:
  The Cost of this column group

#### shouldAnalyze

    boolean shouldAnalyze(CompressedSizeInfoColGroup g1,
                          CompressedSizeInfoColGroup g2)

Decide if the column groups should be analysed, or the worst case join should be expected. This is use full if the column groups are very small and the in practice difference between joining or not is small. Or in the other case where there is some obvious reason why these two groups does not fit together.

Parameters:
  `g1` - Group 1
  `g2` - Group 2
Returns:
  If the joining should be analyzed.