Cette question et cette question m'ont fait réfléchir un peu. Pour trier un tableau de longueur avec éléments uniques dans , nous devons être en mesure de stocker le nombre de valeurs dans le tableau. Il y a quelques suggestions, mais je cherche un moyen de le faire dans le pire des cas, le temps linéaire. Plus précisement:
Compte tenu de la liste de éléments avec éléments distincts, déterminer une liste de tuples de tous les éléments uniques tel que est le nombre d'éléments dans .
Voici quelques idées (ratées) que j'ai eues et qui ont été suggérées:
- Arbre de recherche binaire équilibré - Avec cela, il faudra pour insérer dans l'arbre et augmenter les valeurs. Après les insertions, nous pourrions faire une traversée d'arbre dans . Ainsi, le temps total sort à qui est trop lent.
- Hash Map - Avec cela, nous pouvons obtenir inserts attendus et donc temps prévu . Cependant, ce n'est toujours pas le pire cas .
- Espace vide Mapping - Trouvez le minimum et maximum dans l' élément . Allouez (mais n'initialisez pas ) suffisamment de mémoire pour couvrir cette plage. Utilisez cette mémoire essentiellement comme une carte de hachage et incluez un hachage aléatoire afin que nous n'essayions pas d'accéder à la mémoire corrompue. Cette stratégie présente des problèmes. (1) Il est probabiliste avec une probabilité d'échec très très très faible, mais toujours pas garanti. L'utilisation de la mémoire comme celle-ci nous limite aux contraintes à virgule flottante ou entière.
- Tableaux associatifs - Il existe de nombreux autres tableaux associatifs qui peuvent être utilisés, similaires aux cartes de hachage et aux BST, mais je n'en trouve pas qui correspondent à ces contraintes.
Peut-être qu'il y a une méthode évidente qui me manque, mais je pense aussi que cela pourrait ne pas être possible. Quelles sont vos pensées?