Dipende dai tuoi dati. Lo scenario peggiore è che si tratta di numeri distribuiti uniformemente.
In questo caso puoi trovare la mediana nel tempo O (N) come in questo esempio:
Supponiamo che i tuoi numeri siano 2,7,5,10,1,6,4,4,6,10,4,7,1,8,4,9,9,3,4,3 (l'intervallo è 1-10) .
Creiamo 3 secchi: 1-3, 4-7, 8-10. Si noti che la parte superiore e inferiore hanno le stesse dimensioni.
Riempiamo i secchi con i numeri, contiamo quanti cadono in ciascuno, il massimo e il minimo
- basso (5): 2,1,1,3,3, min 1, max 3
- medio (10): 7,5,6,4,4,6,4,7,4,4, min 4, max 7
- alto (5): 10, 10, 8, 9, 9, min 8, max 10
La media cade nel secchio di mezzo, ignoriamo il resto
Creiamo 3 bucket: 4, 5-6, 7. Low inizierà con un conteggio di 5 e con un massimo di 3 e con un minimo di 8 e un conteggio di 5.
Per ogni numero contiamo quanti cadono nel secchio basso e alto, il massimo e il minimo e manteniamo il secchio centrale.
- vecchio basso (5)
- basso (5): 4, 4, 4, 4, 4, max 4
- medio (3): 5,6,6
- alto (2): 7, 7, min 7
- vecchio alto (5)
Ora possiamo calcolare direttamente la mediana: abbiamo una situazione come questa
old low low middle high old high
x x x x x 4 4 4 4 4 4 5 6 6 7 7 x x x x x
quindi la mediana è 4.5.
Supponendo che tu sappia qualcosa sulla distribuzione, puoi mettere a punto come definire gli intervalli per ottimizzare la velocità. In ogni caso, la prestazione dovrebbe andare con O (N), perché 1 + 1/3 + 1/9 ... = 1.5
Sono necessari min e max a causa dei casi limite (ad es. Se la mediana è la media tra il massimo del vecchio minimo e l'elemento successivo).
Tutte queste operazioni possono essere parallelizzate, puoi fornire 1/100 dei dati a ciascun computer e calcolare i 3 bucket in ciascun nodo, quindi distribuire il bucket che conservi. Questo ti consente di utilizzare la rete in modo efficiente perché ogni numero viene passato in media 1,5 volte (quindi O (N)). Puoi anche batterlo se passi solo i numeri minimi tra i nodi (ad esempio se il nodo 1 ha 100 numeri e il nodo 2 ha 150 numeri, allora il nodo 2 può dare 25 numeri al nodo 1).
A meno che tu non sappia di più sulla distribuzione, dubito che tu possa fare meglio di O (N) qui, perché in realtà devi contare gli elementi almeno una volta.