1/11/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo 2010 10 –

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Equazioni e calcoli chimici
Il problem-solving Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino.
Unità G3 Algoritmi notevoli. Ordinamento Un insieme di dati {a0, a1, a2, …, an} si dice ordinato in ordine crescente se a0 a1 a2 a3 … an I dati sono generalmente.
Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi.
Universita di Camerino
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Informatica Generale Marzia Buscemi
Un nuovo tipo di dati Gli array.
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Algoritmi in C++ (1) da completare
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Process synchronization
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Introduzione alla programmazione lll
APPUNTI SUL LINGUAGGIO C
Analisi e Sintesi di circuiti sequenziali. Definizione Una macchina sequenziale é un sistema nel quale, detto I(t) l'insieme degli ingressi in t, O(t)
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Lezione 24 maggio 2007 Strutture File Allocazione dinamica della memoria.
Il problem-solving Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Fibonacci Heaps e il loro utilizzo nell’algoritmo di Prim
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Esercizi Liste.
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Corso JAVA Lezione n° 11 Istituto Statale di Istruzione Superiore “F. Enriques”
Ricerca sequenziale in un array di interi
Complessità di un algoritmo
11/21/2014E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
CORSO DI PROGRAMMAZIONE II Lezione 22
3/31/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 3: 31 Marzo 2014 Marco D. Santambrogio – Gianluca Durelli –
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
4/4/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Un.
4/5/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
Risoluzione di Problemi con gli algoritmi Ricorsivi
Introduzione a Javascript
La ricorsione.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Terza giornata: principali classi di complessità computazionale dei problemi Guido Proietti.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
4/19/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
03/19/09E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2009 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo 2009 Codici.
Olimpiadi di Informatica 2010 Giornate preparatorie
4/25/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Liste di Interi Esercitazione. Una variante Liste concatenate di Integers Non modificabile Costruttori per creare la lista vuota o un nodo Metodi d’istanza.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
1 Un esempio con iteratore: le liste ordinate di interi.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Transcript della presentazione:

1/11/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Un esempio di problema con grafo implicito: “depura”. (versione 11/01/2015)

Il problema Bisogna realizzare un procedimento chimico per la depurazione dell'acqua, avendo a disposizione un certo numero di sostanze, numerate da 1 in avanti. Per un'efficace depurazione, è necessario inserire nell'acqua la sostanza chimica purificante numero 1, tenendo presente che nell'acqua sono già presenti K sostanze chimiche. Per quanto riguarda il procedimento adottato, valgono R precise regole per poter inserire le sostanze chimiche nell'acqua. Tali regole prevedono che una certa sostanza A possa essere inserita solo se nell'acqua sono già presenti un dato insieme di sostanze, ad esempio, A1, A2,..., An (dove Ai ≠ A per 1 ≤ i ≤ n). In tal caso, scriviamo tale regola di inserimento nel seguente modo A :- A1, A2,..., An e diciamo che A compare nella parte sinistra della regola. Al fine di un corretto inserimento delle sostanze, valgono le seguenti osservazioni: 11/01/ E. Giovannetti - AlgELab Lez.402

Il problema l'eventuale presenza di ulteriori sostanze non inibisce l'applicabilità della regola suddetta; se A compare nella parte sinistra di una regola, allora non può comparire nella parte sinistra di altre regole e non può essere una delle K sostanze già presenti nell'acqua; qualora una sostanza sia priva di regole (ossia non compaia mai nella parte sinistra di una qualche regola) e non sia già presente nell’acqua, tale sostanza non può essere inserita; non è necessario usare tutte le regole e/o tutte le sostanze a disposizione. 11/01/ E. Giovannetti - AlgELab Lez.403

Il problema: esempio. Ipotizzando che le sostanze 2 e 3 siano già presenti nell'acqua (K=2) e che valgano le seguenti regole (R=4): 4 : :-- 2, 3 7 :-- 2, 4 1 :-- 3, 7, 4 possiamo inserire la sostanza 4 perché la sostanza 2 è già presente (prima regola); in seguito, possiamo inserire anche la sostanza 7 perché le sostanze 2 e 4 sono presenti nell'acqua (terza regola); a questo punto, possiamo aggiungere la sostanza 1 perché le sostanze 3, 7 e 4 sono presenti (ultima regola). Quindi abbiamo inserito un totale di S=3 sostanze, ossia 4, 7 e 1 (oltre alle K=2 già presenti), per purificare l'acqua. 11/01/ E. Giovannetti - AlgELab Lez.404

