Non si può fare questo computazionalmente meno complessa. Sarà O (n) il numero di bit o, come la risposta con il trucco &, O (n) il numero di bit impostato su 1; ma a meno che tutti i numeri che stai usando siano un caso speciale, quest'ultimo dovrebbe essere in media n/2, quindi entrambi i numeri di O (n) sono gli stessi.
E il trucco della tabella di ricerca, ovviamente, in realtà non fa nulla per la complessità computazionale; sta pagando solo il tempo con lo spazio ma senza cambiare l'economia sottostante, che è che devi esaminare ogni bit una volta in qualche modo e non c'è modo di aggirare questo. Non è possibile, logicamente, rispondere a una domanda sui bit del numero senza ispezionarli.
Ora, suppongo di essere un po 'sciatto dal momento che molti di questi esempi sono in realtà O (n^2) poiché in Python è necessario esaminare l'intero numero in una volta, quindi con un intero lungo di Python di, diciamo, 100 byte, un + o uno & o una operazione/esaminerà ogni byte almeno una volta e ciò accadrà più e più volte fino a quando il numero sarà ridotto a zero (negli schemi descritti sopra), quindi questi, ancora, sono in realtà operazioni O (n^2). Non sono sicuro che Python consentirà una vera soluzione O (n) qui.
In ogni caso: se ti chiedessi davvero della complessità computazionale, che in particolare significa analisi big-O, questa è la tua risposta. :-)
fonte
2009-05-09 20:12:20
Si tratta di un duplicato di http://stackoverflow.com/questions/843737/count-bits-in-the-number-closed – ChrisW
@ ChrisW- python ec sono due diverse lanaghe – TStamper
Non è un duplicato esatto. le operazioni bit a bit in python sono molto più costose che c. –