Selezionare in unione di matrici ordinate: già noto?


12

Sto cercando riferimenti bibliografici per il seguente algoritmo / problema: l'ho chiamato "BiSelect" o "t-ary Select" o "Select in Union of Sorted Arrays", ma immagino che sia stato introdotto prima con un altro nome?

Problema

Considera il seguente problema:

Dato disgiunti ordinato array , di rispettive dimensioni , e un intero , qual è il valore -esimo della loro unione sorted ?A 1 , , A k n 1 , , n k t [ 1 .. n i ] t i A ikA1,,Akn1,,nkt[1..ni]t iAi

soluzioni

Esiste un algoritmo molto semplice ed elegante in esecuzione nel tempo se k = 2 : se k = 2 , confronta A_1 [t / 2] con A_2 [t / 2] e ricorrere su A_1 [t / 2..t] e A_2 [1..t / 2] o A_1 [1..t / 2] e A_2 [t / 2..t] di conseguenza, in entrambi i casi con parametro t / 2 (e alcune ottimizzazioni minori quando n_1 o n_2 sono inferiori a t ).O(lgmin{n1,n2,t})k=2k=2A1[t/2]A2[t/2]A1[t/2..t]A2[1..t/2]A1[1..t/2]A2[t/2..t]t/2n1n2t

Questo si generalizza a un algoritmo leggermente più sofisticato in esecuzione nel tempo O(klgt) per valori più grandi di k , basato sul calcolo della mediana dei valori Ai[t/k] per i[1..k] : il t/k elementi più piccoli possono essere ulteriormente ignorati negli array k/2 cui Ai[t/k] è più piccolo della mediana e gli elementi dei ranghi in [tt/k..] possono essere ulteriormente ignorati in k/2 altre matrici, con conseguente dimezzamento di t in ciascuna ricorrenza (e un costo di O(k) per la mediana).

Riferimenti?

Sono contento delle mie soluzioni, ma suppongo che il problema (e la sua soluzione) fosse già noto. È correlato all'algoritmo del tempo lineare per il calcolo della mediana (ordinando i gruppi di dimensioni e ricorrendo alla mediana delle loro medie), ma è leggermente più generale. Ho chiesto a diverse università al Madalgo di Aarhus (Danimarca), e poi alcune altre al seminario Stringology (Rouen), senza successo: spero che qualcuno più esperto possa aiutare su Stack Exchange ...5

motivazioni

Le soluzioni a questo problema hanno applicazioni alla struttura di dati differiti sugli array (in effetti, può essere vista come un operatore in una struttura di dati differiti per l'unione di array ordinati); e in un modo più contorto, al calcolo adattivo di codici liberi prefisso ottimali.

Risposte:


2

L'algoritmo descritto da Frederickson e Johnson nel 1982 ritiene che tutti i set abbiano le stesse dimensioni. Hanno anche descritto nel 1980 una soluzione ottimale che sfrutta le diverse dimensioni dei set ordinati. La complessità di questo algoritmo è all'interno di .O(k+i=1klogni)

Riferimento

Greg N. Frederickson e Donald B. Johnson. 1980. Selezione e classifica generalizzate (versione preliminare). In Atti del dodicesimo simposio annuale ACM sulla teoria dell'informatica (STOC '80). ACM, New York, NY, USA, 420-428. DOI = 10.1145 / 800141.804690 http://doi.acm.org/10.1145/800141.804690



0

Il caso k = 2 si presenta in ordine di unione parallela poiché la fusione di due matrici ordinate da thread diversi deve essere suddivisa tra due thread per mantenere la stessa quantità di parallelismo. Questa soluzione per i compiti è un riferimento.

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.