Come calcolare la notazione O grande in base alla larghezza del numero?

0

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;
}
    
posta FZE 18.04.2016 - 06:48
fonte

1 risposta

1

O (log n) dove n è la dimensione del numero. Le due funzioni hanno la stessa complessità, poiché ognuna esegue un bit di operazione. Il secondo esempio potrebbe essere più veloce a seconda dei bit effettivi, ma la notazione O grande viene calcolata per il caso peggiore, che in questo caso sarebbe un numero con solo 1 bit.

    
risposta data 18.04.2016 - 07:46
fonte

Leggi altre domande sui tag