Je suis un programmeur Java, et je l'ai récemment commencé à la concurrence de codage (Codechef, Hackerearth, etc ..)Manipulation efficace des bits en Java?
J'ai le sentiment que mordit la manipulation est vraiment très lent en Java en matière de valeurs d'entrée très grandes. De mon expérience, le même code C/C++ (Par le même je veux dire si converti de Java avec le même algorithme, même stratégie, etc. Je ne change pas ma logique lors de la conversion de Java en C/C++ ou vice versa) exécute tous les cas de test avec succès, génère une limite de temps dépassée en Java. Je suis conscient que la plupart des sites de programmation compétitifs fournissent un temps d'exécution 2x pour les programmes Java, mais il dépasse tout de même la limite de temps.
Dans des langages comme C++, nous avons des fonctions comme __builtin_popcount
qui peuvent exploiter les fonctions intégrées du CPU qui sont très rapides. De telles choses ne sont pas disponibles en Java. Certaines fonctions comme java.lang.Integer.bitCount()
ne fonctionneront que pour un int
32 bits.
Alors devrions-nous préférer aller avec C++ pour de tels problèmes? Devrions-nous même envisager de résoudre des problèmes de type manipulation de bits en utilisant Java? Si non, alors y a-t-il des astuces efficaces plutôt que d'appliquer notre propre logique?
(Il y a aussi le fait que les différentes machines d'architecture prendront différentes de temps, mais permet d'ignorer cela. Ma question est dans le contexte de la programmation concurrentielle)
Pourquoi est-ce marqué C++? Les recommandations linguistiques ne reposent pas sur des faits, nous ne pouvons pas fournir une réponse qui ne soit pas fondée uniquement sur des opinions. –
La manipulation des bits n'est pas lente en Java, et Java a des opérateurs de bits similaires à C/C++. Vous faites probablement d'autres choses qui ralentissent, comme la boxe/unboxing. Sans voir votre code Java, nous ne pouvons pas dire ce qui le rend lent. – Jesper
Il n'y a pas de '__builtin_popcount' en C++. Si votre programme expire, c'est parce que votre solution est inefficace, pas à cause de Java. Si vous avez besoin de recourir aux intrinsèques du compilateur pour ne pas perdre de temps en C++, vous faites quelque chose de mal. – molbdnilo