/**
*
*/
package fr.unistra.pelican.util.vectorial.ordering;
/**
* @author Benjamin Perret
*
*/
public class SumAndLexicographicalOrdering extends VectorialOrdering {
private int [] bandMix=null;
/**
* @param bandMix
*/
public SumAndLexicographicalOrdering() {
super();
}
/**
* @param bandMix
*/
public SumAndLexicographicalOrdering(int[] bandMix) {
super();
this.bandMix = bandMix;
}
private double reducedNorm(double [] o)
{
double res=0.0;
for(int i=0;i<o.length;i++)
res+=o[i];
return res;
}
/* (non-Javadoc)
* @see fr.unistra.pelican.algorithms.experimental.perret.CC.Ordering.VectorialOrdering#compare(double[], double[])
*/
@Override
public int compare(double[] o1, double[] o2) {
int a = Double.compare(reducedNorm(o1), reducedNorm(o2));
if (a != 0)
return a;
else {
if (bandMix == null) {
for (int i = 1; i < o1.length; i++) {
int c = Double.compare(o1[i], o2[i]);
if (c != 0) {
return c;
}
}
} else {
for (int i = 0; i < o1.length; i++) {
int c = Double.compare(o1[bandMix[i]], o2[bandMix[i]]);
if (c != 0) {
return c;
}
}
}
}
return 0;
}
}