Algoritmo per 'segmentare' un numero in blocchi di n?

-1

Non sono sicuro di come pronunciare correttamente il titolo, ma il problema è simile a questo:

Ho 5 nodi e il nodo 0 è il "master".

L'utente inserisce un numero, ad es. 100 al maestro.

master "divide" il numero in 5 parti, 0 - 20, 21 - 40, 41 - 60, 61 - 80, 81 - 100.

i nodi prenderanno quindi il numero, eseguiranno alcuni calcoli e restituiranno il risultato al master.

Il problema è la parte di segmentazione. Cosa succede se il numero è qualcosa di strano ad es. 101?

    
posta Edwin 03.03.2015 - 21:25
fonte

1 risposta

1

Il tuo problema risolve il principio pidgeonhole ( link ).

Semplicemente sa che se hai N elementi e vuoi metterli in contenitori M, dove N è maggiore di M, allora almeno un contenitore deve contenere almeno ceil(N/M) (dove ceil (x) è il intero più piccolo maggiore o uguale a x) articoli.

Puoi risolvere il tuo problema ad esempio con il seguente algoritmo:

algorithm1(N,M)
    A = Array of size M
    i = remainder(N/M)
    for x from 0 to i-1
        A[x] = ceil(N/M)
    endfor
    for y from i to M-1
        A[y] = floor(N/M)
    endfor
    return A

Questo distribuirà i tuoi oggetti equamente tra i contenitori.

    
risposta data 04.03.2015 - 00:10
fonte

Leggi altre domande sui tag