Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a. 2003-2004 – 3° ciclo.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

1 I numeri relativi DEFINIZIONE. Si dicono numeri relativi tutti i numeri interi, razionali e irrazionali dotati di segno (positivo o negativo). ESEMPI.
Ricorrenze Il metodo di sostituzione Il metodo iterativo
Macchine di Turing e ricorsività generale
                      Insertion-Sort
Sottoprogrammi: funzioni e procedure
Scomposizione funzionale
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Procedure e funzioni ricorsive
Capitolo 8 Sistemi lineari.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
RICONOSCIMENTO DI SEQUENZE DI EVENTI
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Iterazione enumerativa (for)
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Esercizio 4 Data una stringa P di lunghezza m e definita sullalfabeto, scrivere un programma PERL per calcolare la seguente funzione: PREFIX_FUNCTION:
Esercizio 4 Data una stringa P di lunghezza m e definita sullalfabeto, scrivere un programma PERL per calcolare la seguente funzione: PREFIX_FUNCTION:
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Alberi di Ricorrenza Gli alberi di ricorrenza rappresentano un modo conveniente per visualizzare i passi di sostitu- zione necessari per risolvere una.
Progetto di algoritmi: metodologia "Divide et Impera"
LdL - LP1 - ver. 6 - lez aa Linguaggi di programmazione I La ricorsione Prof. Luigi Di Lascio Lezione 10.
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
La Programmazione Ricorsiva
Il Linguaggio C.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Elementi di Informatica
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Le proporzioni.
Metodo della moltiplicazione
Algoritmi e Programmazione strutturata
INFORMATICA MATTEO CRISTANI.
Algoritmi e Strutture Dati
I POLINOMI E LE LORO OPERAZIONI
14 marzo 2002 Avvisi:.
BIOINFO3 - Lezione 211 INPUT La lettura di un input dallo standard input (tastiera) si effettua utilizzando lespressione. Quando il programma incontra.
Conversione da base 10 a base X (Utilizzo della pila)
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Complessità di un algoritmo
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Array (ordinamento) CORDA – Informatica A. Ferrari.
PROGRAMMA IL FUTURO Anno Scolastico 2014 / 2015
Ricorsione CORDA – Informatica A. Ferrari Testi da Alessandro Bugatti
Sistemi e Tecnologie Informatiche Verifica di correttezza di un programma.
La ricorsione.
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
Sistemi basati su conoscenza Metodi di ricerca informata Prof. M.T. PAZIENZA a.a
Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Risoluzione dei Problemi (parte 2) Agostino Poggi.
Algoritmi.
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Problemi, algoritmi e programmazione
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Sistemi e Tecnologie Informatiche Complessità di calcolo.
Divide et Impera Parte 11 - Risoluzione di problemi per divisione in sottoproblemi “bilanciati” Corso A: Prof. Stefano Berardi
Suggerimenti [1d5] SE la prima lettera della matrice (in alto a sinistra, matrice[0,0]) è diversa dalla prima lettera della parola (parola[0]) ALLORA siamo.
Algoritmi e Strutture Dati Università di Camerino Corso di Laurea in Informatica (12 CFU) I periodo didattico Emanuela Merelli
Algoritmi e Strutture Dati Luciano Gualà
Criteri di divisibilità
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
I numeri relativi DEFINIZIONE. Si dicono numeri relativi tutti i numeri interi, razionali e irrazionali dotati di segno (positivo o negativo). ESEMPI Numeri.
Transcript della presentazione:

Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo

Ricorsione Per ricorsione si intende la tecnica di risoluzione di un problema in termini della soluzione ad una versione più piccola (situazione fondamentale) dello stesso problema. Caratteristiche della ricorsione: ciascun passo ricorsivo semplifica la risoluzione generale del problema l’ultimo passo (passo base) del problema viene risolto direttamente Identificazione di una condizione di uscita dalla ricorsione (coincide con il caso base)

Ricorsione Punti su cui riflettere: Concetto di ricorsione Relazioni tra ricorsione ed iterazione Quali problemi devono essere risolti con metodi ricorsivi e quali con metodi iterativi? Ricorsione come approccio mentale Scrivere funzioni ricorsive aiuta la comprensione delle stesse Capire quando usare la ricorsione determina l’efficienza di un algoritmo

Risorsione Approccio: Identifica qual è l’aspetto fondamentale del problema Risolvilo Struttura il problema più complesso in termini di quello fondamentale Problema generale come una cascata di problemi minori ciascuno risolto dalla stessa funzione che affronta sottoproblemi sempre più piccoli finché raggiunge quello fondamentale e lo elabora senza problemi. L’importante è identificare la struttura base dell’algoritmo

