public Map solve()

in core/src/main/java/org/apache/sdap/mudrod/weblog/partition/KGreedyPartitionSolver.java [37:96]


  public Map<String, Integer> solve(Map<String, Double> labelNums, int k) {
    List<Double> lista = null;
    List<String> months = null;

    if (!this.bsorted) {
      LinkedHashMap<String, Double> sortedMap = (LinkedHashMap<String, Double>) this.sortMapByValue(labelNums);
      lista = new ArrayList<>(sortedMap.values());
      months = new ArrayList<>(sortedMap.keySet());
    } else {
      lista = new ArrayList<>(labelNums.values());
      months = new ArrayList<>(labelNums.keySet());
    }

    List<List<Double>> parts = new ArrayList<>();
    List<List<String>> splitMonths = new ArrayList<>();

    for (int i = 0; i < k; i++) {
      List<Double> part = new ArrayList<>();
      parts.add(part);

      List<String> monthList = new ArrayList<>();
      splitMonths.add(monthList);
    }

    int j = 0;
    for (Double lista1 : lista) {

      Double minimalSum = -1.0;
      int position = 0;
      for (int i = 0; i < parts.size(); i++) {
        List<Double> part = parts.get(i);
        if (minimalSum == -1) {
          minimalSum = suma(part);
          position = i;
        } else if (suma(part) < minimalSum) {
          minimalSum = suma(part);
          position = i;
        }
      }

      List<Double> part = parts.get(position);
      part.add(lista1);
      parts.set(position, part);

      List<String> month = splitMonths.get(position);
      month.add(months.get(j));
      splitMonths.set(position, month);
      j++;
    }

    Map<String, Integer> labelGroups = new HashMap<>();
    for (int i = 0; i < splitMonths.size(); i++) {
      List<String> list = splitMonths.get(i);
      for (String aList : list) {
        labelGroups.put(aList, i);
      }
    }

    return labelGroups;
  }