Quel est le moyen le plus rapide de compter les bits UInt32
Quel est le moyen le plus rapide pour compter le nombre de bits (c'est à dire compter le nombre de 1s) dans un UInt32
sans l'utilisation d'une table? Est-il un moyen de compter dans O(1)
?
Regardez la réponse de ce post.
OriginalL'auteur user1437139 | 2012-08-29
Vous devez vous connecter pour publier un commentaire.
Est un doublon de:
comment le mettre en œuvre-bitcount-en utilisant uniquement au niveau du bit-opérateurs
ou
best-algorithme-à-compter-le-nombre-de-jeu-bits-dans-un-d'un entier 32 bits
Et il y a beaucoup de solutions à ce problème. Celui que j'utilise est:
OriginalL'auteur Manuel Amstutz
La peu-se tourner les hacks page a un certain nombre d'options.
Bien sûr, on pourrait dire qu'une itération sur l'ensemble des 32 bits est possible O(N) dans le sens que c'est le même coût à chaque fois 🙂
Pour des raisons de simplicité, je considérerais la recherche de-table-par-octet, ou Brian Kernighan est chouette idée qui parcourt autant de fois qu'il y a de bits jeu, je voudrais écrire comme:
Si vous n'aimez pas l'idée de remplir une 256 entrées de table de recherche, une recherche-par-nybble serait encore assez rapide. Rappelez-vous, il est possible que 8 tableau recherches peuvent être plus lentes que 32 simples opérations sur les bits.
Bien sûr, il vaut la peine de tester votre application réelle de la performance avant d'aller particulièrement approches ésotériques... est-ce vraiment un goulot d'étranglement pour vous?
OriginalL'auteur Jon Skeet
OriginalL'auteur chandan gupta