Entrée:
un ensemble de tableaux (de nombres).
Les éléments de chaque tableau sont triés, mais l'ensemble des tableaux n'est pas nécessairement trié. Les tableaux ne sont pas nécessairement de la même taille. Le nombre total d'éléments est.
Sortie: lee plus petit élément parmi tous les éléments de l'entrée.
Quel est l'algorithme le plus efficace pour ce problème?
Est-il possible, par exemple, d'atteindre un temps de fonctionnement de ?
Réponses:
Vous pouvez le faire enO(l+k log l) temps et O(l) espace supplémentaire comme suit:
Si vous remplacez le tas binaire par un tas de Fibonacci, je pense que cela vous amène à amortiO(l+k) temps, mais en pratique, ce sera plus lent que le tas binaire à moins l est énorme.
Je soupçonne que le segment de tas de Fibonacci est optimal, car intuitivement vous allez devoir inspecter au moinsk éléments pour trouver le k e le plus petit, et vous devrez inspecter au moins un élément de chacun des l tableaux puisque vous ne savez pas comment ils sont triés, ce qui donne immédiatement une limite inférieure de Ω ( max ( k , l ) ) = Ω ( k + l ) .
la source
Voici un randomiséO(ℓlog2n) algorithme. Il peut probablement être dérandomisé en utilisant la même astuce que celle utilisée pour dérandomiser la sélection rapide habituelle.
Nous émulons l'algorithme de sélection rapide classique. Dans chaque phase, vous choisissez un pivot et calculez le nombre d'éléments en dessous, enO(ℓlogn) , en utilisant la recherche binaire dans chaque liste. Ensuite, vous supprimez les éléments du mauvais côté et répétez. Le processus se termine aprèslogn itérations dans l'attente.
la source
Cela semble être résolu par l'étude de la sélection et du classement généralisés (version préliminaire) par Frederickson et Johnson dans STOC '80.
Ils donnent des limites supérieures et inférieures de:Θ(ℓ+∑ℓi=1log|Ai|) qui se révèle être ℓlogn pour la plupart des distributions de taille de tableau.
L'algorithme réel pour atteindre la limite supérieure est apparemment donné dans un article précédent: Algorithmes optimaux pour générer des informations quantiles dans X + Y et des matrices avec des colonnes triées , Proc. 13th Annual Conference on Information Science and Systems, Université Johns Hopkins (1979) 47-52.
la source
Uneℓ -la fusion prend du temps Θ(nlogℓ) (utilisez un moyen efficace pour représenter une file d'attente prioritaire des éléments de tête dans chaque liste), puis vous choisissez le k -th élément en temps constant. Je pense que cela est discuté dans "Tri et recherche" de Knuth pour le tri. Obtenir le plus petit (ou le plus grand) prend clairementΘ(ℓ) , pour un tableau non trié, il est O(n) IIRC.
Veuillez décrire votre algorithme.
la source