C'est une question intéressante que j'ai trouvée sur le Web. Étant donné un tableau contenant n nombres (sans aucune information à leur sujet), nous devrions pré-traiter le tableau en temps linéaire afin de pouvoir retourner les k plus petits éléments en temps O (k), quand on nous donne un nombre 1 <= k <= n
J'ai discuté de ce problème avec des amis mais personne n'a pu trouver de solution; Toute aide serait appréciée!
notes rapides: -l'ordre des k plus petits éléments n'est pas important -les éléments dans le tableau sont des nombres, peuvent être des entiers et peuvent ne pas l'être (donc pas de tri radix) -le nombre k n'est pas connu dans la phase de prétraitement. le prétraitement est en temps O (n). la fonction (trouver k plus petits éléments) sur le temps O (k).
Réponses:
Prétraitez le tableau de valeurs dans le temps O ( n ) :n O ( n )
Le temps total de précalcul est àO(1+2+4+...+n)⊆O(n)
Répondez à une requête pour les plus petits éléments de A dans le temps O ( k ) :k A O(k)
contient les k plus petits éléments.A[1..k] k
Les références:
la source
la source
Frederickson, Greg N. , Un algorithme optimal pour la sélection dans un min-tas , Inf. Comput. 104, n ° 2, 197-214 (1993). ZBL0818.68065 ..
la source
la source