Ricorsione (esempio1) Permutazione Si consideri una funzione che produca tutte le permutazione di una stringa. Esempio di permutazioni di una stringa di lettere: "eat" "eta" "aet" "ate" "tea" "tae" Se una stringa ha n lettere, allora il numero delle permutazioni è dato dalla funzione fattoriale: n! = 1 x 2 x 3 x... x n Ovvero n! = (n - 1)! x n

Ricorsione (esempio1) Per calcolare il valore di n! si può usare un ciclo, oppure ricorrere alla soluzione ricorsiva n! = (n - 1)! x n con l’assunzione fondamentale (passo base) che: 1! = 1 0! = 1 Quindi si può implementare una funzione fattoriale del tipo: int factorial(int n) { if (n == 0) return 1; int smaller_factorial = factorial(n-1); int result = smaller_factorial * n; return result; }

Ricorsione (esempio1) Una funzione che generi tutte le permutazioni di una parola è data da vector generate_permutations(string word); Tutte le permutazioni della stringa "eat“ sono date da: vector v= generate_permutations("eat"); for(int i = 0; i < v.size(); i++) cout << v[i] << "\n";

Ricorsione (esempio1) Per generare tutte le permutazioni ricorsivamente, si generano tutte le permutazioni che cominciano con la lettera 'e', poi quelle che cominciano con la lettera a, quindi quelle che cominciano con la lettera t. Oppure applichiamo la permutazione (con un approccio ricorsivo) su stringhe da due ottenendo "at" "ta“, "et" "te“, "ae" "ea" Aggiungiamo le prime lettere (lasciate inizialmente da parte) per trovare tutte le permutazioni "eat" "eta“, "aet" "ate“, "tae" "tea"

Ricorsione (esempio2) Una parola si dice palindroma se è costituita da una stringa che è uguale e se stessa quando la si consideri dal verso opposto (es. anna, alla, ici, …) Step 1: Semplificare l’input in modo che lo stesso metodo risolutivo possa essere applicato alla componente più semplice del problema; esempi: Eliminare il primo carattere Eliminare l’ultimo carattere Eliminare insieme il primo e l’ultimo carattere Eliminare un carattere dal centro della parola Tagliare la stringa in due metà.

Ricorsione (esempio2) Step 2: Si combinano le soluzioni relative agli input più semplici con la soluzione del problema originale La complessità di ciascuna soluzione parziale non deve preoccupare, viene lasciata al passo successivo (che sarà risolto da qualcun altro) Si consideri l’ipotesi di tagliare a metà la parola: nel caso di “rotor” non si ottengono risultati incoraggianti Si consideri l’ipotesi (più interessante) di eliminare il primo e l’ultimo carattere : con la parola “rotor” si ottiene "oto“. Verificata che è palindroma, sarebbe verificata che anche la stringa iniziale è palindroma, quindi (definiz. ricorsiva) Una parola è palindroma se il primo e l’ultimo carattere coincidono, (passo base) la parola ottenuta eliminando il primo e l’ultimo carattere è palindroma

Ricorsione (esempio2) Step 3: Trovare la soluzione per il caso base (più semplice). La ricorsione si ferma con il caso base Nel caso delle parole palindrome il caso base coincide con: stringhe di due caratteri stringhe con un solo carattere stringa vuota (senza caratteri) La stringa di due caratteri non richiede una elaborazione speciale: basta toglierle il primo e l’ultimo carattere e diventa una stringa vuota. 1.Una stringa di un solo carattere è palindroma per definizione 2.Una stringa vuota è palindroma per definizione

Ricorsione (esempio2) Step 4: La soluzione finale si ottiene combinando la soluzione del caso semplice con quella del caso base Talvolta risulta più facile trovare soluzioni ricorsive se si cambia leggermente il problema originario Talvolta capita che funzioni cooperanti si chiamino vicendevolmente in un approccio ricorsivo (ricorsione reciproca) (esempio: calcolo delle espressioni aritmetiche)

Ricorsione (esempio3) Ricorsione reciproca Per una espressione aritmetica si può affermare che: Un’espressione è un termine, o una somma di termini, o una differenza di termini Un termine è o un fattore, o un prodotto di fattori, o un quoziente di fattori Un fattore è o un numero (caso base) o una espressione racchiusa tra parentesi

Efficienza della ricorsione Sebbene la ricorsione costituisca un approccio molto potente per la risoluzione di algoritmi complessi, l’efficienza delle implementazioni può non essere ottimale richiedendo un tempo incredibile per arrivare alla soluzione finale Molto spesso la soluzione iterativa e quella ricorsiva hanno la stessa prestazione; solo pochi problemi hanno una soluzione ricorsiva più veloce di quella iterativa. Le soluzioni ricorsive risultano più facili da capire ed implementare correttamente Le soluzioni ricorsive sono molto più efficienti nell’interfaccia utente e richiedono uno sforzo di analisi più che di programmazione