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 i
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 ).
Questo si generalizza a un algoritmo leggermente più sofisticato in esecuzione nel tempo per valori più grandi di , basato sul calcolo della mediana dei valori per : il elementi più piccoli possono essere ulteriormente ignorati negli array cui è più piccolo della mediana e gli elementi dei ranghi in possono essere ulteriormente ignorati in altre matrici, con conseguente dimezzamento di in ciascuna ricorrenza (e un costo di 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 ...
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.