Esistono algoritmi o strutture di dati che devono trovare il valore mediano di un set?


14

Ho letto questo libro per la mia classe, algoritmi randomizzati. In questo libro particolare, c'è un'intera sezione dedicata alla ricerca della mediana di un array usando la selezione casuale, che porta ad un algoritmo più efficiente. Ora, volevo sapere se ci sono applicazioni pratiche di questo algoritmo, nel campo dell'informatica, oltre a un miglioramento teorico. Esistono algoritmi o strutture di dati che devono trovare la mediana di un array?


3
Potresti dare un'occhiata a quicksort: scegliendo la mediana come perno, il suo caso peggiore può essere evitato (runtime nel caso peggiore = O (n log n) invece di O (n ^ 2)) e la profondità di ricorsione sarà ridotto a icona (log2 (n)).
hoffmale,

1
@hoffmale: Ma ciò non richiede di trovare la mediana. Richiede di trovare un valore ragionevolmente vicino alla mediana. Ad esempio, trovare un perno che non rientri tra il 5% superiore o il 5% inferiore garantisce O (n log n).
gnasher729,

1
@ gnasher729: ma ciò non minimizzerà la profondità di ricorsione. Entrambe le proprietà sono importanti, ad esempio in un ambiente in tempo reale con risorse limitate.
hoffmale,

@hoffmale, per inciso, la solita notazione per il logaritmo di base 2 (in particolare tra gli informatici) è semplicemente "lg" come in (lg (n)).
Wildcard il

@ gnasher729 Poiché l'argomento è algoritmi stocastici, questo (= ragionevolmente vicino) è probabilmente proprio quello che stanno facendo questi algoritmi.
Konrad Rudolph,

Risposte:


17

se ci sono applicazioni pratiche di questo algoritmo nel campo dell'informatica oltre ad essere un miglioramento teorico

L'applicazione di questo algoritmo è banale: la usi ogni volta che vuoi calcolare una mediana di un insieme di dati (array in altre parole). Questi dati possono provenire da domini diversi: osservazioni astronomiche, scienze sociali, dati biologici, ecc.

Tuttavia, vale la pena menzionare quando preferire la mediana al significato (o alla modalità). Fondamentalmente, nelle statistiche descrittive, quando i nostri dati sono perfettamente distribuiti, allora media, modalità e mediana sono uguali, cioè coincidono. D'altra parte, quando i nostri dati sono inclinati, ovvero la distribuzione della frequenza per i nostri dati è (sinistra / destra) distorta, la media non fornisce la migliore posizione centrale perché l'asimmetria lo sta trascinando dal valore tipico a sinistra o destra , mentre la mediana non è così fortemente influenzata dai dati distorti, e quindi mantiene al meglio questa posizione indicando un valore tipico. Pertanto, calcolare una mediana potrebbe essere preferibile quando si hanno a che fare con dati distorti.

Inoltre, l'apprendimento automatico è il luogo in cui i metodi statistici sono ampiamente utilizzati, ad esempio il clustering di -mediansk .


Grazie! Questo è estremamente utile! Altri algoritmi o tecniche che potrebbero essere necessari per trovare una mediana?
Sharan Duggirala,

5
Sebbene ciò sia abbastanza vero (+1), il più delle volte nelle statistiche applicate i dati sarebbero ordinati prima di trovare la mediana, poiché in molti o anche nella maggior parte dei contesti in cui si desidera la mediana, così almeno alcuni dell'altro ordine statistiche.
John Coleman,

1
Interessante. Ho sentito parlare del clustering di -med, ma non del clustering di k -medians. kk
svick,

13

Il filtro mediano è comune nella riduzione di alcuni tipi di rumore nell'elaborazione delle immagini. Soprattutto rumore di sale e pepe. Funziona selezionando il valore mediano in ciascun canale di colore in ogni quartiere locale dell'immagine e sostituendolo con esso. Quanto sono grandi questi quartieri può variare. Le dimensioni del filtro più diffuse (quartieri) sono ad esempio 3x3 e 5x5 pixel.


1
La mediana si applica non solo al rumore nelle immagini ma al rumore in quasi tutte le letture dei sensori, di cui le telecamere sono solo un tipo di sensore. I libri di testo scolastici mostrano belle forme sinusoidali e quadrate con cui lavorare. Nel mondo reale non si verificano quasi mai dati puliti del genere. Se lo fa, è quasi sempre perché qualcun altro si è preso cura di appianare i dati prima di prenderli. ad es. dei dati di lettura del sensore più tipici di cui è necessario selezionare il valore "corretto": (1, 3, 5, 65, 68, 70, 75, 80, 82, 85, 540, 555). Ho ordinato i dati per renderli più ovvi.
Dunk

1
Sì hai ragione. Ma sarebbe una risposta molto lunga e noiosa se annotassimo tutte le piccole cose nell'elaborazione del segnale dove può essere utilizzato.
matematico

1
Le mediane nell'elaborazione delle immagini possono anche essere utilizzate per pixel con sequenze di circa 5 foto, che è un modo per sbarazzarsi del rumore temporale (ovvero i turisti che bloccano la vista)
Hagen von Eitzen,

@HagenvonEitzen Hai ragione! In realtà stavo pensando a qualcosa di abbastanza simile solo pochi giorni fa. Molti turisti intorno ...
Mathathler,

10

Il calcolo delle mediane è particolarmente importante negli algoritmi randomizzati.

341±ϵA34kA(1±ϵ)kA(1ϵ)A(1+ϵ)k .

2nn


5

La mediana delle mediane ha alcune applicazioni:

  • Trovare un perno per quicksort, che porta alla sua complessità peggiore O(nlogn).
  • Trovare un perno per selezionare rapidamente, portando la complessità peggiore O(n), a partire dal O(n2).

1
In realtà l'utilizzo della mediana di mediane per selezionare un perno per quicksort sembra molto probabile che rallenta in pratica l'algoritmo, poiché uccide completamente la località della cache, che è il principale contributo alla rapidità di quicksort. Ma il tuo commento sulla complessità del caso peggiore è ovviamente corretto.
wchargin,

@wchargin Quali alternative suggerisci? Nessuna implementazione pratica di quicksort che io conosca utilizza un pivot sensibile alla cache, perché così facendo si traduce in atroce runtime nel caso peggiore. Il documento fondamentale "Ingegnerizzare una funzione di ordinamento" discute le alternative, e nessuna di esse è consapevole della cache (e tuttavia supera la selezione ingenua del perno).
Konrad Rudolph,

1
@wchargin ... rispondendo alla mia domanda: Java 7 è passato a una nuova procedura dual-pivot di cui non ero a conoscenza. Questo è intrigante e potrebbe rendere obsoleti gli algoritmi di pivot mediano.
Konrad Rudolph,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.