Étant donné que sont des entiers tels que pour tous les , et l'occurrence de chacun nombre sauf un nombre particulier dans est un nombre impair. Essayez de trouver le nombre dont l'occurrence est un nombre pair.
Il existe un algorithme : nous trions en , et en plusieurs morceaux, dont la valeur des éléments est la même, nous pouvons donc compter l'occurrence de chaque élément.
Je veux trouver le pire des cas - - temps et - espace.
En supposant que et , le tri radix n'est donc pas acceptable. Les opérations binaires au niveau du bit sont acceptables, par exemple, .
algorithms
search-algorithms
Yai0Phah
la source
la source
Réponses:
Voici une idée pour un algorithme simple; comptez toutes les occurrences!
Dans l'ensemble, cela vous donne un algorithme à temps linéaire qui peut utiliser (dans le sens d'allouer) beaucoup de mémoire. Notez que pouvoir accéder de façon aléatoire à en temps constant indépendamment de est crucial ici.mC m
Un supplémentaire lié à l'espace est plus difficile avec cette approche; Je ne connais aucune structure de données de dictionnaire qui offre une recherche de temps . Vous pouvez utiliser des tables de hachage pour lesquelles voici des implémentations avec temps de recherche attendu ( la taille de la table, le nombre d'éléments stockés) afin que vous puissiez obtenir arbitrairement bien avec un espace linéaire - dans l'attente. Si toutes les valeurs dans correspondent à la même valeur de hachage, vous êtes foutu.O ( 1 ) O ( 1 + k / n ) n k AO(n) O(1) O(1+k/n) n k A
la source
Une solution presque triviale - qui utilise cependant l' espace - consiste à utiliser une carte de hachage. Rappelons qu'une carte de hachage a amorti le temps d'exécution pour ajouter et rechercher des éléments.O ( 1 )Θ(n) O(1)
Par conséquent, nous pouvons utiliser l'algorithme suivant:
Attribuer une carte de hachage . Itérer sur . Pour chaque élément , augmentez le nombre d'occurrences vues, ie .A i ∈ A H ( i ) + +H A i∈A H(i)++
Parcourez l'ensemble de clés de la carte de hachage et vérifiez laquelle des clés a un nombre pair d'occurrences.
Maintenant, c'est un algorithme simple qui n'utilise pas vraiment de gros truc, mais parfois même cela suffit. Sinon, vous voudrez peut-être spécifier les restrictions d'espace que vous imposez.
la source