Il problema Scrivere un programma che calcoli il numero minimo S di sostanze da inserire per purificare l'acqua, conoscendo le K sostanze già presenti nell'acqua e le R regole di inserimento. Tale numero sarà S = 0 se la sostanza 1 è già presente nell'acqua; sarà S = 1 se la sostanza 1 può essere inserita direttamente e non è già presente; in generale, sarà S = m se è necessario inserire m-1 sostanze prima di poter inserire la sostanza 1. Nel caso in cui non sia possibile purificare l'acqua, bisogna restituire il valore S = /01/ E. Giovannetti - AlgELab Lez.405

Il problema: dati di input. Il file input.txt è composto da K+R+1 righe. La prima riga contiene due interi positivi separati da uno spazio, rispettivamente il numero K delle sostanze chimiche già presenti nell'acqua e il numero R di regole di inserimento. La successive K righe contengono le K sostanze già presenti nell'acqua, dove ogni riga è composta da un solo intero positivo che rappresenta una di tali sostanze. Le ultime R righe rappresentano le R regole, al massimo una regola per ciascuna sostanza non presente nell'acqua. Ciascuna riga è composta da n+2 interi positivi A, n, A1, A2,..., An separati da uno spazio (dove Ai ≠ A per 1 ≤ i ≤ n), i quali rappresentano la regola A :-- A1, A2,..., An. 11/01/ E. Giovannetti - AlgELab Lez.406

Il problema: assunzioni. 1 ≤ K, R ≤ 1000 Il numero di sostanze chimiche a disposizione è al massimo I casi di prova non contengono mai situazioni cicliche: in tal modo, non accade mai che una sostanza A possa essere inserita solo se A stessa è già presente nell'acqua. 11/01/ E. Giovannetti - AlgELab Lez.407

11/01/ E. Giovannetti - AlgELab Lez.408 Le strutture-dati Da un punto di vista astratto, i dati costituiscono un grafo, in cui i nodi sono le sostanze e gli archi sono specificati dalle le regole, che non sono nient’altro che le liste di adiacenza. #define N 2000 numero massimo delle sostanze chimiche; #define RMAX 1000 numero massimo di regole; Poiché il numero massimo di sostanze chimiche è limitato, definiamo un vettore di booleani, col significato ovvio: bool presente[N+1]; in modo da poter stabilire in tempo costante se una sostanza è già presente nell’acqua (perché presente inizialmente o perché aggiunta successivamente dall’applicazione di una regola).

Le strutture-dati Rappresentiamo l’insieme di regole come un vettore di vettori di interi. Anche qui, poiché il numero massimo di regole è limitato, per poter accedere a ogni regola in tempo costante allochiamo un vettore di RMAX elementi e poi usiamo la parte sinistra della regola come indice nel vettore: int** regole = new int*[RMAX+1]; Nota: in questo modo alloco un array di RMAX+1 puntatori ad (array di) interi; ogni array di interi sarà allocato al momento dell’input della regola dal file input.txt:... fin >> A >> n; int * regola = new int[n+1]; regola[0] = n; for(...)... ; regole[A] = regola; 11/01/ E. Giovannetti - AlgELab Lez.409

Esempio Se le regole sono: 5:- 2, 3. 4:- 2. 7:- 2, 4. 1:- 3, 7, 4. 11/01/ E. Giovannetti - AlgELab Lez grado rappresentazione con liste di adiacenza

La procedura int S = 0; è la variabile globale risultato; bool aggiungi(int i) è la procedura ricorsiva che cerca di aggiungere all’acqua la sostanza i, restituendo true o false a seconda che la sostanza i risulti alla fine presente o no (o perché già presente, o perché l’aggiunta ha avuto successo); ovviamente quando aggiunge una sostanza incrementa S. Nel main basterà invocare aggiungi sulla sostanza 1 e controllare poi se ha avuto successo o no:... bool ok = aggiungi(1); fout << (ok ? S : -1) << endl;... 11/01/ E. Giovannetti - AlgELab Lez.4011