Complessità della funzione fattoriale

di il
5 risposte

Complessità della funzione fattoriale

Si parla di complessità nelle funzioni ricorsive, p.e. prendiamo il fattoriale:
int fact (int n) {
if (n == 0) 
   return 1; 
else 
   return n*fact(n-1);
}
Di seguito la definizione fornita dalla dispensa: Ho difficoltà a capire due punti:

1.
Non possiamo però semplificare completamente le espressioni O-grande così ottenute, perchè esse in generale contengono funzioni concrete oltre a classi di funzioni. Quindi è necessario a questo punto rimpiazzare le classi di funzioni che compaiono in una espressione con funzioni concrete, anche se espresse mediante costanti simboliche.

Cosa si intende per funzioni concrete e classi di funzioni? Non capisco.

2.
il testo riporta:
Per T(n)$ , n>0 , abbiamo un tempo O(1) complessivo per il test, la chiamata ricorsiva e la moltiplicazione più il tempo per l'esecuzione della funzione applicata a n-1, quindi: T(n) = O(1)+ T(n-1)

OK per O(1) tempo per il test cioè if (n == 0)
OK per la chiamata ricorsiva T(n-1) cioè fact(n-1)
a questo punto ho già esaurito i termini dell'espressione O(1)+ T(n-1)... allora dove si evincono i tempi per la moltiplicazione e l'esecuzione della funzione applicata a n-1 ? Forse sono assorbiti a O(1) ?

Grazie in anticipo per il vostro contributo.

5 Risposte

  • Re: Complessità della funzione fattoriale

    1) Come fai a definire la notazione O-grande senza definire una classe di funzioni? Torna indietro nel libro e leggi con più attenzione.
    2) Il tuo fattoriale fact() è O(n). T(n) = b + T(n-1) = b + b + T(n-2) = ... = b*(n-1) + a = b*n - b + a = O(n).
    Il numero di istruzioni esatte per moltiplicazione e chiamata della funzione varia da processore a processore e le vedi nel disassembly (quasi sicuramente 1 per la moltiplicazione tra int e una manciata per le chiamate a funzione), ma di sicuro sono costanti, ed è tutto quello che importa sapere
  • Re: Complessità della funzione fattoriale

    NON e' complessiva ma complessita' computazionale

    Da dove hai tirato furoi questo strano termine?
  • Re: Complessità della funzione fattoriale

    migliorabile ha scritto:


    NON e' complessiva ma complessita' computazionale

    Da dove hai tirato furoi questo strano termine?
    Colpa del correttore grammaticale! Correggo subito
  • Re: Complessità della funzione fattoriale

    Weierstrass ha scritto:


    1) Come fai a definire la notazione O-grande senza definire una classe di funzioni? Torna indietro nel libro e leggi con più attenzione.
    2) Il tuo fattoriale fact() è O(n). T(n) = b + T(n-1) = b + b + T(n-2) = ... = b*(n-1) + a = b*n - b + a = O(n).
    Il numero di istruzioni esatte per moltiplicazione e chiamata della funzione varia da processore a processore e le vedi nel disassembly (quasi sicuramente 1 per la moltiplicazione tra int e una manciata per le chiamate a funzione), ma di sicuro sono costanti, ed è tutto quello che importa sapere
    Grazie 1000, per il punto 1 proceduto subito alla rilettura
  • Re: Complessità della funzione fattoriale

    Weierstrass ha scritto:


    1) Come fai a definire la notazione O-grande senza definire una classe di funzioni? Torna indietro nel libro e leggi con più attenzione.
    Ora, dopo la rilettura, è tutto più chiaro!
Devi accedere o registrarti per scrivere nel forum
5 risposte