Cercando di trovare la complessità temporale dell'algoritmo del modulo

0

Non riesco a capire la complessità temporale di questo algoritmo che ho scritto per la ricerca del modulo. L'ho aggiunto qui in psuedocode.

Modulo(int x, int n)
// x is the dividend, n is the divisor
    e := 1;
    while(n^e < x)
        e++;
    end
    e--;
//This first part above is clearly O(log x)
    while(e >= 1)
        while(n^e <= x)
            x -= n^e;
        end
        e--;
    end
//This second part above is more challenging. The outer loop goes through log x cycles, while the inner loop goes through (x mod (n^(e+1)))/(n^e) cycles.
    return x;
end

Spero che non mi sfugga nulla di ovvio, ma questo non sembra un problema facile da risolvere. Grazie in anticipo. EDIT: A proposito, ^ rappresenta l'esponenziazione in questo caso, solo per evitare confusione.

    
posta J O'fortune 19.05.2016 - 11:04
fonte

1 risposta

0

La complessità è O(log(x) * n) , o O(log(x) * (n - 1)) se vuoi il limite superiore esatto.

Perché? Poiché il loop interno può essere determinato per avere al massimo n - 1 iterazioni ciascuna.

Puoi provocare il caso peggiore per x = n^i - 1 per qualsiasi intero positivo x , n e i .

    
risposta data 19.05.2016 - 20:11
fonte

Leggi altre domande sui tag