Source:
<code>protected void initializeInternal(final DataManager manager, final DataDefinition definition, final Data input, final GeneralizationHierarchy[] hierarchies, final ARXConfiguration config) { super.initializeInternal(manager, definition, input, hierarchies, config); RowSet subset = super.getSubset(config); this.cardinalities = new Cardinalities(input, subset, hierarchies); this.rows = input.getDataLength(); double gFactor = super.getGeneralizationFactor(); double sFactor = super.getSuppressionFactor(); this.cache = new double[hierarchies.length][]; for (int i = 0; i < cache.length; i++) { cache[i] = new double[hierarchies[i].getArray()[0].length]; Arrays.fill(cache[i], NOT_AVAILABLE); } final int[][] data = input.getArray(); this.hierarchies = new int[data[0].length][][]; for (int i = 0; i < hierarchies.length; i++) { this.hierarchies[i] = hierarchies[i].getArray(); } double[] min = new double[hierarchies.length]; Arrays.fill(min, 0d); double[] max = new double[hierarchies.length]; for (int i=0; i<max.length; i++) { max[i] = (input.getDataLength() * log2(input.getDataLength())) * Math.max(gFactor, sFactor); } if (config.isPrivacyModelSpecified(DataDependentEDDifferentialPrivacy.class)) { DataDependentEDDifferentialPrivacy dpCriterion = config.getPrivacyModel(DataDependentEDDifferentialPrivacy.class); k = (double)dpCriterion.getK(); <START> rootValues = new Integer[hierarchies.length]; <END> for (int i = 0; i < hierarchies.length; i++) { Integer rootValue = null; for (int[] row : hierarchies[i].getArray()) { if (rootValue == null) { rootValue = row[row.length-1]; } else if (row[row.length-1] != rootValue) { rootValue = null; break; } } rootValues[i] = rootValue; } } super.setMax(max); super.setMin(min); }</code><technical_language>is this array of type Integer[]. int[] is sufficient. encode a missing root -1, for example</technical_language>

Target:
protected void initializeInternal(final DataManager manager, final DataDefinition definition, final Data input, final GeneralizationHierarchy[] hierarchies, final ARXConfiguration config) { super.initializeInternal(manager, definition, input, hierarchies, config); RowSet subset = super.getSubset(config); this.cardinalities = new Cardinalities(input, subset, hierarchies); this.rows = input.getDataLength(); double gFactor = super.getGeneralizationFactor(); double sFactor = super.getSuppressionFactor(); this.cache = new double[hierarchies.length][]; for (int i = 0; i < cache.length; i++) { cache[i] = new double[hierarchies[i].getArray()[0].length]; Arrays.fill(cache[i], NOT_AVAILABLE); } final int[][] data = input.getArray(); this.hierarchies = new int[data[0].length][][]; for (int i = 0; i < hierarchies.length; i++) { this.hierarchies[i] = hierarchies[i].getArray(); } double[] min = new double[hierarchies.length]; Arrays.fill(min, 0d); double[] max = new double[hierarchies.length]; for (int i=0; i<max.length; i++) { max[i] = (input.getDataLength() * log2(input.getDataLength())) * Math.max(gFactor, sFactor); } if (config.isPrivacyModelSpecified(EDDifferentialPrivacyOptimal.class)) { EDDifferentialPrivacyOptimal dpCriterion = config.getPrivacyModel(EDDifferentialPrivacyOptimal.class); k = (double)dpCriterion.getMinimalClassSize(); rootValues = new int[hierarchies.length]; for (int i = 0; i < hierarchies.length; i++) { int rootValue = -1; for (int[] row : hierarchies[i].getArray()) { if (rootValue == -1) { rootValue = row[row.length-1]; } else if (row[row.length-1] != rootValue) { rootValue = -1; break; } } rootValues[i] = rootValue; } } super.setMax(max); super.setMin(min); }