Auf Thema antworten

Hallo, ich versuche die Formel die im Anhang ist zu implementieren.

Das habe ich auch bereits gemacht, allerdings extrem ineffizient. Hat jemand eine Idee wie ich die doppelte-Schleife loswerde? Ideal wäre so effizient wie möglich, weights ist eine Hashmap, als Key ein Integer und Value ein Double (das Gewicht, zwischen 0 und 1) und x eine Integer-ArrayList.


[code=Java]private int length(List<Integer> x) {

    double totalWeight = sigma(x);

    double subWeight;


    for (int j = 1; j < x.size(); j++) {

      subWeight = 0;

      for (int i = 0; i < j; i++)

        subWeight = weights.containsKey(x.get(i)) ? weights.get(x.get(i)) : 1;


      if ((totalWeight - subWeight) / (totalWeight + subWeight) < threshold)

        return j;

    }

    return x.size();

  }[/code]


[code=Java]private double sigma(List<Integer> x) {

    double weight = 0;

    for (Integer t : x)

      weight += weights.containsKey(x) ? weights.get(x) : 1;


    return weight;

  }[/code]



Oben