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

- Rejestracja:ponad 9 lat
- Ostatnio:ponad 3 lata
- Postów:132
0
edytowany 3x, ostatnio: Blue_Carpet

- Rejestracja:prawie 10 lat
- Ostatnio:4 miesiące
- Lokalizacja:Hong Kong
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]

Blue_Carpet
Niee, chodzi mi o to ze np. dla n = 4 i k = 10; moze byc np. i = 0 -> 0ptk i = 1 -> 3.33 ptk i = 2 -> 6.66 ptk i = 3 -> 10 ptk uzyskałem takie wyniki poprzez: k / (n - 1)*i z wykluczeniem ostatniego i pierwszego wariantu i chyba w miare jest okej

katelx
no to paanie, trzeba mowic ze to nie musza byc inty i ze ma byc liniowo ;)
- Rejestracja:ponad 11 lat
- Ostatnio:prawie 3 lata
- Postów:57
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)));
}
edytowany 2x, ostatnio: Kermii