Wygenerowanie wag dla n opcji

0

Witam,
W jaki sposób dosyć dobrze mógłbym wygenerować wagi dla n opcji?
Przykład mam 4 opcje - na które przeznaczyć mogę 20 ptk (pierwsza musi mieć 0 ptk ostatnia max ptk czyli 20 ptk):
opcja 1 -> 0
opcja 2 -> x
opcja 3 -> x
opcja 4 -> 20
Dla n opcji i k punktów podobna sytuacja:
opcja 1 -> 0
opcja 2 -> x
...
opcja n-1 -> x
opcja n -> k ptk
Zastanawiam się w jaki sposób dosyć dobrze można przydzielać te punkty.
Myślałem np. max / n albo max / n - 1
i podczas iterowania dodawać np. max / n - 1 = a
dla i = 0 -> 0
dla i = 1 -> a
dla i = 2 - >2a
...
dla i = n -> max
ale dla większej liczby opcji otrzymywane wyniki są słabe. Ktoś ma jakiś pomysł?
@Edit
W sumie te max / n - 1 daje nawet okej wyniki

0

nie wiem czy rozumiem o co ci chodzi i jaka technologia, ale zakladajac jave i po prostu "losowy" rozklad poza poczatkiem i koncem:

static int[] gen(int n, int k) {
    if(n < 2 || k < 1) {
        throw new RuntimeException("my breath ceases...");
    }
    int[] options = new int[n];
    for(int i = 1; i < n - 1; i++) {
        options[i] = (int)(Math.random() * (k - 1) + 1); // [1, k-1]
    }
    options[n-1] = k;
    return options;
}

public static void main (String[] args) {
    System.out.println(Arrays.toString(gen(100, 20)));
}

wynik:
[0, 9, 3, 16, 2, 2, 3, 9, 3, 18, 8, 12, 12, 10, 2, 9, 17, 13, 8, 15, 12, 8, 18, 18, 8, 12, 10, 3, 15, 17, 7, 6, 15, 17, 14, 7, 11, 10, 14, 15, 2, 2, 16, 7, 9, 15, 3, 18, 13, 19, 4, 19, 2, 2, 2, 13, 19, 3, 6, 9, 7, 17, 1, 8, 4, 10, 16, 19, 7, 6, 10, 7, 13, 12, 13, 9, 9, 8, 4, 2, 12, 19, 12, 8, 4, 11, 4, 3, 7, 6, 8, 13, 19, 8, 2, 3, 8, 15, 19, 20]

1

Na podstawie informacji dodanych w poście i komentarzach do postu @katelx pozwalam sobie edytować rozwiązanie @katelx do takiej formy:

static double[] gen(int n, int k) {
    if(n < 2 || k < 1) {
        throw new RuntimeException("my breath ceases...");
    }
    double[] options = new double[n];
    double diff = (double)k / n;
    for(int i = 1; i < n - 1; i++) {
        options[i] = options[i - 1] + diff;
    }
    options[n-1] = k;
    return options;
}

public static void main (String[] args) {
    System.out.println(Arrays.toString(gen(100, 20)));
}
0

przy takich wymaganiach mozna to zrobic nowoczesniej, mianowicie:

static double[] gen(int n, int k) {
    return IntStream.rangeClosed(0, n).mapToDouble(i -> (double)i * k / n).toArray();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1