










Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Algoritmi e strutture dati - appunti - Prof. Foresti
Tipologia: Appunti
1 / 18
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!











Computer programs → solve problems Passi da seguire →
implementare a piacimento.
Rappresenta un lower-bound asintotico, è più debole di ϴ(g(n)). Da notare:
Lo stesso vale per O, Ω, o, w.
corpo del ciclo; nel caso il numero di iterazioni non è noto, la si può stimare facendo sempre una valutazione pessimistica. Esempio: 6-10- Chiamate a funzione/procedura
di un'equazione di ricorrenza e poi risolvere tale equazione. Un'equazione di ricorrenza esprime il costo t(n) di una chiamata con input di dimensione n in funzione del costo t(n) che la funzione fa di sé stessa ma su un input di dimensione k. Es.: Esistono diversi modi per risolvere le equazioni di ricorrenza:
Lista → sequenza ordinata di 0 o più elementi di un dato tipo; a1, a2, a3, … , an n=lunghezza della lista n=0 lista vuota. È possibile dire se un elemento precede/segue un altro elemento nella lista. Operazioni su lista L:
dell'array sono magari vuoti! Soluzione → pensare all'array come chiuso su sé stesso: array circolare → la prima posizione viene subito dopo l'ultima. head Implementazione con puntatori È una classica lista con due puntatori in più: head e tail (anche lei può essere circolare). Stack e ricorsione Stack usato dai linguaggi di prog. per gestire la ricorsione. Stack dei record di attivazione Contiene tutto quello che serve a ciascuna procedura chiamata per operare correttamente, soprattutto quando si torna al chiamante. Ogni procedura/funzione chiamata aggiunge un record di attivazione al top dello stack. Ricorsione → permette di descrivere in modo finito un insieme potenzialmente infinito di oggetti, descrivendo ciascuno in termini di sé stesso direttamente o indirettamente. Per terminare, la ricorsione deve avere un caso base, cioè un caso deve essere sempre raggiunto e che è definito in modo non ricorsivo. La ricorsione ha poi un passo ricorsivo. NOTA : ogni chiamata ricorsiva aggiunge un record di attivazione nello stack se la ricorsione dura troppo potrebbe esaurire lo spazio dedicato allo stack in memoria. Le procedure/funzioni ricorsive possono essere riformulate in termini iterativi se questa operazione richiede l'uso esplicito di uno stack che simula lo stack di attivazione, si dice che siamo in presenza di una funzione intrinsecamente ricorsiva. La tail recursion è un caso particolare di ricorsione facile da eliminare e si ha quando: il parametro di attivazione è passato per valore o se l'ultima istruzione è la chiamata ricorsiva.
Come tutte le cose, questa rappresentazione ha vantaggi e svantaggi: