Come distribuire uniformemente gli oggetti lungo un array in modo che i vicini diventino equidistanti?

0

Ho R oggetti, dove R >= 3 .

Ho un array di dimensioni N, dove N > R .

Vorrei determinare in quali indici dell'array devo mettere gli oggetti R in modo che la distanza tra due vicini sia uguale, o il più simile possibile.

Esempio:

per N = 4 , R = 3

{1, 2, 3, 4}
{o, o,  , o}

o

{1, 2, 3, 4}
{o,  , o, o}

per N = 17 , R = 10

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}
{o, o, o,  , o,  , o,  , o,   ,  o,   ,  o,   ,  o,   ,  o}

o

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}
{o, o,  , o,  , o,  , o,  ,  o,   ,  o,   ,  o,   ,  o,  o}

Naturalmente ho bisogno che gli oggetti siano la forma più lontana possibile, quindi non è accettabile:

{1, 2, 3, 4, 5, 6, 7}
{o, o, o, o,  ,  ,  }

{1, 2, 3, 4, 5, 6, 7, 8}
{o,  , o,  , o,  , o,  }

Fondamentalmente la prima e l'ultima posizione dell'array saranno sempre occupate.

    
posta Gustavo 01.10.2016 - 18:38
fonte

2 risposte

0

Per qualsiasi N >= 2 , R >= 2 e N >= R :

static boolean[] findIndexes(int n, int r) {
    boolean[] arrayWithObjects = new boolean[n];

    int quotient = (n-1) / (r-1);
    int remainder = (n-1) % (r-1);

    int index = 0;
    do {
        arrayWithObjects[index] = true;
    } while( (index += quotient + (remainder-- > 0 ? 1 : 0)) < n );

    return arrayWithObjects;
}
    
risposta data 12.10.2016 - 00:51
fonte
2

Metti il 0 ° elemento all'indice 0, l'elemento R-1th all'indice N-1.

Calcola d = floor(N / R) .

Questa funzione descrive gli indici di destinazione per il primo elemento R-2th: i(x) = 2 * d * x ;

examles:

R=3,N=4
{0, 1, 2, 3}
{o,  , o, o}

R=7 N=12
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11}
{o,  , o,  , o,  , o,  , o,  , o, o}
    
risposta data 01.10.2016 - 18:55
fonte

Leggi altre domande sui tag