Nous voulons un algorithme qui, étant donné un tableau de longueur d'entiers, trouve la différence minimale entre deux entiers dans le tableau.
Un tel algorithme consiste à trier le tableau et à vérifier les paires de nombres adjacentes. Cela prend du temps .
Existe-t-il un moyen plus rapide, par exemple, un algorithme ?
algorithms
arrays
bateau
la source
la source
Réponses:
Cela dépend de votre modèle de calcul. Si vous autorisez uniquement l'arithmétique et les comparaisons (le modèle d'arbre de décision algébrique),Ω ( n logn ) borne inférieure pour la distinction des éléments , le problème de décider si tous les éléments sont distincts. Votre problème est bien sûr encore plus difficile, donc la même borne inférieure s'applique.
(Il y a des petits caractères: la limite inférieure ne tient que si le degré des polynômes comparés est limité. Si tout ce que vous faites est de comparer différentes différencesXje-Xj , alors vous êtes prêt à partir. Le modèle d'arbre de décision algébrique vous permet également de comparer des polynômes plus généraux dans les entrées, tant qu'ils ont un degré borné.)
Il existe d'autres modèles qui pourraient mieux fonctionner - par exemple, dans certains modèles, vous pouvez trier les entiers danso ( n logn ) . Mais j'imagine que vous ne voulez pas autoriser le genre de ruse utilisé dans de tels algorithmes.
la source
Si les entiers dans le tableau ont un nombre limité de chiffres, vous pouvez trier un tableau avec l' algorithme de tri radix , c'est-à-dire O (kN) et ensuite vérifier les paires de nombres adjacentes (O (N))? La complexité résultante sera O ((k + 1) N), linéaire.
la source