private List < CLIQUESubspace > pruneDenseSubspaces ( List < CLIQUESubspace > denseSubspaces ) { int [ ] [ ] means = computeMeans ( denseSubspaces ) ; double [ ] [ ] diffs = computeDiffs ( denseSubspaces , means [ 0 ] , means [ 1 ] ) ; double [ ] codeLength = new double [ denseSubspaces . size ( ) ] ; double minCL = Double . MAX_VALUE ; int min_i = - 1 ; for ( int i = 0 ; i < denseSubspaces . size ( ) ; i ++ ) { int mi = means [ 0 ] [ i ] , mp = means [ 1 ] [ i ] ; double cl = codeLength [ i ] = log2OrZero ( mi ) + diffs [ 0 ] [ i ] + log2OrZero ( mp ) + diffs [ 1 ] [ i ] ; if ( cl <= minCL ) { minCL = cl ; min_i = i ; } } return denseSubspaces . subList ( 0 , min_i + 1 ) ; }
Performs a MDL - based pruning of the specified dense subspaces as described in the CLIQUE algorithm .