Sie nicht diese rechnerisch weniger komplex machen. Es ist O (n) die Anzahl der Bits, oder, wie die Antwort mit dem & Trick zeigte, O (n) die Anzahl der Bits, die auf 1 gesetzt sind; aber wenn nicht alle Zahlen, die Sie verwenden, ein Sonderfall sind, sollte der letztere im Durchschnitt n/2 sein, also sind beide dieser O (n) Zahlen gleich.
Und der Lookup-Table-Trick tut natürlich nichts für die Rechenkomplexität; es zahlt nur für die Zeit mit Platz, aber ohne die zugrundeliegenden Ökonomien zu ändern, die sind, dass Sie jedes Bit einmal untersuchen müssen irgendwie und es gibt keinen Weg darum herum. Sie können logischerweise keine Frage zu den Bits in der Zahl beantworten, ohne sie zu prüfen.
Nun, ich bin ein bisschen schlampig, da viele dieser Beispiele eigentlich O (n^2) sind, da man in Python die ganze Zahl auf einmal untersuchen muss, also mit einer langen Python-Zahl von, sagen wir, 100 Bytes, a + oder & oder a/Operation wird jedes Byte mindestens einmal betrachten, und das wird immer wieder vorkommen, bis die Zahl auf Null reduziert wird (in den oben beschriebenen Schemata), also diese wiederum sind wirklich O (n^2) Operationen. Ich bin mir nicht sicher, ob Python hier eine echte O (n) -Lösung erlaubt.
Wie auch immer: wenn Sie wirklich Fragen über computational Komplexität, die speziell Big-O-Analyse bedeutet, das ist Ihre Antwort. :-)
Ist dies ein Duplikat von http://stackoverflow.com/questions/843737/count-bits-in-the-number-closed – ChrisW
@ ChrisW- Python und c sind zwei verschiedene lanaguages – TStamper
Es ist kein genaues Duplikat. Bitweise Operationen in Python sind viel teurer, als dass c. –