Sto cercando di capire il grande O con le operazioni bit a bit. Ho 2 funzioni che stanno risolvendo la stessa domanda da una prospettiva diversa.
num1BitsSecondSolution
inizia a spostare il numero a destra fino a quando il numero è 0. Quindi la complessità sembra = O (larghezza (n)) ma come posso notare width
?
num1BitsThirdSolution
è più complesso calcolare la complessità rispettata perché fa semplicemente number = number & (number - 1)
che è basato sulla forma di rappresentazione iniziale bit del numero. Esempio: se ci sono 4 "1" bit nel numero allora la complessità è O(4)
quindi come potrei spiegarli in Big O?
function num1BitsSecondSolution($number)
{
if ($number <= 0) {
return 0;
}
for ($c = 0; $number; $number >>= 1) {
$c += $number & 1;
}
return $c;
}
function num1BitsThirdSolution($number)
{
if ($number <= 0) {
return 0;
}
for ($c = 0; $number; $c++) {
$number &= $number - 1;
}
return $c;
}