Analisi algoritmo ricorsivo

di il
2 risposte

Analisi algoritmo ricorsivo

Salve, ho difficoltà a risolvere il costo asintotico della funzione f() del seguente algoritmo
static int f(int q) {
if(q <= 1) return q;
if((q % 2) == 0) return g(q>>1);
else return f(q-1);
}
static int g(int r) {
if(r <= 1) return f(r);
if((r % 3) == 0) return f(r/3);
else return f(r+1);
}
Ho pensato che il caso peggiore è quello in cui q>>1 non è mai divisibile per 3 e che il numero di chiamate di g siano logaritmiche in funzione di q, ma non riesco ad andare avanti.Qualcuno potrebbe spiegarmi come ci si muove quando mi trovo davanti ad algoritmi simili?
Grazie per le eventuali risposte

2 Risposte

  • Re: Analisi algoritmo ricorsivo

    Ciao complessita secondo me per la funzione f sarebbe O(q) perche' le chiamate a una funzione esterna non esistono simultaneamente nel call stack (Cracking the coding interview, pag.41 )
  • Re: Analisi algoritmo ricorsivo

    magicsign ha scritto:


    Ciao complessita secondo me per la funzione f sarebbe O(q) perche' le chiamate a una funzione esterna non esistono simultaneamente nel call stack (Cracking the coding interview, pag.41 )
    Grazie per la risposta, questo vale solo nel caso in cui la funzione g() invoca f()? In quanto se g() fosse stato un semplice ciclo avrei dovuto considerare il costo di quest'ultimo anche per f().
Devi accedere o registrarti per scrivere nel forum
2 risposte